summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/gis/geos/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/geos/base.py')
-rw-r--r--lib/python2.7/site-packages/django/contrib/gis/geos/base.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/geos/base.py b/lib/python2.7/site-packages/django/contrib/gis/geos/base.py
new file mode 100644
index 0000000..fd2693e
--- /dev/null
+++ b/lib/python2.7/site-packages/django/contrib/gis/geos/base.py
@@ -0,0 +1,51 @@
+from ctypes import c_void_p
+
+from django.contrib.gis.geos.error import GEOSException
+
+# Trying to import GDAL libraries, if available. Have to place in
+# try/except since this package may be used outside GeoDjango.
+try:
+ from django.contrib.gis import gdal
+except ImportError:
+ # A 'dummy' gdal module.
+ class GDALInfo(object):
+ HAS_GDAL = False
+ gdal = GDALInfo()
+
+# NumPy supported?
+try:
+ import numpy
+except ImportError:
+ numpy = False
+
+class GEOSBase(object):
+ """
+ Base object for GEOS objects that has a pointer access property
+ that controls access to the underlying C pointer.
+ """
+ # Initially the pointer is NULL.
+ _ptr = None
+
+ # Default allowed pointer type.
+ ptr_type = c_void_p
+
+ # Pointer access property.
+ def _get_ptr(self):
+ # Raise an exception if the pointer isn't valid don't
+ # want to be passing NULL pointers to routines --
+ # that's very bad.
+ if self._ptr: return self._ptr
+ else: raise GEOSException('NULL GEOS %s pointer encountered.' % self.__class__.__name__)
+
+ def _set_ptr(self, ptr):
+ # Only allow the pointer to be set with pointers of the
+ # compatible type or None (NULL).
+ if ptr is None or isinstance(ptr, self.ptr_type):
+ self._ptr = ptr
+ else:
+ raise TypeError('Incompatible pointer type')
+
+ # Property for controlling access to the GEOS object pointers. Using
+ # this raises an exception when the pointer is NULL, thus preventing
+ # the C library from attempting to access an invalid memory location.
+ ptr = property(_get_ptr, _set_ptr)