From: Tony Mack Date: Fri, 28 Sep 2012 00:40:51 +0000 (-0400) Subject: checking in new files X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=8fae169b094991b8ed2bb01834ffb7065468920c;p=plcapi.git checking in new files --- diff --git a/PLC/Storage/Record.py b/PLC/Storage/Record.py new file mode 100644 index 00000000..eca606e8 --- /dev/null +++ b/PLC/Storage/Record.py @@ -0,0 +1,66 @@ +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() + + +