[Checkins] SVN: z3c.zalchemy/trunk/src/z3c/zalchemy/container.
fixed container implementation
Christian Zagrodnick
cz at gocept.com
Thu Nov 30 11:52:13 EST 2006
Log message for revision 71339:
fixed container implementation
removed "exec" call.
changed format to Classname-key1-key2 etc
;
Changed:
U z3c.zalchemy/trunk/src/z3c/zalchemy/container.py
U z3c.zalchemy/trunk/src/z3c/zalchemy/container.txt
-=-
Modified: z3c.zalchemy/trunk/src/z3c/zalchemy/container.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/container.py 2006-11-30 15:49:47 UTC (rev 71338)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/container.py 2006-11-30 16:52:11 UTC (rev 71339)
@@ -68,7 +68,7 @@
raise TypeError("Invalid name type", type(name))
unproxied = removeSecurityProxy(container)
- if not name.startswith(unproxied._class.__name__+'.'):
+ if not name.startswith(unproxied._class.__name__+'-'):
raise UserError("Invalid name for SQLAlchemy object")
return True
@@ -117,10 +117,10 @@
raise KeyError, "%s is not a string" % name
obj = self._fromStringIdentifier(name)
if obj is None:
- raise KeyError, name
+ raise KeyError(name)
return contained(obj, self, name)
- def get(self, name, default = None):
+ def get(self, name, default=None):
try:
return self[name]
except KeyError:
@@ -153,14 +153,17 @@
session = z3c.zalchemy.getSession()
mapper = session.mapper(obj.__class__)
instance_key = mapper.instance_key(obj)
- ident = str(instance_key[1])
- return '%s.%s'%(instance_key[0].__name__, ident)
+ ident = '-'.join(map(str, instance_key[1]))
+ return '%s-%s'%(instance_key[0].__name__, ident)
def _fromStringIdentifier(self, name):
- dotpos = name.find('.')
- if dotpos<0:
+ class_base_name = self._class.__name__
+ prefix = class_base_name + '-'
+ if not name.startswith(prefix):
return None
- exec 'keys='+name[dotpos+1:]
+
+ ident = name[len(prefix):]
+ keys = ident.split('-')
session = z3c.zalchemy.getSession()
return session.query(self._class).get([str(key) for key in keys])
Modified: z3c.zalchemy/trunk/src/z3c/zalchemy/container.txt
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/container.txt 2006-11-30 15:49:47 UTC (rev 71338)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/container.txt 2006-11-30 16:52:11 UTC (rev 71339)
@@ -51,7 +51,7 @@
We can iterate over the keys :
>>> [key for key in c.keys()]
- ['SQLTestSingle.(1,)']
+ ['SQLTestSingle-1']
We can iterate over the items :
@@ -68,13 +68,13 @@
>>> len(c)
2
>>> [key for key in c.keys()]
- ['SQLTestSingle.(1,)', 'SQLTestSingle.(2,)']
+ ['SQLTestSingle-1', 'SQLTestSingle-2']
We can access specific object by key :
- >>> c['SQLTestSingle.(1,)'].id
+ >>> c['SQLTestSingle-1'].id
1
- >>> c['SQLTestSingle.(2,)'].id
+ >>> c['SQLTestSingle-2'].id
2
Using compound primary keys
@@ -91,8 +91,8 @@
>>> len(c)
1
>>> [key for key in c.keys()]
- ["SQLTestMulti.(1, 'a')"]
- >>> c["SQLTestMulti.(1, 'a')"].id2
+ ['SQLTestMulti-1-a']
+ >>> c["SQLTestMulti-1-a"].id2
'a'
NameChooser
@@ -101,14 +101,14 @@
>>> from z3c.zalchemy.container import SQLAlchemyNameChooser
>>> nc = SQLAlchemyNameChooser(c)
- >>> nc.checkName("SQLTestMulti.(1, 'b')", c)
+ >>> nc.checkName("SQLTestMulti-1-b", c)
True
- >>> nc.checkName("SQLTestSingle.(1, 'a')", c)
+ >>> nc.checkName("SQLTestSingle-1-a", c)
Traceback (most recent call last):
...
UserError: Invalid name for SQLAlchemy object
>>> t = SQLTestMulti(1, 'b')
>>> nc.chooseName('unused', t)
- "SQLTestMulti.(1, 'b')"
+ 'SQLTestMulti-1-b'
More information about the Checkins
mailing list