[Checkins] SVN: megrok.rdb/trunk/src/megrok/rdb/ Make sure that container keys are always strings, not integers.

Martijn Faassen faassen at infrae.com
Fri Aug 22 13:02:43 EDT 2008


Log message for revision 90133:
  Make sure that container keys are always strings, not integers.
  

Changed:
  U   megrok.rdb/trunk/src/megrok/rdb/README.txt
  U   megrok.rdb/trunk/src/megrok/rdb/components.py
  U   megrok.rdb/trunk/src/megrok/rdb/tests/location.py

-=-
Modified: megrok.rdb/trunk/src/megrok/rdb/README.txt
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/README.txt	2008-08-22 15:18:08 UTC (rev 90132)
+++ megrok.rdb/trunk/src/megrok/rdb/README.txt	2008-08-22 17:02:39 UTC (rev 90133)
@@ -200,6 +200,15 @@
 As you can see, the automatically generated primary key is also used
 as the container key now.
 
+The keys to the container are always integer, even if we're dealing with
+a primary key::
+
+  >>> philosophy.courses['1'].name
+  'Logic'
+
+  >>> philosophy.courses.get('1').name
+  'Logic'
+
 Custom key with ``rdb.key``
 ---------------------------
 
@@ -286,41 +295,41 @@
 Let's try some common read-only container operations, such as
 ``__getitem__``1::
 
-  >>> qc[1].name
+  >>> qc['1'].name
   u'Philosophy'
-  >>> qc[2].name
+  >>> qc['2'].name
   'Physics'
 
 XXX Why the unicode difference between u'Philosophy' and 'Physics'?
 
 ``__getitem__`` with a ``KeyError``::
 
-  >>> qc[3]
+  >>> qc['3']
   Traceback (most recent call last):
     ...
-  KeyError: 3
+  KeyError: '3'
 
 ``get``::
 
-  >>> qc.get(1).name
+  >>> qc.get('1').name
   u'Philosophy'
-  >>> qc.get(3) is None
+  >>> qc.get('3') is None
   True
-  >>> qc.get(3, 'foo')
+  >>> qc.get('3', 'foo')
   'foo'
 
 ``__contains__``::
 
-  >>> 1 in qc
+  >>> '1' in qc
   True
-  >>> 3 in qc
+  >>> '3' in qc
   False
 
 ``has_key``::
 
-  >>> qc.has_key(1)
+  >>> qc.has_key('1')
   True
-  >>> qc.has_key(3)
+  >>> qc.has_key('3')
   False
 
 ``len``::

Modified: megrok.rdb/trunk/src/megrok/rdb/components.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/components.py	2008-08-22 15:18:08 UTC (rev 90132)
+++ megrok.rdb/trunk/src/megrok/rdb/components.py	2008-08-22 17:02:39 UTC (rev 90133)
@@ -70,15 +70,17 @@
             self.__name__ = None
             
     def __setitem__(self, key, item):
-        self._receive(item)
+        key = unicode(key)
+        self._receive(item, key)
         MappedCollection.__setitem__(self, key, item)
 
     def __delitem__(self, key):
+        key = unicode(key)
         self._release(self[key])
         MappedCollection.__delitem__(self, key)
-
-    def _receive(self, item):
-        item.__name__ = unicode(self.keyfunc(item))
+        
+    def _receive(self, item, key):
+        item.__name__ = key
         item.__parent__ = self
 
     def _release(self, item):

Modified: megrok.rdb/trunk/src/megrok/rdb/tests/location.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/tests/location.py	2008-08-22 15:18:08 UTC (rev 90132)
+++ megrok.rdb/trunk/src/megrok/rdb/tests/location.py	2008-08-22 17:02:39 UTC (rev 90133)
@@ -62,9 +62,9 @@
 
 They now should have the proper parents::
 
-  >>> philosophy.courses[1].__name__
+  >>> philosophy.courses['1'].__name__
   u'1'
-  >>> philosophy.courses[1].__parent__ is philosophy.courses
+  >>> philosophy.courses['1'].__parent__ is philosophy.courses
   True
   
 """



More information about the Checkins mailing list