1from collections.abc import Iterable
2from datetime import datetime
3
4from ...exceptions import ImproperlyConfigured
5
6arrow = None
7try:
8 import arrow
9except ImportError:
10 pass
11
12
13class ArrowDateTime:
14 def __init__(self):
15 if not arrow:
16 raise ImproperlyConfigured(
17 "'arrow' package is required to use 'ArrowDateTime'"
18 )
19
20 def _coerce(self, impl, value):
21 if isinstance(value, str):
22 value = arrow.get(value)
23 elif isinstance(value, Iterable):
24 value = arrow.get(*value)
25 elif isinstance(value, datetime):
26 value = arrow.get(value)
27 return value
28
29 def process_bind_param(self, impl, value, dialect):
30 if value:
31 utc_val = self._coerce(impl, value).to('UTC')
32 return utc_val.datetime if impl.timezone else utc_val.naive
33 return value
34
35 def process_result_value(self, impl, value, dialect):
36 if value:
37 return arrow.get(value)
38 return value