Changeset 307

Show
Ignore:
Timestamp:
02/04/08 00:56:31 (10 months ago)
Author:
johnbywater
Message:

Fixed up more temporal associate list methods (counting in the past, containment in the past, key-based retrieval in the past, iterating over items in the past. Searching doesn't work still.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/db.py

    r306 r307  
    33This module provides persistence data mapping services to the domain model. 
    44 
    5 Responsible for moving values between domain objects and database objects. 
     5Responsible for moving values between domain model and persistence objects. 
    66 
    77This module works by using domain model meta data objects to construct data 
    8 mapper meta data objects, which then control SQLObject classes. A database 
     8mapper meta data objects which then control SQLObject classes. A database 
    99facade presents methods for defining data mappers, and for creating and 
    10 retrieving records from the relational database
     10retrieving records from the object relational mapper
    1111 
    1212This module avoids collisions of domain model names with database keywords, 
     
    2121database objects and a relational database management system. We want to add 
    2222support for other Object Relational Mappers (such as SQLAlchemy and Elixir). 
     23 
     24This module is a Model Persistence Mapper (MPM), and although there are  
     25similar aspects to both MPMs and ORMs, this module does not build or execute 
     26SQL statements and so cannot be classified as an ORM. Instead, this module 
     27depends on an ORM to move values from the persistence model to the DBRMS. 
    2328 
    2429""" 
  • trunk/src/dm/dom/base.py

    r305 r307  
    4242            self.cache = None 
    4343 
    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 item 
    51  
    5244    def get(self, key, default=None): 
    5345        try: 
     
    5648            return default 
    5749                 
     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 
    5858    def has_key(self, key): 
    5959        if self.isCached: 
  • trunk/src/dm/dom/meta.py

    r306 r307  
    648648    # Todo: Fix this before using temporal properties on HasMany attrs! 
    649649 
     650 
     651    # Methods interrupted. 
     652 
    650653    def __iter__(self): 
    651654        if self.timepoint.isReset():  
    652655            return super(TemporalRegisterMixin, self).__iter__() 
    653656        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() 
    661716 
    662717class AssociateList(DomainObjectAssociation): 
  • trunk/src/dm/dom/temporaltest.py

    r306 r307  
    9999        self.timepoint.reset() 
    100100        self.instance = self.collection.create() 
    101         self.instance.grants.create(permission1) 
     101        grant1 = self.instance.grants.create(permission1) 
    102102        self.instance.save() 
    103103        revision1 = mx.DateTime.now() 
     
    109109        sleep(1) 
    110110        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) 
    114114        self.instance.save() 
    115115        revision3 = mx.DateTime.now() 
    116116        sleep(1) 
    117         self.instance.grants.create(permission4) 
     117        grant4 = self.instance.grants.create(permission4) 
    118118        self.instance.save() 
    119119        revision4 = mx.DateTime.now() 
    120120 
    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() 
    126131        self.failIf(permission1 in grants, grants) 
    127132        self.failUnless(permission2 in grants, grants) 
    128133        self.failUnless(permission3 in grants, grants) 
    129134        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) 
    130142 
    131143        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() 
    133150        self.failIf(permission1 in grants, grants) 
    134151        self.failUnless(permission2 in grants, grants) 
    135152        self.failUnless(permission3 in grants, grants) 
    136153        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) 
    137161 
    138162        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() 
    140169        self.failUnless(permission1 in grants, grants) 
    141170        self.failIf(permission2 in grants, grants) 
    142171        self.failIf(permission3 in grants, grants) 
    143172        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) 
    144180 
    145181        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() 
    147188        self.failIf(permission1 in grants, grants) 
    148189        self.failUnless(permission2 in grants, grants) 
    149190        self.failUnless(permission3 in grants, grants) 
    150191        self.failUnless(permission4 in grants, grants) 
    151  
    152         self.timepoint.reset() 
    153         grants = self.getGrants() 
     192        grants = self.collection[''].grants 
    154193        self.failIf(permission1 in grants, grants) 
    155194        self.failUnless(permission2 in grants, grants) 
    156195        self.failUnless(permission3 in grants, grants) 
    157196        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) 
    158218 
    159219        # Wow! 
    160220 
    161  
    162     def getGrants(self): 
    163         return [i.permission for i in self.collection[''].grants] 
     221        # Todo: Test (and implement) startsWith, search methods? 
     222 
    164223 
    165224class TestTemporalProperty(TestCase):