Как использовать гибридный метод для преобразования данных по запросу? - PullRequest
0 голосов
/ 28 мая 2019

Из-за некоторых явных ограничений в sqlite и ponyorm (не в состоянии хранить datetime с данными часового пояса), я хотел бы реализовать гибридный метод, который принимает столбец datetime в моей сущности и использует столбец str в той же сущностикоторая содержит строку часового пояса и возвращает дату и время с примененным к ней часовым поясом:

import datetime
from dateutil import tz
class Activity(db.Entity):
   startTime = orm.Required(datetime.datetime)
   timezoneLocal = orm.Required(str)

   @property
   def startTimeLocal(self):
       return self.startTime.replace(tzinfo=tz.UTC).astimezone(tz=tz.gettz(self.timezoneLocal))

При вызове entity.startTimeLocal я возвращаю объект datetime с правильным часовым поясом:

> time = orm.get(a for a in db.Activity)
> time.startTimeLocal
datetime.datetime(2019, 5, 2, 11, 10, 36, tzinfo=tzfile('/usr/share/zoneinfo/America/Los_Angeles'))

При попытке использовать entity.startTimeLocal в запросе происходит сбой:

> orm.get(a.startTimeLocal for a in db.Activity)
*** TypeError: Expression `tz.gettz` has unsupported type 'GettzFunc'
...