nutools/pyulib/src/ulib/gae/datetime.py

54 lines
1.7 KiB
Python

# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
__all__ = ('DateProperty', 'TimeProperty',
)
from google.appengine.ext import db
from ulib.base.dates import pydatetime, Date, ensure_date
from ulib.base.times import Time, ensure_time
class DateProperty(db.DateProperty):
data_type = Date
def validate(self, value):
if value is not None:
value = ensure_date(value)
return value
def _date_to_datetime(self, date):
return pydatetime(date.year, date.month, date.day)
def get_value_for_datastore(self, model_instance):
value = self.__get__(model_instance, model_instance.__class__)
if value is not None:
value = self._date_to_datetime(value.date)
return value
def make_value_from_datastore(self, value):
if value is None: return None
else: return Date(value.day, value.month, value.year)
class TimeProperty(db.TimeProperty):
data_type = Time
def validate(self, value):
if value is not None:
value = ensure_time(value)
return value
def _time_to_datetime(self, time):
return pydatetime(1970, 1, 1,
time.hour, time.minute, time.second,
time.microsecond)
def get_value_for_datastore(self, model_instance):
value = self.__get__(model_instance, model_instance.__class__)
if value is not None:
value = self._time_to_datetime(value.time)
return value
def make_value_from_datastore(self, value):
if value is None: return None
else: return Time(value.hour, value.minute, value.second)