Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/sqlalchemy_utils/types/enriched_datetime/pendulum_datetime.py: 39%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

31 statements  

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