Changeset 326

Show
Ignore:
Timestamp:
04/10/08 13:55:10 (8 months ago)
Author:
johnbywater
Message:

Added more variations on the date-time attribute theme.

Files:

Legend:

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

    r321 r326  
    3131        ) 
    3232 
     33 
     34class RDateTimeConvertor(object):   
     35    "Converts between HTML (string) and python (mx.DateTime.DateTime)." 
     36         
     37    def fromHTML(self, dateHtml): 
     38        day, month, year = None, None, None 
     39        sec, min, hour = None, None, None 
     40        if dateHtml in ['', None]: 
     41            return None 
     42        elif dateHtml.__class__ == "".__class__: 
     43            rdate = sre.compile('(\d\d):(\d\d):(\d\d) (\d\d)-(\d\d)-(\d\d\d\d)') 
     44            date = sre.compile('(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)') 
     45            rres = rdate.match(dateHtml) 
     46            res = date.match(dateHtml) 
     47            if rres: 
     48                hour,min,sec,day,month,year = [int(i) for i in rres.groups()] 
     49            elif res: 
     50                year,month,day,hour,min,sec = [int(i) for i in res.groups()] 
     51            else: 
     52                raise Exception, "Couldn't accept '%s' for an RDate."  
     53        elif dateHtml.__class__ == datetime.date: 
     54            day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 
     55            sec, min, hour = (0, 0, 0) 
     56        elif dateHtml.__class__ == datetime.datetime: 
     57            day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 
     58            sec, min, hour = dateHtml.second, dateHtml.minute, dateHtml.hour 
     59        else: 
     60            msg = "Unsupported date input type: %s" % dateHtml.__class__ 
     61            raise Exception(msg) 
     62        return mx.DateTime.DateTime(year, month, day, hour, min, sec) 
     63 
     64    def toHTML(self, dateTimeObject): 
     65        if dateTimeObject in ['', None]: 
     66            return '' 
     67        return "%s:%s:%s %s-%s-%s" % ( 
     68            str(dateTimeObject.hour).zfill(2), 
     69            str(dateTimeObject.minute).zfill(2), 
     70            str(int(dateTimeObject.second)).zfill(2), 
     71            str(dateTimeObject.day).zfill(2), 
     72            str(dateTimeObject.month).zfill(2), 
     73            str(dateTimeObject.year).zfill(4), 
     74        ) 
     75 
     76class RNSDateTimeConvertor(object):   
     77    "Converts between HTML (string) and python (mx.DateTime.DateTime)." 
     78         
     79    def fromHTML(self, dateHtml): 
     80        day, month, year = None, None, None 
     81        min, hour = None, None 
     82        if dateHtml in ['', None]: 
     83            return None 
     84        elif dateHtml.__class__ == "".__class__: 
     85            rnsdate = sre.compile('(\d\d):(\d\d) (\d\d)-(\d\d)-(\d\d\d\d)') 
     86            rdate = sre.compile('(\d\d):(\d\d):(\d\d) (\d\d)-(\d\d)-(\d\d\d\d)') 
     87            date = sre.compile('(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)') 
     88            rnsres = rnsdate.match(dateHtml) 
     89            rres = rdate.match(dateHtml) 
     90            res = date.match(dateHtml) 
     91            if rnsres: 
     92                hour,min,day,month,year = [int(i) for i in rnsres.groups()] 
     93                sec = 0 
     94            elif rres: 
     95                hour,min,sec,day,month,year = [int(i) for i in rres.groups()] 
     96            elif res: 
     97                year,month,day,hour,min,sec = [int(i) for i in res.groups()] 
     98            else: 
     99                raise Exception, "Couldn't accept '%s' for an RDate."  
     100        elif dateHtml.__class__ == datetime.date: 
     101            day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 
     102            sec, min, hour = (0, 0, 0) 
     103        elif dateHtml.__class__ == datetime.datetime: 
     104            day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 
     105            sec, min, hour = dateHtml.second, dateHtml.minute, dateHtml.hour 
     106        else: 
     107            msg = "Unsupported date input type: %s" % dateHtml.__class__ 
     108            raise Exception(msg) 
     109        return mx.DateTime.DateTime(year, month, day, hour, min, sec) 
     110 
     111    def toHTML(self, dateTimeObject): 
     112        if dateTimeObject in ['', None]: 
     113            return '' 
     114        return "%s:%s %s-%s-%s" % ( 
     115            str(dateTimeObject.hour).zfill(2), 
     116            str(dateTimeObject.minute).zfill(2), 
     117            str(dateTimeObject.day).zfill(2), 
     118            str(dateTimeObject.month).zfill(2), 
     119            str(dateTimeObject.year).zfill(4), 
     120        ) 
    33121 
    34122class DateConvertor(object):   
  • trunk/src/dm/datetimeconvertortest.py

    r321 r326  
    22from dm.testunit import * 
    33from dm.datetimeconvertor import DateTimeConvertor 
     4from dm.datetimeconvertor import RDateTimeConvertor 
     5from dm.datetimeconvertor import RNSDateTimeConvertor 
    46from dm.datetimeconvertor import DateConvertor 
    57from dm.datetimeconvertor import RDateConvertor 
     
    911    suites = [ 
    1012        unittest.makeSuite(TestDateTimeConvertor), 
     13        unittest.makeSuite(TestRDateTimeConvertor), 
     14        unittest.makeSuite(TestRNSDateTimeConvertor), 
    1115        unittest.makeSuite(TestDateConvertor), 
    1216        unittest.makeSuite(TestRDateConvertor), 
     
    2832        dateHtml = "2007-07-01 06:07:08" 
    2933        dateDom = mx.DateTime.DateTime(2007, 07, 01, 6, 7, 8) 
     34        date = self.convertor.toHTML(dateDom) 
     35        self.failUnlessEqual(date, dateHtml) 
     36 
     37 
     38class TestRDateTimeConvertor(TestCase): 
     39 
     40    def setUp(self): 
     41        self.convertor = RDateTimeConvertor() 
     42 
     43    def test_fromHTML(self): 
     44        dateHtml = "06:07:08 01-07-2007" 
     45        dateDom = mx.DateTime.DateTime(2007, 07, 01, 6, 7, 8) 
     46        date = self.convertor.fromHTML(dateHtml) 
     47        self.failUnlessEqual(date, dateDom) 
     48 
     49    def test_toHTML(self): 
     50        dateHtml = "06:07:08 01-07-2007" 
     51        dateDom = mx.DateTime.DateTime(2007, 07, 01, 6, 7, 8) 
     52        date = self.convertor.toHTML(dateDom) 
     53        self.failUnlessEqual(date, dateHtml) 
     54 
     55 
     56class TestRNSDateTimeConvertor(TestCase): 
     57 
     58    def setUp(self): 
     59        self.convertor = RNSDateTimeConvertor() 
     60 
     61    def test_fromHTML(self): 
     62        dateHtml = "06:07 01-07-2007" 
     63        dateDom = mx.DateTime.DateTime(2007, 07, 01, 6, 7, 0) 
     64        date = self.convertor.fromHTML(dateHtml) 
     65        self.failUnlessEqual(date, dateDom) 
     66 
     67    def test_toHTML(self): 
     68        dateHtml = "06:07 01-07-2007" 
     69        dateDom = mx.DateTime.DateTime(2007, 07, 01, 6, 7, 0) 
    3070        date = self.convertor.toHTML(dateDom) 
    3171        self.failUnlessEqual(date, dateHtml) 
  • trunk/src/dm/dom/base.py

    r310 r326  
    599599        return dictValues 
    600600 
     601    def present(self): 
     602        return self.asDictValues() 
     603 
    601604    def asRequestParams(self, attrNames=None): 
    602605        requestParams = MultiValueDict() 
  • trunk/src/dm/dom/meta.py

    r310 r326  
    77import mx.DateTime 
    88from dm.datetimeconvertor import DateTimeConvertor 
     9from dm.datetimeconvertor import RDateTimeConvertor 
     10from dm.datetimeconvertor import RNSDateTimeConvertor 
    911from dm.datetimeconvertor import DateConvertor 
    1012from dm.datetimeconvertor import RDateConvertor 
     
    389391             
    390392 
     393class RDateTime(DateTime): 
     394    "Models a domain object date attribute." 
     395     
     396    convertor = RDateTimeConvertor() 
     397 
     398 
     399class RNSDateTime(DateTime): 
     400    "Models a domain object date attribute." 
     401     
     402    convertor = RNSDateTimeConvertor() 
     403 
     404 
    391405class Date(DateTime): 
    392406    "Models a domain object date attribute." 
     
    395409 
    396410 
    397 class RDate(DateTime): 
     411class RDate(Date): 
    398412    "Models a domain object date attribute, but with 'reverse' ANSI format." 
    399413