summaryrefslogtreecommitdiff
path: root/babel/localedata.py
diff options
context:
space:
mode:
authorChristopher Lenz <cmlenz@gmail.com>2008-07-18 13:09:21 +0000
committerChristopher Lenz <cmlenz@gmail.com>2008-07-18 13:09:21 +0000
commit3413b21cf4795bdbd66f32bdadb5e8996c54f3db (patch)
tree06be7ebf77dff80a3702635ac90bfae97bc467cb /babel/localedata.py
parent79ba842492987a69258a94fa0eba55caa53bbec1 (diff)
downloadbabel-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.py11
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):