changeset 400:bd03ca5059f3 stable-0.9.x

Ported [438] and [439] back to 0.9.x branch.
author cmlenz
date Fri, 18 Jul 2008 13:10:46 +0000
parents 61cb2233fa49
children b12eeaad51c5
files ChangeLog babel/localedata.py setup.py
diffstat 3 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,8 @@
  * Currency symbol definitions that is defined with choice patterns in the
    CLDR data are no longer imported, so the symbol code will be used instead.
  * Fixed quarter support in date formatting.
+ * Fixed a serious memory leak that was introduces by the support for CLDR
+   aliases in 0.9.3 (ticket #128).
 
 
 Version 0.9.3
--- a/babel/localedata.py
+++ b/babel/localedata.py
@@ -174,6 +174,9 @@
             data = data[key]
         if isinstance(data, Alias):
             data = data.resolve(base)
+        elif isinstance(data, tuple):
+            alias, others = data
+            data = alias.resolve(base)
         return data
 
 
@@ -185,19 +188,21 @@
     def __init__(self, data, base=None):
         dict.__init__(self, data)
         if base is None:
-            base = self
+            base = data
         self.base = base
 
     def __getitem__(self, key):
-        val = dict.__getitem__(self, key)
+        orig = val = dict.__getitem__(self, key)
         if isinstance(val, Alias): # resolve an alias
             val = val.resolve(self.base)
         if isinstance(val, tuple): # Merge a partial dict with an alias
             alias, others = val
             val = alias.resolve(self.base).copy()
             merge(val, others)
-        if isinstance(val, dict): # Return a nested alias-resolving dict
+        if type(val) is dict: # Return a nested alias-resolving dict
             val = LocaleDataDict(val, base=self.base)
+        if val is not orig:
+            self[key] = val
         return val
 
     def copy(self):
--- a/setup.py
+++ b/setup.py
@@ -54,6 +54,7 @@
     packages = ['babel', 'babel.messages'],
     package_data = {'babel': ['global.dat', 'localedata/*.dat']},
     test_suite = 'babel.tests.suite',
+    tests_require = ['pytz'],
 
     entry_points = """
     [console_scripts]
Copyright (C) 2012-2017 Edgewall Software