--- /dev/null
+from PLC.Timestamp import Timestamp
+from types import StringTypes
+from datetime import datetime
+
+class Record(dict):
+
+ fields = {}
+ tags = {}
+ def __init__(self, dict=None, object=None):
+ self.object = object
+ if dict:
+ self.update(dict)
+ if self.object:
+ self.update_fields()
+
+ def get_field(self, field):
+ return self.__dict__.get(field, None)
+
+ def update_fields(self):
+ for field in self.fields:
+ if hasattr(self.object, field):
+ self[field] = getattr(self.object, field)
+
+ # xxx fixme
+ # turns out the date_created field is received by the client as a 'created' int
+ # (and 'last_updated' does not make it at all)
+ # let's be flexible
+ def date_repr (self,fields):
+ if not isinstance(fields,list): fields=[fields]
+ for field in fields:
+ value=getattr(self,field,None)
+ if isinstance (value,datetime):
+ return Timestamp.string(value)
+ elif isinstance (value,(int,float)):
+ return Timestamp.string(value)
+ # fallback
+ return "** undef_datetime **"
+
+ # it may be important to exclude relationships
+ def todict (self, exclude_type=None):
+ d=self.__dict__
+ def exclude (k,v):
+ if k.startswith('_'): return True
+ if exclude_type:
+ if isinstance (v,exclude_type): return True
+ if isinstance (v,list) and v and isinstance (v[0],exclude_type) : return True
+ return False
+ keys=[k for (k,v) in d.items() if not exclude(k,v)]
+ return dict ( [ (k,d[k]) for k in keys ] )
+
+ def validate(self):
+ # Validate values before committing
+ for key, value in self.iteritems():
+ if value is not None and hasattr(self, 'validate_' + key):
+ validate = getattr(self, 'validate_' + key)
+ self[key] = validate(value)
+
+ def validate_timestamp (self, timestamp):
+ return Timestamp.sql_validate(timestamp)
+
+ def sync(self, commit=True, validate=True):
+ # Validate all specified fields
+ if validate: self.validate()
+
+
+