54 lines
1.7 KiB
Python
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)
|