summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py')
-rw-r--r--lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py b/lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py
new file mode 100644
index 0000000..e13e858
--- /dev/null
+++ b/lib/python2.7/site-packages/django/contrib/gis/geometry/test_data.py
@@ -0,0 +1,106 @@
+"""
+This module has the mock object definitions used to hold reference geometry
+for the GEOS and GDAL tests.
+"""
+import json
+import os
+
+from django.contrib import gis
+from django.utils import six
+from django.utils._os import upath
+
+
+# This global used to store reference geometry data.
+GEOMETRIES = None
+
+# Path where reference test data is located.
+TEST_DATA = os.path.join(os.path.dirname(upath(gis.__file__)), 'tests', 'data')
+
+
+def tuplize(seq):
+ "Turn all nested sequences to tuples in given sequence."
+ if isinstance(seq, (list, tuple)):
+ return tuple([tuplize(i) for i in seq])
+ return seq
+
+
+def strconvert(d):
+ "Converts all keys in dictionary to str type."
+ return dict([(str(k), v) for k, v in six.iteritems(d)])
+
+
+def get_ds_file(name, ext):
+ return os.path.join(TEST_DATA,
+ name,
+ name + '.%s' % ext
+ )
+
+
+class TestObj(object):
+ """
+ Base testing object, turns keyword args into attributes.
+ """
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ setattr(self, key, value)
+
+
+class TestDS(TestObj):
+ """
+ Object for testing GDAL data sources.
+ """
+ def __init__(self, name, **kwargs):
+ # Shapefile is default extension, unless specified otherwise.
+ ext = kwargs.pop('ext', 'shp')
+ self.ds = get_ds_file(name, ext)
+ super(TestDS, self).__init__(**kwargs)
+
+
+class TestGeom(TestObj):
+ """
+ Testing object used for wrapping reference geometry data
+ in GEOS/GDAL tests.
+ """
+ def __init__(self, **kwargs):
+ # Converting lists to tuples of certain keyword args
+ # so coordinate test cases will match (JSON has no
+ # concept of tuple).
+ coords = kwargs.pop('coords', None)
+ if coords:
+ self.coords = tuplize(coords)
+
+ centroid = kwargs.pop('centroid', None)
+ if centroid:
+ self.centroid = tuple(centroid)
+
+ ext_ring_cs = kwargs.pop('ext_ring_cs', None)
+ if ext_ring_cs:
+ ext_ring_cs = tuplize(ext_ring_cs)
+ self.ext_ring_cs = ext_ring_cs
+
+ super(TestGeom, self).__init__(**kwargs)
+
+
+class TestGeomSet(object):
+ """
+ Each attribute of this object is a list of `TestGeom` instances.
+ """
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ setattr(self, key, [TestGeom(**strconvert(kw)) for kw in value])
+
+
+class TestDataMixin(object):
+ """
+ Mixin used for GEOS/GDAL test cases that defines a `geometries`
+ property, which returns and/or loads the reference geometry data.
+ """
+ @property
+ def geometries(self):
+ global GEOMETRIES
+ if GEOMETRIES is None:
+ # Load up the test geometry data from fixture into global.
+ with open(os.path.join(TEST_DATA, 'geometries.json')) as f:
+ geometries = json.load(f)
+ GEOMETRIES = TestGeomSet(**strconvert(geometries))
+ return GEOMETRIES