Changeset 304

Show
Ignore:
Timestamp:
02/01/08 02:53:42 (1 year ago)
Author:
johnbywater
Message:

Making use of sqlobject's indexes and defaultOrder features.

Files:

Legend:

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

    r303 r304  
    453453            if not domAttr.isList(): 
    454454                self.addAttribute(domAttr) 
     455        self.sortOnDbName = None 
     456        if self.dom.sortOn: 
     457            self.sortOnDbName = self.dom.sortOn.dbName 
     458        self.sortAscending = self.dom.sortAscending 
    455459 
    456460    def getAttribute(self, attrName): 
     
    482486            if self.isCached: 
    483487                mapper.sqlmeta.cacheValues = True 
     488            if self.sortOnDbName: 
     489                defaultOrder = getattr(mapper.q, self.sortOnDbName) 
     490                if not self.sortAscending: 
     491                    defaultOrder = DESC(defaultOrder) 
     492                mapper.sqlmeta.defaultOrder = defaultOrder 
     493                     
    484494            # Todo: Figure indexes in sqlmeta. 
    485495            #indexes = self.getSQLObjectIndexes() 
  • trunk/src/dm/dom/base.py

    r303 r304  
    869869 
    870870    registerKeyName = 'name' 
    871     name = String(
    872  
     871    name = String(isIndexed=True
     872 
  • trunk/src/dm/dom/meta.py

    r303 r304  
    9898        self.attributesDeferred = {} 
    9999        self.isTemporal = False 
     100        self.sortOn = None 
     101 
     102    def setSortOnAttr(self, sortOnName): 
     103        if sortOnName and sortOnName != 'id': 
     104            sortOn = self.attributeNames[sortOnName] 
     105            super(MetaDomainObject, self).__setattr__('sortOn', sortOn) 
    100106 
    101107    def __setattr__(self, attrName, attrVal): 
  • trunk/src/dm/dom/registry.py

    r303 r304  
    4646        domainClass.meta.isCached = domainClass.isConstant 
    4747        domainClass.meta.isTemporal = domainClass.isTemporal 
     48        domainClass.meta.setSortOnAttr(domainClass.sortOnName) 
     49        domainClass.meta.sortAscending = domainClass.sortAscending 
    4850        classRegister[domainClassName] = domainClass 
    4951        domainClass.isRegistered = True 
  • trunk/src/dm/dom/stateful.py

    r172 r304  
    133133    dateCreated = DateTime( 
    134134        default=dm.times.getUniversalNow, 
     135        isIndexed=True, 
    135136        isEditable=False 
    136137    ) 
  • trunk/src/dm/dom/temporal.py

    r303 r304  
    8989    isUnique = False 
    9090    isConstant = True 
     91    sortOnName = 'dateCreated' 
    9192    sortAscending = False 
    92     sortOnName = 'id' 
    9393 
    9494    dateCreated = DateTime(isIndexed=True, isRequired=True) 
    95     # Overidden by HasA(parentClassName) meta attrrbute. 
    96     parent = Integer(default=1)            
     95    parent = Integer(default=1)  # This gets overidden. 
    9796 
    9897    def makeTemporalName(self, className, attrName=None): 
     
    104103    makeTemporalName = classmethod(makeTemporalName) 
    105104 
    106  
    107 class BaseTemporalProperty(BaseTemporal): 
    108  
    109     # Overidden by actually recorded meta attribute. 
    110     recordedValue = String(default='') 
    111      
    112  
    113 class TemporalProperty(BaseTemporalProperty): 
    114  
    115     registerClass = TemporalCollection 
    116  
    117  
    118 class BitemporalActual(BaseTemporalProperty): 
    119  
    120     registerClass = BitemporalActualCollection 
    121     sortOnName = 'dateCreated' 
    122  
    123105    def getSortOnValue(self): 
    124106        return (self.dateCreated, self.id) 
    125107 
    126108 
    127 class BitemporalProperty(BaseTemporalProperty): 
     109class TemporalProperty(BaseTemporal): 
     110 
     111    registerClass = TemporalCollection 
     112    recordedValue = String(default='')  # This gets overidden. 
     113 
     114 
     115class BitemporalActual(TemporalProperty): 
     116 
     117    registerClass = BitemporalActualCollection 
     118 
     119 
     120class BitemporalProperty(BaseTemporal): 
    128121 
    129122    registerClass = BitemporalCollection 
  • trunk/src/dm/dom/temporaltest.py

    r303 r304  
    105105        self.failUnlessEqual(TemporalProperty.isConstant, True) 
    106106        self.failUnlessEqual(TemporalProperty.registerKeyName, 'id') 
    107         self.failUnlessEqual(TemporalProperty.sortOnName, 'id') 
     107        self.failUnlessEqual(TemporalProperty.sortOnName, 'dateCreated') 
    108108        self.failUnlessEqual(TemporalProperty.sortAscending, False) 
    109109 
     
    111111        self.property = self.collection.create(recordedValue='') 
    112112        self.failUnless(self.property.dateCreated) 
    113         self.failUnlessEqual(self.property.getSortOnValue(), self.property.id) 
     113        #self.failUnlessEqual(self.property.getSortOnValue(), self.property.id) 
     114        self.failUnlessEqual(self.property.getSortOnValue(), (self.property.dateCreated, self.property.id)) 
    114115 
    115116    def test_getReferenceTime(self): 
     
    201202        self.failUnlessEqual(TemporalProperty.isConstant, True) 
    202203        self.failUnlessEqual(TemporalProperty.registerKeyName, 'id') 
    203         self.failUnlessEqual(TemporalProperty.sortOnName, 'id') 
     204        self.failUnlessEqual(TemporalProperty.sortOnName, 'dateCreated') 
    204205        self.failUnlessEqual(TemporalProperty.sortAscending, False) 
    205206