diff options
author | Christopher Lenz <cmlenz@gmail.com> | 2008-07-18 13:09:21 +0000 |
---|---|---|
committer | Christopher Lenz <cmlenz@gmail.com> | 2008-07-18 13:09:21 +0000 |
commit | 3413b21cf4795bdbd66f32bdadb5e8996c54f3db (patch) | |
tree | 06be7ebf77dff80a3702635ac90bfae97bc467cb /babel/localedata.py | |
parent | 79ba842492987a69258a94fa0eba55caa53bbec1 (diff) | |
download | babel-3413b21cf4795bdbd66f32bdadb5e8996c54f3db.tar.gz |
Fix for memory leak reported in #128. Thanks to Manlio Perillo for reporting the problem.
Diffstat (limited to 'babel/localedata.py')
-rw-r--r-- | babel/localedata.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/babel/localedata.py b/babel/localedata.py index 5a76f6a..203bec8 100644 --- a/babel/localedata.py +++ b/babel/localedata.py @@ -174,6 +174,9 @@ class Alias(object): 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 @@ class LocaleDataDict(DictMixin, dict): 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): |