Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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
  • Loading branch information...
commit 800b6cfbbeca0bd1ae47bcac1f3503a8063161ae 1 parent ec4cf19
@adrianholovaty adrianholovaty authored
Showing with 24 additions and 1 deletion.
  1. +24 −1 django/contrib/gis/db/models/fields/__init__.py
View
25 django/contrib/gis/db/models/fields/__init__.py
@@ -46,7 +46,9 @@ def __init__(self, verbose_name=None, srid=4326, spatial_index=True, dim=2, **kw
# 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 @@ def __init__(self, verbose_name=None, srid=4326, spatial_index=True, dim=2, **kw
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.
Please sign in to comment.
Something went wrong with that request. Please try again.