From 800b6cfbbeca0bd1ae47bcac1f3503a8063161ae Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Fri, 10 Apr 2009 16:58:29 +0000 Subject: [PATCH] Changed GeoDjango GeometryField to lazily load units, units_name and _spheroid git-svn-id: http://code.djangoproject.com/svn/django/trunk@10486 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../contrib/gis/db/models/fields/__init__.py | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/django/contrib/gis/db/models/fields/__init__.py b/django/contrib/gis/db/models/fields/__init__.py index 278e9896ee..d8850063ab 100644 --- a/django/contrib/gis/db/models/fields/__init__.py +++ b/django/contrib/gis/db/models/fields/__init__.py @@ -46,7 +46,9 @@ class GeometryField(SpatialBackend.Field): # Setting the SRID and getting the units. Unit information must be # easily available in the field instance for distance queries. self.srid = srid - self.units, self.units_name, self._spheroid = get_srid_info(srid) + + # units_cache, units_name_cache and _spheroid_cache are lazily loaded. + self._units_cache = self._units_name_cache = self._spheroid_cache = None # Setting the dimension of the geometry field. self.dim = dim @@ -57,6 +59,27 @@ class GeometryField(SpatialBackend.Field): super(GeometryField, self).__init__(**kwargs) # Calling the parent initializtion function + def _populate_srid_info(self): + self._units_cache, self._units_name_cache, self._spheroid_cache = get_srid_info(self.srid) + + def _get_units(self): + if self._units_cache is None: + self._populate_srid_info() + return self._units_cache + units = property(_get_units) + + def _get_units_name(self): + if self._units_name_cache is None: + self._populate_srid_info() + return self._units_name_cache + units_name = property(_get_units_name) + + def _get_spheroid(self): + if self._spheroid_cache is None: + self._populate_srid_info() + return self._spheroid_cache + _spheroid = property(_get_spheroid) + # The following properties are for formerly private variables that are now # public for GeometryField. Because of their use by third-party applications, # a deprecation warning is issued to notify them to use new attribute name.