[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