Skip to content

Commit 19a0a10

Browse files
authored
Merge pull request #755 from torotil/fix-754
fix(pendulum): Make PendulumDateTime work with postgres
2 parents a66ee64 + f3f33f7 commit 19a0a10

2 files changed

Lines changed: 16 additions & 13 deletions

File tree

sqlalchemy_utils/types/enriched_datetime/pendulum_datetime.py

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime
1+
import datetime
22

33
from ...exceptions import ImproperlyConfigured
44

@@ -24,26 +24,20 @@ def _coerce(self, impl, value):
2424
value = pendulum.from_timestamp(value)
2525
elif isinstance(value, str) and value.isdigit():
2626
value = pendulum.from_timestamp(int(value))
27-
elif isinstance(value, datetime):
28-
value = pendulum.datetime(
29-
value.year,
30-
value.month,
31-
value.day,
32-
value.hour,
33-
value.minute,
34-
value.second,
35-
value.microsecond
36-
)
27+
elif isinstance(value, datetime.datetime):
28+
value = pendulum.DateTime.instance(value)
3729
else:
3830
value = pendulum.parse(value)
3931
return value
4032

4133
def process_bind_param(self, impl, value, dialect):
4234
if value:
43-
return self._coerce(impl, value).in_tz('UTC')
35+
return self._coerce(impl, value).in_tz('UTC').naive()
4436
return value
4537

4638
def process_result_value(self, impl, value, dialect):
4739
if value:
48-
return pendulum.parse(value.isoformat())
40+
return pendulum.DateTime.instance(
41+
value.replace(tzinfo=datetime.timezone.utc)
42+
)
4943
return value

tests/types/test_enriched_datetime_pendulum.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ def test_utc(self, session, User):
6666
session.commit()
6767
assert user.created_at == time
6868

69+
@pytest.mark.usefixtures('postgresql_dsn')
70+
def test_utc_postgres(self, session, User):
71+
time = pendulum_datetime.pendulum.now("UTC")
72+
user = User(created_at=time)
73+
session.add(user)
74+
assert user.created_at == time
75+
session.commit()
76+
assert user.created_at == time
77+
6978
def test_other_tz(self, session, User):
7079
time = pendulum_datetime.pendulum.now("UTC")
7180
local = time.in_tz('Asia/Tokyo')

0 commit comments

Comments
 (0)