Changeset 307
- Timestamp:
- 02/04/08 00:56:31 (10 months ago)
- Files:
-
- trunk/src/dm/db.py (modified) (2 diffs)
- trunk/src/dm/dom/base.py (modified) (2 diffs)
- trunk/src/dm/dom/meta.py (modified) (1 diff)
- trunk/src/dm/dom/temporaltest.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/dm/db.py
r306 r307 3 3 This module provides persistence data mapping services to the domain model. 4 4 5 Responsible for moving values between domain objects and database objects.5 Responsible for moving values between domain model and persistence objects. 6 6 7 7 This module works by using domain model meta data objects to construct data 8 mapper meta data objects ,which then control SQLObject classes. A database8 mapper meta data objects which then control SQLObject classes. A database 9 9 facade presents methods for defining data mappers, and for creating and 10 retrieving records from the relational database.10 retrieving records from the object relational mapper. 11 11 12 12 This module avoids collisions of domain model names with database keywords, … … 21 21 database objects and a relational database management system. We want to add 22 22 support for other Object Relational Mappers (such as SQLAlchemy and Elixir). 23 24 This module is a Model Persistence Mapper (MPM), and although there are 25 similar aspects to both MPMs and ORMs, this module does not build or execute 26 SQL statements and so cannot be classified as an ORM. Instead, this module 27 depends on an ORM to move values from the persistence model to the DBRMS. 23 28 24 29 """ trunk/src/dm/dom/base.py
r305 r307 42 42 self.cache = None 43 43 44 def __contains__(self, key):45 "NB: Use item's key to test containment of item in register."46 return self.has_key(key)47 48 def __getitem__(self, key):49 item = self.find(key)50 return item51 52 44 def get(self, key, default=None): 53 45 try: … … 56 48 return default 57 49 50 def __getitem__(self, key): 51 item = self.find(key) 52 return item 53 54 # NB: Use item's key to test containment of item in register. 55 def __contains__(self, key): 56 return self.has_key(key) 57 58 58 def has_key(self, key): 59 59 if self.isCached: trunk/src/dm/dom/meta.py
r306 r307 648 648 # Todo: Fix this before using temporal properties on HasMany attrs! 649 649 650 651 # Methods interrupted. 652 650 653 def __iter__(self): 651 654 if self.timepoint.isReset(): 652 655 return super(TemporalRegisterMixin, self).__iter__() 653 656 else: 654 if not self.owner: 655 raise Exception, "Temporal registers need an owner!" 656 currentVersion = self.owner.temporalHistory.getCurrent() 657 listAttr = getattr(currentVersion, self.metaAttr.name) 658 recordedItems = [i.recordedValue for i in listAttr] 659 return iter(recordedItems) 660 657 return iter(self.getCurrentValues()) 658 659 def keys(self, **kwds): 660 if self.timepoint.isReset(): 661 return super(TemporalRegisterMixin, self).keys(**kwds) 662 else: 663 return self.getCurrentKeys() 664 665 def has_key(self, key): 666 if self.timepoint.isReset(): 667 return super(TemporalRegisterMixin, self).has_key(key) 668 else: 669 return key in self.getCurrentKeys() 670 671 def find(self, key): 672 if self.timepoint.isReset(): 673 return super(TemporalRegisterMixin, self).find(key) 674 else: 675 return self.getCurrentDict()[key] 676 677 def count(self): 678 if self.timepoint.isReset(): 679 return super(TemporalRegisterMixin, self).count() 680 else: 681 return len(self.getCurrentAssociations()) 682 683 684 # Methods introduced. 685 686 687 def isRealTime(self): 688 if self.timepoint.isReset(): 689 return True 690 elif not self.owner: 691 raise Exception, "Temporal registers need an owner for versions!" 692 else: 693 return False 694 695 def getCurrentDict(self): 696 associations = self.getCurrentAssociations() 697 currentDict = {} 698 for a in associations: 699 currentDict[a.recordedKey] = a.recordedValue 700 return currentDict 701 702 def getCurrentKeys(self): 703 associations = self.getCurrentAssociations() 704 return [a.recordedKey for a in associations] 705 706 def getCurrentValues(self): 707 associations = self.getCurrentAssociations() 708 return [a.recordedValue for a in associations] 709 710 def getCurrentAssociations(self): 711 currentVersion = self.getCurrentVersion() 712 return getattr(currentVersion, self.metaAttr.name) 713 714 def getCurrentVersion(self): 715 return self.owner.temporalHistory.getCurrent() 661 716 662 717 class AssociateList(DomainObjectAssociation): trunk/src/dm/dom/temporaltest.py
r306 r307 99 99 self.timepoint.reset() 100 100 self.instance = self.collection.create() 101 self.instance.grants.create(permission1)101 grant1 = self.instance.grants.create(permission1) 102 102 self.instance.save() 103 103 revision1 = mx.DateTime.now() … … 109 109 sleep(1) 110 110 del(self.instance.grants[permission1]) 111 self.instance.grants.create(permission2)112 self.instance.save() 113 self.instance.grants.create(permission3)111 grant2 = self.instance.grants.create(permission2) 112 self.instance.save() 113 grant3 = self.instance.grants.create(permission3) 114 114 self.instance.save() 115 115 revision3 = mx.DateTime.now() 116 116 sleep(1) 117 self.instance.grants.create(permission4)117 grant4 = self.instance.grants.create(permission4) 118 118 self.instance.save() 119 119 revision4 = mx.DateTime.now() 120 120 121 print "Sleeping" 122 sleep(5) 123 124 self.timepoint.reset() 125 grants = self.getGrants() 121 #print "Sleeping" 122 #sleep(1) 123 124 self.timepoint.reset() 125 grants = [i for i in self.collection[''].grants] 126 self.failIf(grant1 in grants, grants) 127 self.failUnless(grant2 in grants, grants) 128 self.failUnless(grant3 in grants, grants) 129 self.failUnless(grant4 in grants, grants) 130 grants = self.collection[''].grants.keys() 126 131 self.failIf(permission1 in grants, grants) 127 132 self.failUnless(permission2 in grants, grants) 128 133 self.failUnless(permission3 in grants, grants) 129 134 self.failUnless(permission4 in grants, grants) 135 grants = self.collection[''].grants 136 self.failIf(permission1 in grants, grants) 137 self.failUnless(permission2 in grants, grants) 138 self.failUnless(permission3 in grants, grants) 139 self.failUnless(permission4 in grants, grants) 140 self.failUnlessEqual(len(grants), 3) 141 self.failUnlessEqual(grants[permission4], grant4) 130 142 131 143 self.timepoint.recorded = revision3 132 grants = self.getGrants() 144 grants = [i for i in self.collection[''].grants] 145 self.failIf(grant1 in grants, grants) 146 self.failUnless(grant2 in grants, grants) 147 self.failUnless(grant3 in grants, grants) 148 self.failIf(grant4 in grants, (permission4, grants)) 149 grants = self.collection[''].grants.keys() 133 150 self.failIf(permission1 in grants, grants) 134 151 self.failUnless(permission2 in grants, grants) 135 152 self.failUnless(permission3 in grants, grants) 136 153 self.failIf(permission4 in grants, (permission4, grants)) 154 grants = self.collection[''].grants 155 self.failIf(permission1 in grants, grants) 156 self.failUnless(permission2 in grants, grants) 157 self.failUnless(permission3 in grants, grants) 158 self.failIf(permission4 in grants, grants) 159 self.failUnlessEqual(len(grants), 2) 160 self.failUnlessEqual(grants[permission3], grant3) 137 161 138 162 self.timepoint.recorded = revision1 139 grants = self.getGrants() 163 grants = [i for i in self.collection[''].grants] 164 self.failUnless(grant1 in grants, grants) 165 self.failIf(grant2 in grants, grants) 166 self.failIf(grant3 in grants, grants) 167 self.failIf(grant4 in grants, grants) 168 grants = self.collection[''].grants.keys() 140 169 self.failUnless(permission1 in grants, grants) 141 170 self.failIf(permission2 in grants, grants) 142 171 self.failIf(permission3 in grants, grants) 143 172 self.failIf(permission4 in grants, grants) 173 grants = self.collection[''].grants 174 self.failUnless(permission1 in grants, grants) 175 self.failIf(permission2 in grants, grants) 176 self.failIf(permission3 in grants, grants) 177 self.failIf(permission4 in grants, grants) 178 self.failUnlessEqual(len(grants), 1) 179 self.failUnlessEqual(grants[permission1], grant1) 144 180 145 181 self.timepoint.recorded = revision4 146 grants = self.getGrants() 182 grants = [i for i in self.collection[''].grants] 183 self.failIf(grant1 in grants, grants) 184 self.failUnless(grant2 in grants, grants) 185 self.failUnless(grant3 in grants, grants) 186 self.failUnless(grant4 in grants, grants) 187 grants = self.collection[''].grants.keys() 147 188 self.failIf(permission1 in grants, grants) 148 189 self.failUnless(permission2 in grants, grants) 149 190 self.failUnless(permission3 in grants, grants) 150 191 self.failUnless(permission4 in grants, grants) 151 152 self.timepoint.reset() 153 grants = self.getGrants() 192 grants = self.collection[''].grants 154 193 self.failIf(permission1 in grants, grants) 155 194 self.failUnless(permission2 in grants, grants) 156 195 self.failUnless(permission3 in grants, grants) 157 196 self.failUnless(permission4 in grants, grants) 197 self.failUnlessEqual(len(grants), 3) 198 self.failUnlessEqual(grants[permission2], grant2) 199 200 self.timepoint.reset() 201 grants = [i for i in self.collection[''].grants] 202 self.failIf(grant1 in grants, grants) 203 self.failUnless(grant2 in grants, grants) 204 self.failUnless(grant3 in grants, grants) 205 self.failUnless(grant4 in grants, grants) 206 grants = self.collection[''].grants.keys() 207 self.failIf(permission1 in grants, grants) 208 self.failUnless(permission2 in grants, grants) 209 self.failUnless(permission3 in grants, grants) 210 self.failUnless(permission4 in grants, grants) 211 grants = self.collection[''].grants 212 self.failIf(permission1 in grants, grants) 213 self.failUnless(permission2 in grants, grants) 214 self.failUnless(permission3 in grants, grants) 215 self.failUnless(permission4 in grants, grants) 216 self.failUnlessEqual(len(grants), 3) 217 self.failUnlessEqual(grants[permission2], grant2) 158 218 159 219 # Wow! 160 220 161 162 def getGrants(self): 163 return [i.permission for i in self.collection[''].grants] 221 # Todo: Test (and implement) startsWith, search methods? 222 164 223 165 224 class TestTemporalProperty(TestCase):
