diff options
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/geos/factory.py')
-rw-r--r-- | lib/python2.7/site-packages/django/contrib/gis/geos/factory.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/geos/factory.py b/lib/python2.7/site-packages/django/contrib/gis/geos/factory.py new file mode 100644 index 0000000..2e5fa4f --- /dev/null +++ b/lib/python2.7/site-packages/django/contrib/gis/geos/factory.py @@ -0,0 +1,35 @@ +from django.contrib.gis import memoryview +from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex + +from django.utils import six + + +def fromfile(file_h): + """ + Given a string file name, returns a GEOSGeometry. The file may contain WKB, + WKT, or HEX. + """ + # If given a file name, get a real handle. + if isinstance(file_h, six.string_types): + with open(file_h, 'rb') as file_h: + buf = file_h.read() + else: + buf = file_h.read() + + # If we get WKB need to wrap in memoryview(), so run through regexes. + if isinstance(buf, bytes): + try: + decoded = buf.decode() + if wkt_regex.match(decoded) or hex_regex.match(decoded): + return GEOSGeometry(decoded) + except UnicodeDecodeError: + pass + else: + return GEOSGeometry(buf) + + return GEOSGeometry(memoryview(buf)) + + +def fromstr(string, **kwargs): + "Given a string value, returns a GEOSGeometry object." + return GEOSGeometry(string, **kwargs) |