X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-database.git/blobdiff_plain/e2d288987a8ed40aea40f8c8ac01efeb3749719f..a754e7beadaaa4d401bfeaac5b8b67df29fb7893:/python/database/record.py diff --git a/python/database/record.py b/python/database/record.py index b1b46bb..bcf3d45 100755 --- a/python/database/record.py +++ b/python/database/record.py @@ -1,31 +1,42 @@ class Record(object): _identity_field = None + _default = {} + _format = {} + def get(self, field): - try: - return self.__getattribute__(field) - except: - return None + v = getattr(self, field, None) + if v is None: + return self._default.get(field) + return v + def _formatField(self, field): v = self.get(field) + func = self._format.get(field) + if func: + return func(v) if callable(v): v = v() - if hasattr(v, '__iter__'): - if len(v) == 0: - return '[]' - else: - return '[%d x %s]'%(len(v), type(v[0])) - else: + if not hasattr(v, '__iter__'): return repr(v) + if len(v) == 0: + return '[]' + return '[%d x %s]'%(len(v), type(v[0]).__name__) + + @classmethod + def _ignore(cls): + return [cls._identity_field] + def _fields(self): ignore = self._ignore() - keys = sorted(self.__class__.__dict__.keys()) - return [(k,self._formatField(k)) for k in keys if k[0]!="_" and k not in ignore] + keys = sorted(self.c.keys()) + return [(k,self._formatField(k)) for k in keys if k not in ignore] + def __repr__(self): classname = self.__class__.__name__ if self._identity_field: identity = self.__dict__.get(self._identity_field) - identity = ' ' + (identity and repr(identity) or 'hash=%d'%hash(self)) + identity = ' ' + (identity and repr(identity) or 'hash=%X'%hash(self)) else: identity = '' @@ -34,23 +45,3 @@ class Record(object): payload = ": "+payload return "<%s%s%s>" % (classname, identity, payload) - def _ignore(self): - return [self._identity_field, 'c', 'query', 'get'] - -class FormattableRecord(Record): - _format = {} - def _formatField(self, field): - func = self._format.get(field) - if func: - return func(self.get(field)) - else: - return super(FormattableRecord, self)._formatField(field) - -class NullableRecord(FormattableRecord): - _default = {} - def get(self, field): - v = self.__dict__.get(field) - if v != None: - return v - else: - return self._default.get(field)