summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py')
-rw-r--r--lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py155
1 files changed, 0 insertions, 155 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py b/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py
deleted file mode 100644
index 6963b78..0000000
--- a/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py
+++ /dev/null
@@ -1,155 +0,0 @@
-"""
- This module houses the ctypes initialization procedures, as well
- as the notice and error handler function callbacks (get called
- when an error occurs in GEOS).
-
- This module also houses GEOS Pointer utilities, including
- get_pointer_arr(), and GEOM_PTR.
-"""
-import logging
-import os
-import re
-from ctypes import c_char_p, Structure, CDLL, CFUNCTYPE, POINTER
-from ctypes.util import find_library
-
-from django.contrib.gis.geos.error import GEOSException
-from django.core.exceptions import ImproperlyConfigured
-
-logger = logging.getLogger('django.contrib.gis')
-
-# Custom library path set?
-try:
- from django.conf import settings
- lib_path = settings.GEOS_LIBRARY_PATH
-except (AttributeError, EnvironmentError,
- ImportError, ImproperlyConfigured):
- lib_path = None
-
-# Setting the appropriate names for the GEOS-C library.
-if lib_path:
- lib_names = None
-elif os.name == 'nt':
- # Windows NT libraries
- lib_names = ['geos_c', 'libgeos_c-1']
-elif os.name == 'posix':
- # *NIX libraries
- lib_names = ['geos_c', 'GEOS']
-else:
- raise ImportError('Unsupported OS "%s"' % os.name)
-
-# Using the ctypes `find_library` utility to find the path to the GEOS
-# shared library. This is better than manually specifiying each library name
-# and extension (e.g., libgeos_c.[so|so.1|dylib].).
-if lib_names:
- for lib_name in lib_names:
- lib_path = find_library(lib_name)
- if not lib_path is None: break
-
-# No GEOS library could be found.
-if lib_path is None:
- raise ImportError('Could not find the GEOS library (tried "%s"). '
- 'Try setting GEOS_LIBRARY_PATH in your settings.' %
- '", "'.join(lib_names))
-
-# Getting the GEOS C library. The C interface (CDLL) is used for
-# both *NIX and Windows.
-# See the GEOS C API source code for more details on the library function calls:
-# http://geos.refractions.net/ro/doxygen_docs/html/geos__c_8h-source.html
-lgeos = CDLL(lib_path)
-
-# The notice and error handler C function callback definitions.
-# Supposed to mimic the GEOS message handler (C below):
-# typedef void (*GEOSMessageHandler)(const char *fmt, ...);
-NOTICEFUNC = CFUNCTYPE(None, c_char_p, c_char_p)
-def notice_h(fmt, lst):
- fmt, lst = fmt.decode(), lst.decode()
- try:
- warn_msg = fmt % lst
- except:
- warn_msg = fmt
- logger.warning('GEOS_NOTICE: %s\n' % warn_msg)
-notice_h = NOTICEFUNC(notice_h)
-
-ERRORFUNC = CFUNCTYPE(None, c_char_p, c_char_p)
-def error_h(fmt, lst):
- fmt, lst = fmt.decode(), lst.decode()
- try:
- err_msg = fmt % lst
- except:
- err_msg = fmt
- logger.error('GEOS_ERROR: %s\n' % err_msg)
-error_h = ERRORFUNC(error_h)
-
-#### GEOS Geometry C data structures, and utility functions. ####
-
-# Opaque GEOS geometry structures, used for GEOM_PTR and CS_PTR
-class GEOSGeom_t(Structure): pass
-class GEOSPrepGeom_t(Structure): pass
-class GEOSCoordSeq_t(Structure): pass
-class GEOSContextHandle_t(Structure): pass
-
-# Pointers to opaque GEOS geometry structures.
-GEOM_PTR = POINTER(GEOSGeom_t)
-PREPGEOM_PTR = POINTER(GEOSPrepGeom_t)
-CS_PTR = POINTER(GEOSCoordSeq_t)
-CONTEXT_PTR = POINTER(GEOSContextHandle_t)
-
-# Used specifically by the GEOSGeom_createPolygon and GEOSGeom_createCollection
-# GEOS routines
-def get_pointer_arr(n):
- "Gets a ctypes pointer array (of length `n`) for GEOSGeom_t opaque pointer."
- GeomArr = GEOM_PTR * n
- return GeomArr()
-
-# Returns the string version of the GEOS library. Have to set the restype
-# explicitly to c_char_p to ensure compatibility accross 32 and 64-bit platforms.
-geos_version = lgeos.GEOSversion
-geos_version.argtypes = None
-geos_version.restype = c_char_p
-
-# Regular expression should be able to parse version strings such as
-# '3.0.0rc4-CAPI-1.3.3', '3.0.0-CAPI-1.4.1', '3.4.0dev-CAPI-1.8.0' or '3.4.0dev-CAPI-1.8.0 r0'
-version_regex = re.compile(
- r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))'
- r'((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)( r\d+)?$'
-)
-def geos_version_info():
- """
- Returns a dictionary containing the various version metadata parsed from
- the GEOS version string, including the version number, whether the version
- is a release candidate (and what number release candidate), and the C API
- version.
- """
- ver = geos_version().decode()
- m = version_regex.match(ver)
- if not m:
- raise GEOSException('Could not parse version info string "%s"' % ver)
- return dict((key, m.group(key)) for key in (
- 'version', 'release_candidate', 'capi_version', 'major', 'minor', 'subminor'))
-
-# Version numbers and whether or not prepared geometry support is available.
-_verinfo = geos_version_info()
-GEOS_MAJOR_VERSION = int(_verinfo['major'])
-GEOS_MINOR_VERSION = int(_verinfo['minor'])
-GEOS_SUBMINOR_VERSION = int(_verinfo['subminor'])
-del _verinfo
-GEOS_VERSION = (GEOS_MAJOR_VERSION, GEOS_MINOR_VERSION, GEOS_SUBMINOR_VERSION)
-GEOS_PREPARE = GEOS_VERSION >= (3, 1, 0)
-
-if GEOS_PREPARE:
- # Here we set up the prototypes for the initGEOS_r and finishGEOS_r
- # routines. These functions aren't actually called until they are
- # attached to a GEOS context handle -- this actually occurs in
- # geos/prototypes/threadsafe.py.
- lgeos.initGEOS_r.restype = CONTEXT_PTR
- lgeos.finishGEOS_r.argtypes = [CONTEXT_PTR]
-else:
- # When thread-safety isn't available, the initGEOS routine must be called
- # first. This function takes the notice and error functions, defined
- # as Python callbacks above, as parameters. Here is the C code that is
- # wrapped:
- # extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function);
- lgeos.initGEOS(notice_h, error_h)
- # Calling finishGEOS() upon exit of the interpreter.
- import atexit
- atexit.register(lgeos.finishGEOS)