summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-10-11 17:44:16 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-10-11 17:44:16 -0400
commit410f2bbdf80aa8a10d5cea629750ce9e32e9e55f (patch)
tree0de921939fcde5eb754cc41e7352deb3659d3520 /lib/sqlalchemy/orm/util.py
parent78313a1ae33f6937b9f1ab90270fb8c0b0fb91ff (diff)
downloadsqlalchemy-410f2bbdf80aa8a10d5cea629750ce9e32e9e55f.tar.gz
- add support for integer indexes and slices to PathRegistry
- write a full test suite for PathRegistry
Diffstat (limited to 'lib/sqlalchemy/orm/util.py')
-rw-r--r--lib/sqlalchemy/orm/util.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py
index a273d1406..750c3b298 100644
--- a/lib/sqlalchemy/orm/util.py
+++ b/lib/sqlalchemy/orm/util.py
@@ -283,6 +283,9 @@ class PathRegistry(object):
else:
return value
+ def __len__(self):
+ return len(self.path)
+
@property
def length(self):
return len(self.path)
@@ -352,9 +355,12 @@ class KeyRegistry(PathRegistry):
self.reduced_path = parent.reduced_path + (key,)
def __getitem__(self, entity):
- return EntityRegistry(
- self, entity
- )
+ if isinstance(entity, (int, slice)):
+ return self.path[entity]
+ else:
+ return EntityRegistry(
+ self, entity
+ )
class EntityRegistry(PathRegistry, dict):
is_aliased_class = False
@@ -373,6 +379,12 @@ class EntityRegistry(PathRegistry, dict):
def __nonzero__(self):
return True
+ def __getitem__(self, entity):
+ if isinstance(entity, (int, slice)):
+ return self.path[entity]
+ else:
+ return dict.__getitem__(self, entity)
+
def __missing__(self, key):
self[key] = item = KeyRegistry(self, key)
return item