goa/__init__.py
branchtls-sprint
changeset 1131 544609e83317
parent 447 0e52d72104a6
child 1133 8a409ea0c9ec
equal deleted inserted replaced
1130:17ff4d4bfbd0 1131:544609e83317
     1 """cubicweb on google appengine
     1 """cubicweb on google appengine
     2 
     2 
     3 :organization: Logilab
     3 :organization: Logilab
     4 :copyright: 2001-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     4 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     6 """
     6 """
     7 __docformat__ = "restructuredtext en"
     7 __docformat__ = "restructuredtext en"
     8 
       
     9 
       
    10 from datetime import datetime, time, date
       
    11 from mx.DateTime import DateTime, Date, Time
       
    12 
       
    13 def mx2datetime(mxobj, yamstype):
       
    14     """converts a mx date object (DateTime, Date or Time) into a
       
    15     regular python datetime object
       
    16     """
       
    17     #if yamstype == 'Datetime':
       
    18     # don't use date, db model doesn't actually support it, only datetime
       
    19     return datetime(mxobj.year, mxobj.month, mxobj.day,
       
    20                     mxobj.hour, mxobj.minute, int(mxobj.second))
       
    21 #     elif yamstype == 'Date':
       
    22 #         return date(mxobj.year, mxobj.month, mxobj.day)
       
    23 #     # XXX don't support time either, what should we do here ?
       
    24 #     return time(mxobj.hour, mxobj.minute, int(mxobj.second))
       
    25 
       
    26 def datetime2mx(datetimeobj, yamstype=None):
       
    27     """converts a mx date object (DateTime, Date or Time) into a
       
    28     regular python datetime object
       
    29     """
       
    30     if yamstype is None:
       
    31         yamstype = guess_yamstype_for_date(datetimeobj)
       
    32     assert yamstype is not None
       
    33     if yamstype == 'Datetime':
       
    34         # don't use date, db model doesn't actually support it, only datetime
       
    35         return DateTime(datetimeobj.year, datetimeobj.month, datetimeobj.day,
       
    36                         datetimeobj.hour, datetimeobj.minute, int(datetimeobj.second))
       
    37     elif yamstype == 'Date':
       
    38         return Date(datetimeobj.year, datetimeobj.month, datetimeobj.day)
       
    39     # XXX don't support time either, what should we do here ?
       
    40     return Time(datetimeobj.hour, datetimeobj.minute, int(datetimeobj.second))
       
    41 
       
    42 
       
    43 def guess_yamstype_for_date(datetimeobj):
       
    44     """guesses yams correct type according to `datetimeobj`'s type"""
       
    45     if isinstance(datetimeobj, datetime):
       
    46         return 'Datetime'
       
    47     elif isinstance(datetimeobj, date):
       
    48         return 'Date'
       
    49     elif isinstance(datetimeobj, time):
       
    50         return 'Time'
       
    51     return None
       
    52 
       
    53 
       
    54 def use_mx_for_dates(func):
       
    55     """decorator to convert func's return value into mx objects
       
    56     instead of datetime objects
       
    57     """
       
    58     def wrapper(*args, **kwargs):
       
    59         value = func(*args, **kwargs)
       
    60         yamstype = guess_yamstype_for_date(value)
       
    61         if yamstype is None:
       
    62             return value
       
    63         return datetime2mx(value, yamstype)
       
    64     return wrapper
       
    65 
     8 
    66 
     9 
    67 try:
    10 try:
    68     # WARNING: do not import the google's db module here since it will take
    11     # WARNING: do not import the google's db module here since it will take
    69     #          precedence over our own db submodule
    12     #          precedence over our own db submodule