summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-02-28 23:33:15 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-02-28 23:33:15 +0000
commit3c6474481d0d9ad08e821f81a09bc11886a1c935 (patch)
tree1665f4e061ad375e47957b0cada3040a61b6d97e /lib/sqlalchemy/util.py
parenta4ba9b5414ee3d18667b67d57a361845a8354d3c (diff)
downloadsqlalchemy-3c6474481d0d9ad08e821f81a09bc11886a1c935.tar.gz
small cleanup courtesy j.ellis
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r--lib/sqlalchemy/util.py37
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index fccb2f3bd..a0e0e244c 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -53,13 +53,20 @@ def hash_key(obj):
return repr(obj)
class OrderedProperties(object):
- """an object that maintains the order in which attributes are set upon it.
- also provides an iterator and a very basic dictionary interface to those attributes.
+ """
+ An object that maintains the order in which attributes are set upon it.
+ also provides an iterator and a very basic getitem/setitem interface to those attributes.
+
+ (Not really a dict, since it iterates over values, not keys. Not really
+ a list, either, since each value must have a key associated; hence there is
+ no append or extend.)
"""
def __init__(self):
self.__dict__['_list'] = []
+ def __len__(self):
+ return len(self._list)
def keys(self):
- return self._list
+ return list(self._list)
def get(self, key, default):
return getattr(self, key, default)
def has_key(self, key):
@@ -81,8 +88,9 @@ class OrderedProperties(object):
self._list.append(key)
self.__dict__[key] = object
def clear(self):
- for key in self._list[:]:
- del self[key]
+ self.__dict__.clear()
+ self.__dict__['_list'] = []
+
class RecursionStack(object):
"""a thread-local stack used to detect recursive object traversals."""
def __init__(self):
@@ -109,17 +117,18 @@ class RecursionStack(object):
class OrderedDict(dict):
"""A Dictionary that keeps its own internal ordering"""
+
def __init__(self, values = None):
- self.list = []
+ self._list = []
if values is not None:
for val in values:
self.update(val)
def keys(self):
- return self.list
+ return list(self._list)
def clear(self):
- self.list = []
+ self._list = []
dict.clear(self)
def update(self, dict):
@@ -134,29 +143,29 @@ class OrderedDict(dict):
return self.__getitem__(key)
def values(self):
- return map(lambda key: self[key], self.list)
+ return map(lambda key: self[key], self._list)
def __iter__(self):
- return iter(self.list)
+ return iter(self._list)
def itervalues(self):
- return iter([self[key] for key in self.list])
+ return iter([self[key] for key in self._list])
- def iterkeys(self):return self.__iter__()
+ def iterkeys(self): return self.__iter__()
def iteritems(self):
return iter([(key, self[key]) for key in self.keys()])
def __delitem__(self, key):
try:
- del self.list[self.list.index(key)]
+ del self._list[self._list.index(key)]
except ValueError:
raise KeyError(key)
dict.__delitem__(self, key)
def __setitem__(self, key, object):
if not self.has_key(key):
- self.list.append(key)
+ self._list.append(key)
dict.__setitem__(self, key, object)
def __getitem__(self, key):