From c0ab6e2902ba653f860422ae2dc727cae392bba8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 1 Jul 2005 04:44:16 +0000 Subject: [PATCH] Initial revision --- lib/sqlalchemy/util.py | 87 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 lib/sqlalchemy/util.py diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py new file mode 100644 index 0000000000..0634f92a54 --- /dev/null +++ b/lib/sqlalchemy/util.py @@ -0,0 +1,87 @@ + +__ALL__ = ['OrderedProperties', 'OrderedDict'] +import thread + +class OrderedProperties(object): + + def __init__(self): + self.__dict__['_list'] = [] + + def keys(self): + return self._list + + def __iter__(self): + return iter([self[x] for x in self._list]) + + def __setitem__(self, key, object): + setattr(self, key, object) + + def __getitem__(self, key): + return getattr(self, key) + + def __setattr__(self, key, object): + if not hasattr(self, key): + self._list.append(key) + + self.__dict__[key] = object + + +class OrderedDict(dict): + """A Dictionary that keeps its own internal ordering""" + def __init__(self, values = None): + self.list = [] + if values is not None: + for val in values: + self.update(val) + + def keys(self): + return self.list + + def update(self, dict): + for key in dict.keys(): + self.__setitem__(key, dict[key]) + + def setdefault(self, key, value): + if not self.has_key(key): + self.__setitem__(key, value) + return value + else: + return self.__getitem__(key) + + def values(self): + return map(lambda key: self[key], self.list) + + def __iter__(self): + return iter(self.list) + + def itervalues(self): + return iter([self[key] for key in self.list]) + + def iterkeys(self):return self.__iter__() + + def iteritems(self): + return iter([(key, self[key]) for key in self.keys()]) + + def __setitem__(self, key, object): + if not self.has_key(key): + self.list.append(key) + + dict.__setitem__(self, key, object) + + def __getitem__(self, key): + return dict.__getitem__(self, key) + + +class ThreadLocal(object): + def __init__(self): + object.__setattr__(self, 'tdict', {}) + + def __getattribute__(self, key): + try: + return object.__getattribute__(self, 'tdict')["%d_%s" % (thread.get_ident(), key)] + except KeyError: + raise AttributeError(key) + + def __setattr__(self, key, value): + object.__getattribute__(self, 'tdict')["%d_%s" % (thread.get_ident(), key)] = value + -- 2.47.2