Author: adrian
Date: 2009-04-10 11:58:29 -0500 (Fri, 10 Apr 2009)
New Revision: 10486

Modified:
   django/trunk/django/contrib/gis/db/models/fields/__init__.py
Log:
Changed GeoDjango GeometryField to lazily load units, units_name and _spheroid

Modified: django/trunk/django/contrib/gis/db/models/fields/__init__.py
===================================================================
--- django/trunk/django/contrib/gis/db/models/fields/__init__.py        
2009-04-10 16:34:49 UTC (rev 10485)
+++ django/trunk/django/contrib/gis/db/models/fields/__init__.py        
2009-04-10 16:58:29 UTC (rev 10486)
@@ -46,8 +46,10 @@
         # 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 @@
 
         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.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to