1import datetime
2
3from ...exceptions import ImproperlyConfigured
4
5pendulum = None
6try:
7 import pendulum
8except ImportError:
9 pass
10
11
12class PendulumDateTime:
13 def __init__(self):
14 if not pendulum:
15 raise ImproperlyConfigured(
16 "'pendulum' package is required to use 'PendulumDateTime'"
17 )
18
19 def _coerce(self, impl, value):
20 if value is not None:
21 if isinstance(value, pendulum.DateTime):
22 pass
23 elif isinstance(value, (int, float)):
24 value = pendulum.from_timestamp(value)
25 elif isinstance(value, str) and value.isdigit():
26 value = pendulum.from_timestamp(int(value))
27 elif isinstance(value, datetime.datetime):
28 value = pendulum.DateTime.instance(value)
29 else:
30 value = pendulum.parse(value)
31 return value
32
33 def process_bind_param(self, impl, value, dialect):
34 if value:
35 return self._coerce(impl, value).in_tz('UTC').naive()
36 return value
37
38 def process_result_value(self, impl, value, dialect):
39 if value:
40 return pendulum.DateTime.instance(
41 value.replace(tzinfo=datetime.timezone.utc)
42 )
43 return value