# HG changeset patch # User cmlenz # Date 1216386646 0 # Node ID e6094bb5d67eb690ccbf91adddecc0b5f9904d6c # Parent 26733b2c995d09bd2a035b54d06647582a1f88e2 Ported [438] and [439] back to 0.9.x branch. diff --git a/0.9.x/ChangeLog b/0.9.x/ChangeLog --- a/0.9.x/ChangeLog +++ b/0.9.x/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 diff --git a/0.9.x/babel/localedata.py b/0.9.x/babel/localedata.py --- a/0.9.x/babel/localedata.py +++ b/0.9.x/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): diff --git a/0.9.x/setup.py b/0.9.x/setup.py --- a/0.9.x/setup.py +++ b/0.9.x/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]