Index: trunk/packages/invirt-database/python/database/owner.py
===================================================================
--- trunk/packages/invirt-database/python/database/owner.py	(revision 2158)
+++ trunk/packages/invirt-database/python/database/owner.py	(revision 2187)
@@ -1,72 +1,40 @@
-MAX_MEMORY_TOTAL = 512
-MAX_MEMORY_SINGLE = 512
-MAX_DISK_TOTAL = 50
-MAX_DISK_SINGLE = 50
-MAX_VMS_TOTAL = 10
-MAX_VMS_ACTIVE = 4
+from record import NullableRecord
 
-class Owner(object):
-    def __repr__(self):
-        a = self.ram_quota_total
-        b = self.ram_quota_single
-        c = self.disk_quota_total
-        d = self.disk_quota_single
-        e = self.vms_quota_total
-        f = self.vms_quota_active
-        if not a:
-            a = MAX_MEMORY_TOTAL
-        if not b:
-            b = MAX_MEMORY_SINGLE
-        if not c:
-            c = MAX_DISK_TOTAL
-        if not d:
-            d = MAX_DISK_SINGLE
-        if not e:
-            e = MAX_VMS_TOTAL
-        if not f:
-            f = MAX_VMS_ACTIVE
-        return """<Owner %s: ram_quota_total=%s MiB ram_quota_single=%s MiB
-disk_quota_total=%s GiB disk_quota_single=%s GiB
-vms_quota_total=%s vms_quota_active=%s >""" % (self.owner_id, a,b,c,d,e,f)
+class Owner(NullableRecord):
+    _f = {
+        'ram_quota_total': (512, 'MiB'),
+        'ram_quota_single': (512, 'MiB'),
+        'disk_quota_total': (50, 'GiB'),
+        'disk_quota_single': (50, 'GiB'),
+        'vms_quota_total': (10, ''),
+        'vms_quota_active': (4, '')
+    }
+    _default = dict([(_k,_v[0]) for _k,_v in _f.items()])
+    def _unitFormatter(unit):
+        return lambda v:'%s%s'%(v,unit)
+    _format = dict([(_k,_unitFormatter(_v[1])) for _k,_v in _f.items()])
+    _identity_field = 'owner_id'
+
     def getMemoryQuotas(owner):
         owner_info = Owner.query().filter_by(owner_id=owner).first()
-        if owner_info != None:
-            quota_total = owner_info.ram_quota_total
-            if quota_total == None:
-                quota_total = MAX_MEMORY_TOTAL
-            quota_single = owner_info.ram_quota_single
-            if quota_single == None:
-                quota_single = MAX_MEMORY_SINGLE
-        else:
-            quota_total = MAX_MEMORY_TOTAL
-            quota_single = MAX_MEMORY_SINGLE
-        return (quota_total, quota_single)
+        if owner_info == None:
+            owner_info = Owner(owner_id=owner)
+        return (owner_info.get('ram_quota_total'), owner_info.get('ram_quota_single'))
     getMemoryQuotas = staticmethod(getMemoryQuotas)
+
     def getDiskQuotas(owner):
         owner_info = Owner.query().filter_by(owner_id=owner).first()
-        if owner_info != None:
-            quota_total = owner_info.disk_quota_total
-            if quota_total == None:
-                quota_total = MAX_DISK_TOTAL
-            quota_single = owner_info.disk_quota_single
-            if quota_single == None:
-                quota_single = MAX_DISK_SINGLE
-        else:
-            quota_total = MAX_DISK_TOTAL
-            quota_single = MAX_DISK_SINGLE
-        return (quota_total, quota_single)
+        if owner_info == None:
+            owner_info = Owner(owner_id=owner)
+        return (owner_info.get('disk_quota_total'), owner_info.get('disk_quota_single'))
     getDiskQuotas = staticmethod(getDiskQuotas)
+
     def getVMQuotas(owner):
         owner_info = Owner.query().filter_by(owner_id=owner).first()
-        if owner_info != None:
-            quota_total = owner_info.vms_quota_total
-            if quota_total == None:
-                quota_total = MAX_VMS_TOTAL
-            quota_active = owner_info.vms_quota_active
-            if quota_active == None:
-                quota_active = MAX_VMS_ACTIVE
-        else:
-            quota_total = MAX_VMS_TOTAL
-            quota_active = MAX_VMS_ACTIVE
-        return (quota_total, quota_active)
+        if owner_info == None:
+            owner_info = Owner(owner_id=owner)
+        return (owner_info.get('vms_quota_total'), owner_info.get('vms_quota_active'))
     getVMQuotas = staticmethod(getVMQuotas)
+
+    def _ignore(self):
+        return super(Owner, self)._ignore() + ['getMemoryQuotas', 'getDiskQuotas', 'getVMQuotas']
