Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/olpc/datastore/model.py
diff options
context:
space:
mode:
authorBenjamin Saller <bcsaller@objectrealms.net>2007-05-10 19:29:43 (GMT)
committer Benjamin Saller <bcsaller@objectrealms.net>2007-05-10 19:29:43 (GMT)
commit0b6699c0c4be54a96a747388ea13259471d5cb07 (patch)
treeeb2f7bbbb0ec8779b6354397e6d0c9273cfdbd0f /src/olpc/datastore/model.py
parentbdf0e842d2d8f9e6181ce2b8413637eb0629b252 (diff)
Marshall properties over dbus. Verify that the proper Property subclasses are returned via the mapping layer.
Diffstat (limited to 'src/olpc/datastore/model.py')
-rw-r--r--src/olpc/datastore/model.py31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/olpc/datastore/model.py b/src/olpc/datastore/model.py
index 779079d..7e2ad36 100644
--- a/src/olpc/datastore/model.py
+++ b/src/olpc/datastore/model.py
@@ -19,6 +19,7 @@ from sqlalchemy import MapperExtension, EXT_PASS
from sqlalchemy.ext.sessioncontext import SessionContext
import datetime
+import time
# XXX: Open issues
# list properties - Contributors (a, b, c)
@@ -124,27 +125,39 @@ class Property(object):
def __repr__(self):
return "<Property %s:%r of %s>" % (self.key, self.value,
self.content)
-
-class DateProperty(Property):
- format = "YYYY-MM-DDTHH:MM:SS"
+ def marshall(self):
+ """Return the value marshalled as a string"""
+ return str(self.value)
- def __init__(self, key, value, type="date"):
- super(Property, self).__init__(key, value, type)
+class DateProperty(Property):
+ format = "%Y-%m-%dT%H:%M:%S"
+ def __init__(self, key, value, type="date"):
+ self._value = None
+ Property.__init__(self, key, value, type)
def get_value(self):
# parse the value back into a datetime
- return datetime.datetime.strptime(self._value, self.format)
+ # XXX: strptime on datetime is a 2.5 thing :(
+ # XXX: we lose timezone in this conversion currently
+ if not self._value: return None
+ ti = time.strptime(self._value, self.format)
+ dt = datetime.datetime(*(ti[:-2]))
+ dt = dt.replace(microsecond=0)
+ return dt
def set_value(self, value):
+ value = value.replace(microsecond=0)
self._value = value.isoformat()
value = property(get_value, set_value)
-
+ def marshall(self): return self.value.isoformat()
+
+
class NumberProperty(Property):
def __init__(self, key, value, type="number"):
- super(Property, self).__init__(key, value, type)
+ Property.__init__(self, key, value, type)
def get_value(self): return float(self._value)
def set_value(self, value): self._value = value
@@ -287,7 +300,7 @@ class Model(object):
properties['_value'] = self.properties.c.value
mapper(PropertyClass,
- inherits=self['properties'],
+ inherits=self.mappers['properties'],
polymorphic_identity=typename,
properties=properties
)