[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