Changeset 299
- Timestamp:
- 01/31/08 16:45:34 (10 months ago)
- Files:
-
- trunk/src/dm/db.py (modified) (4 diffs)
- trunk/src/dm/dom/base.py (modified) (1 diff)
- trunk/src/dm/dom/meta.py (modified) (3 diffs)
- trunk/src/dm/dom/registry.py (modified) (3 diffs)
- trunk/src/dm/dom/temporaltest.py (modified) (6 diffs)
- trunk/src/dm/testunit.py (modified) (1 diff)
- trunk/src/dm/timepoint.py (modified) (1 diff)
- trunk/src/dm/timepointtest.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/dm/db.py
r297 r299 495 495 for a in self.attributes: 496 496 if a.dom.isTemporal: 497 # We don't persist temporal attributes on the parent. 497 498 continue 498 499 mapperClassAttribute = a.createMapperClassAttribute() … … 756 757 mapperValue = self.parent.domainObject 757 758 self.domainObject.parent = mapperValue 758 message = "Continuing with loaded parent: %s" % (759 self.domainObject.parent760 )761 logger.debug(message)759 #message = "Continuing with loaded parent: %s" % ( 760 # self.domainObject.parent 761 #) 762 #logger.debug(message) 762 763 continue 763 if metaAttr.dom.isTemporal or metaAttr.dom.isBitemporalActual: 764 if metaAttr.dom.isTemporal: 765 # We don't persist temporal attributes on the parent. 764 766 r = metaAttr.dom.createTemporalCollection(self.domainObject) 765 if metaAttr.dom.isBitemporalActual: 766 r.sortOnName = 'dateCreated' 767 referenceTime = timepoint.actual 768 mostRecents = r.findDomainObjects( 769 __loadedList__=loadedList, 770 __dateCreatedOnOrBefore__=referenceTime 771 ) 772 mostRecent = r.findFirstDomainObject( 773 __loadedList__=loadedList, 774 __dateCreatedOnOrBefore__=referenceTime 775 ) 776 #print "LOAD: Bitemporal actual %s at %s" % ([i for i in mostRecents], referenceTime) 777 if mostRecent: 778 print "!!!!!! Bitemporal actuals for recorded time: %s" % timepoint.recorded 779 print "" 780 print [i for i in mostRecents] 781 print "" 782 print "!!!!!! Bitemporal latest for actual time: %s" % timepoint.actual 783 print "" 784 print mostRecent 785 print "" 786 print "!!!!!!" 787 788 elif metaAttr.dom.isBitemporal: 789 referenceTime = timepoint.recorded 790 #print "LOAD: Bitemporal recorded at %s " % referenceTime 791 else: 792 referenceTime = timepoint.recorded 793 #print "LOAD: Temporal recorded at %s" % referenceTime 794 mostRecent = r.findFirstDomainObject( 795 __loadedList__=loadedList, 796 __dateCreatedOnOrBefore__=referenceTime 797 ) 767 mostRecent = r.findFirstDomainObject(loadedList) 798 768 if mostRecent: 799 769 mappedValue = mostRecent.recordedValue 800 770 else: 801 #print "LOAD: No record, creating initial value..."802 771 mappedValue = metaAttr.dom.createInitialValue( 803 772 self.domainObject 804 773 ) 805 #print "LOAD: Temporal '%s' value: %s" % (metaAttr.dom.name, mappedValue)806 774 elif metaAttr.isDomainObjectRef: 807 775 mapper = getattr(self, dbName) … … 838 806 isChanged = False 839 807 for metaAttr in self.meta.attributes: 840 if metaAttr.dom.isTemporal or metaAttr.dom.isBitemporalActual: 841 domValue = getattr(self.domainObject, metaAttr.domName) 808 domValue = getattr(self.domainObject, metaAttr.domName) 809 # Check value with most recent record. 810 if metaAttr.dom.isTemporal: 811 # We don't persist temporal attributes on the parent. 842 812 r = metaAttr.dom.createTemporalCollection(self.domainObject) 843 loadedList = {} 844 loadedList[self.domainObject] = self.domainObject 845 mostRecent = r.findFirstDomainObject(__loadedList__=loadedList) 846 print "SAVE: Attribute '%s' value: %s" % (metaAttr.dom.name, domValue) 847 if (r.ownerName != 'parent') or (r.owner != self.domainObject): 848 msg = "r: %s %s %s" % (r, r.ownerName, r.owner) 849 raise Exception, msg 850 if mostRecent != None: 851 print "SAVE: Recorded value: %s" % mostRecent.recordedValue 852 if metaAttr.dom.isBitemporal or (domValue != mostRecent.recordedValue): 853 if metaAttr.dom.isBitemporal: 854 print "SAVE: Creating new bitemporal history." 855 newRecorded = r.create(__loadedList__=loadedList) 856 #newRecorded.parent = self.domainObject 857 #newRecorded.save() 858 print "SAVE: %s" % newRecorded 859 actualsMeta = mostRecent.meta.attributeNames['recordedValue'] 860 newActuals = actualsMeta.createTemporalCollection(newRecorded) 861 print "SAVE: Copying old bitemporal actual records...." 862 oldActuals = actualsMeta.createTemporalCollection(mostRecent) 863 #msg = "newActuals: %s %s %s" % (newActuals, newActuals.ownerName, newActuals.owner) 864 #raise Exception, msg 865 866 for oldActual in oldActuals: 867 print "SAVE: Copying old bitemporal actual: %s" % oldActual.recordedValue 868 newActual = newActuals.create( 869 recordedValue=oldActual.recordedValue, 870 dateCreated=oldActual.dateCreated, 871 __loadedList__=loadedList 872 ) 873 print "SAVE: %s" % newActual 874 print "SAVE: Setting new bitemporal actual.." 875 newRecorded.recordedValue = domValue 876 newRecorded.save() 877 elif metaAttr.dom.isBitemporalActual: 878 print "SAVE: Creating new bitemporal actual: %s" % domValue 879 newActual = r.create( 880 recordedValue=domValue, 881 dateCreated=timepoint.actual, 882 __loadedList__=loadedList 883 ) 884 print "SAVE: %s" % newActual 885 else: 886 print "SAVE: Creating new temporal: %s" % domValue 887 r.create( 888 recordedValue=domValue, 889 __loadedList__=loadedList 890 ) 891 else: 892 print "SAVE: Fresh version record. No change needed." 893 else: 894 print "SAVE: No version record. Creating first." 895 #r.ownerName = 'parent' 896 #r.owner = self.domainObject 897 if metaAttr.dom.isBitemporal: 898 first = r.create( 899 __loadedList__=loadedList 900 ) 901 first.recordedValue = domValue 902 #first.parent = self.domainObject 903 #first.save() 904 print "SAVE: Created first bitemporal recorded record: %s" % first 905 906 elif metaAttr.dom.isBitemporalActual: 907 first = r.create( 908 recordedValue=domValue, 909 dateCreated=timepoint.actual, 910 __loadedList__=loadedList 911 ) 912 print "SAVE: Created first bitemporal actual record: %s" % first 913 else: 914 first = r.create( 915 recordedValue=domValue, 916 __loadedList__=loadedList 917 ) 918 print "SAVE: Created first temporal record: %s" % first 919 813 loadedList = {self.domainObject: self.domainObject} 814 mostRecent = r.findFirstDomainObject(loadedList=loadedList) 815 if (mostRecent==None) or (domValue!=mostRecent.recordedValue): 816 r.create(recordedValue=domValue, loadedList=loadedList) 920 817 elif metaAttr.isDomainObjectRef: 921 domainObject = getattr(self.domainObject, metaAttr.domName)818 domainObject = domValue 922 819 if domainObject and hasattr(domainObject, 'record'): 923 820 domRecord = domainObject.record … … 929 826 isChanged = True 930 827 else: 931 domValue = getattr(self.domainObject, metaAttr.domName)932 828 dbValue = getattr(self, metaAttr.dbName) 933 829 if domValue != dbValue: trunk/src/dm/dom/base.py
r296 r299 556 556 return reprAttrs 557 557 558 559 558 def getSortOnValue(self): 560 559 if self.sortOnName: trunk/src/dm/dom/meta.py
r297 r299 96 96 classAttrs = { 97 97 'meta': self, 98 'isUnique': self.isUnique,99 'isCached': self.isCached,100 98 } 101 99 return self.createClass(className, baseClass, classAttrs) … … 176 174 def setTemporalDomainClass(self, domainClass): 177 175 self.temporalDomainClass = domainClass 178 self.temporalDomainClass.registerKeyName = 'id'179 self.temporalDomainClass.isUnique = False180 self.temporalDomainClass.isCached = True181 if self.isBitemporalActual:182 self.temporalDomainClass.sortOnName = 'dateCreated'183 else:184 self.temporalDomainClass.sortOnName = 'id'185 self.temporalDomainClass.sortAscending = False186 176 187 177 def createTemporalCollection(self, domainObject): 188 178 if not domainObject: 189 179 raise Exception, "Need a domain object! %s" % domainObject 190 register = self.temporalDomainClass.createRegister() 191 register.owner = domainObject 192 register.ownerName = 'parent' 180 register = self.temporalDomainClass.createRegister( 181 ownerName='parent', 182 owner=domainObject, 183 metaAttr=self 184 ) 193 185 return register 194 186 … … 259 251 def duplicateTemporal(self): 260 252 attrMeta = self.duplicateSelf() 261 # Not bitemporal ATM. Just an idea for 'stepping down' the temporal:262 253 if self.isBitemporal: 263 attrMeta.isTemporal = True264 254 attrMeta.isBitemporal = False 265 255 attrMeta.isBitemporalActual = True 256 attrMeta.isTemporal = True 266 257 else: 267 258 attrMeta.isTemporal = False trunk/src/dm/dom/registry.py
r297 r299 2 2 from dm.dom.base import * 3 3 from dm.dom.stateful import * 4 from dm.dom.temporal import TemporalProperty, BitemporalProperty, BitemporalActual 4 5 from dm.ioc import * 5 6 from dm.exceptions import * … … 15 16 self.domainClassRegister = None 16 17 self.backgroundObjectCache = [] 17 18 def registerCoreDomainClasses(self):19 pass20 21 def loadBackgroundObjects(self):22 "Creates and caches refs to all background domain objects."23 pass24 25 def retrieveItem(self, key):26 return getattr(self, key)27 28 def createDomainClass(self, metaDomainObject):29 baseClass = DomainObject30 domainClass = metaDomainObject.createDomainClass(baseClass)31 self.registerDomainClass(domainClass)32 return domainClass33 34 def getDomainClassRegister(self):35 if not self.domainClassRegister:36 self.domainClassRegister = DomainClassRegister()37 return self.domainClassRegister38 39 def isDomainClassRegistered(self, className):40 if className.__class__.__name__ != 'str':41 message = 'className is not a str: %s' % str(className)42 raise Exception, message43 classRegister = self.getDomainClassRegister()44 return className in classRegister45 46 def getDomainClass(self, className):47 classRegister = self.getDomainClassRegister()48 if not className in classRegister:49 raise Exception, "Domain class '%s' is not defined." % className50 return classRegister[className]51 18 52 19 def registerDomainClass(self, domainClass): … … 85 52 self.checkHasAsForHasManys(classRegister[name]) 86 53 temporalAttrs = [] 87 for a in domainClass.meta.attributes: 88 if a.isTemporal: 89 temporalMeta = domainClass.meta 90 if a.isBitemporal: 91 new = self.createBitemporalDomainClass(temporalMeta, a) 92 else: 93 new = self.createTemporalDomainClass(temporalMeta, a) 94 a.setTemporalDomainClass(new) 95 96 def createBitemporalDomainClass(self, classMeta, attrMeta): 97 temporalClassName = self.createTemporalDomainClassName(classMeta.name, attrMeta.name) 98 temporalMetaObject = DomainObject.metaClass(temporalClassName) 99 temporalMetaObject.recordedValue = attrMeta.duplicateTemporal() 100 temporalMetaObject.parent = HasA(classMeta.name, isRequired=True) 101 temporalMetaObject.dateCreated = DateTime(isIndexed=True, 102 isRequired=True, default=mx.DateTime.now) 103 temporalMetaObject.isUnique = False 104 temporalMetaObject.isCached = True 105 return self.createDomainClass(temporalMetaObject) 106 107 def createTemporalDomainClass(self, classMeta, attrMeta): 108 temporalClassName = self.createTemporalDomainClassName(classMeta.name, attrMeta.name) 109 temporalMetaObject = DomainObject.metaClass(temporalClassName) 110 temporalMetaObject.recordedValue = attrMeta.duplicateTemporal() 111 temporalMetaObject.parent = HasA(classMeta.name, isRequired=True) 112 temporalMetaObject.dateCreated = DateTime(isIndexed=True, 113 isRequired=True, default=mx.DateTime.now) 114 temporalMetaObject.isUnique = False 115 temporalMetaObject.isCached = True 116 return self.createDomainClass(temporalMetaObject) 117 118 def createTemporalDomainClassName(self, className, attrName): 119 return className + '_t_' + attrName 54 for attrMeta in domainClass.meta.attributes: 55 if attrMeta.isTemporal: 56 parentMeta = domainClass.meta 57 self.generateTemporalClass(parentMeta, attrMeta) 58 59 def getDomainClassRegister(self): 60 if not self.domainClassRegister: 61 self.domainClassRegister = DomainClassRegister() 62 return self.domainClassRegister 63 64 def registerCoreDomainClasses(self): 65 pass 66 67 def loadBackgroundObjects(self): 68 "Creates and caches refs to all background domain objects." 69 pass 70 71 def retrieveItem(self, key): 72 return getattr(self, key) 73 74 def createDomainClass(self, metaDomainObject, baseClass=DomainObject): 75 domainClass = metaDomainObject.createDomainClass(baseClass) 76 self.registerDomainClass(domainClass) 77 return domainClass 78 79 def isDomainClassRegistered(self, className): 80 if className.__class__.__name__ != 'str': 81 message = 'className is not a str: %s' % str(className) 82 raise Exception, message 83 classRegister = self.getDomainClassRegister() 84 return className in classRegister 85 86 def getDomainClass(self, className): 87 classRegister = self.getDomainClassRegister() 88 if not className in classRegister: 89 raise Exception, "Domain class '%s' is not defined." % className 90 return classRegister[className] 91 92 def generateTemporalClass(self, parentMeta, attrMeta): 93 if attrMeta.isBitemporalActual: 94 temporalBase = BitemporalActual 95 elif attrMeta.isBitemporal: 96 temporalBase = BitemporalProperty 97 else: 98 temporalBase = TemporalProperty 99 temporalClassName = "%s_tmpr_%s" % (parentMeta.name, attrMeta.name) 100 temporalMeta = temporalBase.metaClass(temporalClassName) 101 temporalMeta.recordedValue = attrMeta.duplicateTemporal() 102 temporalMeta.parent = HasA(parentMeta.name, isRequired=True) 103 temporalClass = self.createDomainClass(temporalMeta, temporalBase) 104 attrMeta.setTemporalDomainClass(temporalClass) 120 105 121 106 def setMetaAttributesFromClass(self, domainClass, domainClassMeta): trunk/src/dm/dom/temporaltest.py
r297 r299 7 7 import mx.DateTime 8 8 from time import sleep 9 from dm.dom.temporal import TemporalProperty, BitemporalProperty 10 from dm.dom.temporal import TemporalCollection, BitemporalCollection 9 from dm.dom.temporal import TemporalProperty, BitemporalProperty, BitemporalActual 10 from dm.dom.temporal import TemporalCollection, BitemporalCollection, BitemporalActualCollection 11 11 12 12 def suite(): … … 14 14 unittest.makeSuite(TestTemporal), # Example 15 15 unittest.makeSuite(TestTemporalProperty), 16 unittest.makeSuite(TestBitemporalActual), 16 17 unittest.makeSuite(TestBitemporalProperty), 17 18 ] … … 34 35 class TestTemporalProperty(TestCase): 35 36 37 timepoint = RequiredFeature('Timepoint') 38 36 39 def setUp(self): 37 40 super(TestTemporalProperty, self).setUp() 38 self.collection = TemporalProperty.createRegister() 41 self.collection = TemporalProperty.createRegister(ownerName='parent') 42 self.property = None 39 43 40 44 def tearDown(self): 45 self.timepoint.reset() 41 46 self.collection = None 47 if self.property: 48 self.property.delete() 42 49 43 50 def test_collection(self): 44 51 self.failUnlessEqual(type(self.collection), TemporalCollection) 52 self.failUnlessEqual(self.collection.ownerName, 'parent') 53 self.failUnlessEqual(self.collection.isCached, True) 54 self.failUnlessEqual(self.collection.getDomainClass(), TemporalProperty) 55 self.failUnlessEqual(TemporalProperty.isUnique, False) 56 self.failUnlessEqual(TemporalProperty.isConstant, True) 57 self.failUnlessEqual(TemporalProperty.registerKeyName, 'id') 58 self.failUnlessEqual(TemporalProperty.sortOnName, 'id') 59 self.failUnlessEqual(TemporalProperty.sortAscending, False) 60 61 def test_instance(self): 62 self.property = self.collection.create(recordedValue='') 63 self.failUnless(self.property.dateCreated) 64 self.failUnlessEqual(self.property.getSortOnValue(), self.property.id) 65 66 def test_getReferenceTime(self): 67 time1 = mx.DateTime.DateTime(2003, 6, 1) 68 self.timepoint.recorded = time1 69 self.failUnlessEqual(self.collection.getReferenceTime(), time1) 70 71 72 class TestBitemporalActual(TestCase): 73 74 timepoint = RequiredFeature('Timepoint') 75 76 def setUp(self): 77 super(TestBitemporalActual, self).setUp() 78 self.collection = BitemporalActual.createRegister(ownerName='parent') 79 self.property = None 80 81 def tearDown(self): 82 self.timepoint.reset() 83 self.collection = None 84 if self.property: 85 self.property.delete() 86 87 def test_collection(self): 88 self.failUnlessEqual(type(self.collection), BitemporalActualCollection) 89 self.failUnlessEqual(self.collection.ownerName, 'parent') 90 self.failUnlessEqual(self.collection.isCached, True) 91 self.failUnlessEqual(self.collection.getDomainClass(), BitemporalActual) 92 self.failUnlessEqual(BitemporalActual.isUnique, False) 93 self.failUnlessEqual(BitemporalActual.isConstant, True) 94 self.failUnlessEqual(BitemporalActual.registerKeyName, 'id') 95 self.failUnlessEqual(BitemporalActual.sortOnName, 'dateCreated') 96 self.failUnlessEqual(BitemporalActual.sortAscending, False) 97 98 def test_instance(self): 99 time1 = mx.DateTime.DateTime(2003, 6, 1) 100 time2 = mx.DateTime.DateTime(2003, 7, 1) 101 time3 = mx.DateTime.DateTime(2003, 8, 1) 102 time4 = mx.DateTime.DateTime(2003, 8, 1) 103 property1 = self.collection.create(dateCreated=time1, recordedValue="1") 104 property2 = self.collection.create(dateCreated=time3, recordedValue="2") 105 property3 = self.collection.create(dateCreated=time2, recordedValue="3") 106 property4 = None 107 try: 108 self.failUnless(property1.dateCreated) 109 self.failUnlessEqual(property1.getSortOnValue(), (property1.dateCreated, property1.id)) 110 sortedList = self.collection.findDomainObjects() 111 self.failUnlessEqual(sortedList, [property2, property3, property1]) 112 self.failUnlessEqual(sortedList[0].dateCreated, time3) 113 self.failUnlessEqual(sortedList[1].dateCreated, time2) 114 self.failUnlessEqual(sortedList[2].dateCreated, time1) 115 self.failUnlessEqual(sortedList[0].recordedValue, "2") 116 property4 = self.collection.create(dateCreated=time3, recordedValue="4") 117 sortedList = self.collection.findDomainObjects() 118 self.failUnlessEqual(sortedList[0].dateCreated, time3) 119 self.failUnlessEqual(sortedList[0].recordedValue, "4", sortedList) 120 finally: 121 if property4: 122 property4.delete() 123 property3.delete() 124 property2.delete() 125 property1.delete() 126 127 def test_getReferenceTime(self): 128 time1 = mx.DateTime.DateTime(2003, 6, 1) 129 self.timepoint.actual = time1 130 self.failUnlessEqual(self.collection.getReferenceTime(), time1) 45 131 46 132 133 47 134 class TestBitemporalProperty(TestCase): 135 136 timepoint = RequiredFeature('Timepoint') 48 137 49 138 def setUp(self): 50 139 super(TestBitemporalProperty, self).setUp() 51 self.collection = BitemporalProperty.createRegister( )140 self.collection = BitemporalProperty.createRegister(ownerName='parent') 52 141 53 142 def tearDown(self): 143 self.timepoint.reset() 54 144 self.collection = None 55 145 56 146 def test_collection(self): 57 147 self.failUnlessEqual(type(self.collection), BitemporalCollection) 58 59 148 self.failUnlessEqual(self.collection.ownerName, 'parent') 149 self.failUnlessEqual(self.collection.isCached, True) 150 self.failUnlessEqual(self.collection.getDomainClass(), BitemporalProperty) 151 self.failUnlessEqual(TemporalProperty.isUnique, False) 152 self.failUnlessEqual(TemporalProperty.isConstant, True) 153 self.failUnlessEqual(TemporalProperty.registerKeyName, 'id') 154 self.failUnlessEqual(TemporalProperty.sortOnName, 'id') 155 self.failUnlessEqual(TemporalProperty.sortAscending, False) 156 157 def test_instance(self): 158 time1 = mx.DateTime.DateTime(2003, 6, 1) 159 time2 = mx.DateTime.DateTime(2003, 7, 1) 160 time3 = mx.DateTime.DateTime(2003, 8, 1) 161 time4 = mx.DateTime.DateTime(2003, 8, 1) 162 # property1 = self.collection.create(recordedValue="1") 163 # property2 = self.collection.create(recordedValue="2") 164 # property3 = self.collection.create(recordedValue="3") 165 # property4 = None 166 # try: 167 # self.failUnless(property1.dateCreated) 168 # self.failUnlessEqual(property1.getSortOnValue(), (property1.id)) 169 # sortedList = self.collection.findDomainObjects() 170 # self.failUnlessEqual(sortedList, [property3, property2, property1]) 171 # self.failUnlessEqual(sortedList[0].recordedValue, "3") 172 # property4 = self.collection.create(recordedValue="4") 173 # sortedList = self.collection.findDomainObjects() 174 # self.failUnlessEqual(sortedList[0].recordedValue, "4", sortedList) 175 # finally: 176 # if property4: 177 # property4.delete() 178 # property3.delete() 179 # property2.delete() 180 # property1.delete() 181 182 def test_instance_actualtime_changes(self): 183 time1 = mx.DateTime.DateTime(2003, 6, 1) 184 time2 = mx.DateTime.DateTime(2003, 7, 1) 185 time3 = mx.DateTime.DateTime(2003, 8, 1) 186 time4 = mx.DateTime.DateTime(2003, 8, 1) 187 # property1 = self.collection.create() 188 # property1.recordedValue = "1" 189 # property1.save() 190 # self.timepoint.actual = time1 191 # property2 = self.collection.create(recordedValue="2") 192 # property3 = self.collection.create(recordedValue="3") 193 # property4 = None 194 # try: 195 # self.failUnless(property1.dateCreated) 196 # self.failUnlessEqual(property1.getSortOnValue(), (property1.dateCreated, property1.id)) 197 # sortedList = self.collection.findDomainObjects() 198 # self.failUnlessEqual(sortedList, [property2, property3, property1]) 199 # self.failUnlessEqual(sortedList[0].dateCreated, time3) 200 # self.failUnlessEqual(sortedList[1].dateCreated, time2) 201 # self.failUnlessEqual(sortedList[2].dateCreated, time1) 202 # self.failUnlessEqual(sortedList[0].recordedValue, "2") 203 # property4 = self.collection.create(dateCreated=time3, recordedValue="4") 204 # sortedList = self.collection.findDomainObjects() 205 # self.failUnlessEqual(sortedList[0].dateCreated, time3) 206 # self.failUnlessEqual(sortedList[0].recordedValue, "4", sortedList) 207 # finally: 208 # if property4: 209 # property4.delete() 210 # property3.delete() 211 # property2.delete() 212 # property1.delete() 213 214 def test_getReferenceTime(self): 215 time1 = mx.DateTime.DateTime(2003, 6, 1) 216 self.timepoint.recorded = time1 217 self.failUnlessEqual(self.collection.getReferenceTime(), time1) 60 218 61 219 … … 159 317 temporal.haircolor = haircolor2 160 318 temporal.save() 161 print "Sleeping now!"162 import time163 time.sleep(5)164 319 # - check present is most recent 165 320 self.timepoint.reset() … … 209 364 self.timepoint.reset() 210 365 temporal = self.temporals[self.fixtureName] 211 print "Sleeping... %s" % temporal.haircolor212 sleep(5)213 366 self.failUnlessEqual(temporal.haircolor, haircolor3) 214 367 self.timepoint.actual = yearsAgo … … 221 374 self.timepoint.actual = yearsAgo 222 375 temporal = self.temporals[self.fixtureName] 223 self.failUnlessEqual(temporal.haircolor, ' ')376 self.failUnlessEqual(temporal.haircolor, 'My Natural Color') 224 377 self.timepoint.reset() 225 378 self.timepoint.recorded = revisionTime trunk/src/dm/testunit.py
r296 r299 28 28 self.registry.registerDomainClass(Temporal) 29 29 self.registry.temporals = Temporal.createRegister() 30 from dm.dom.temporal import TemporalProperty, BitemporalProperty, BitemporalActual 31 self.registry.registerDomainClass(TemporalProperty) 32 self.registry.registerDomainClass(BitemporalProperty) 33 self.registry.registerDomainClass(BitemporalActual) 30 34 31 35 trunk/src/dm/timepoint.py
r296 r299 38 38 return mx.DateTime.now() 39 39 40 def isActualPresent(self): 41 return (self._actual == None) 42 trunk/src/dm/timepointtest.py
r296 r299 19 19 20 20 def tearDown(self): 21 self.timepoint.reset() 21 22 self.timepoint = None 22 23 … … 45 46 self.failUnless(now2 > now1) 46 47 48 def test_isActualNow(self): 49 self.timepoint.reset() 50 self.failUnless(self.timepoint.isActualPresent()) 51 self.timepoint.actual = self.lastweek 52 self.failIf(self.timepoint.isActualPresent()) 53 self.timepoint.reset() 54 self.failUnless(self.timepoint.isActualPresent()) 55 47 56 48 57 58 59
