Skip to content

Commit 3c10af9

Browse files
committed
Fixed temporal hydration
1 parent 44a60ab commit 3c10af9

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

neo4j/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ def _run_transaction(self, access_mode, unit_of_work, *args, **kwargs):
665665
tx = self._transaction
666666
try:
667667
result = unit_of_work(tx, *args, **kwargs)
668-
except:
668+
except Exception:
669669
if tx.success is None:
670670
tx.success = False
671671
raise

neo4j/types/temporal.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636

3737
UNIX_EPOCH_DATE = Date(1970, 1, 1)
38+
UNIX_EPOCH_DATE_ORDINAL = UNIX_EPOCH_DATE.to_ordinal()
3839
UNIX_EPOCH_DATETIME_UTC = DateTime(1970, 1, 1, 0, 0, 0, utc)
3940

4041

@@ -44,7 +45,7 @@ def hydrate_date(days):
4445
:param days:
4546
:return: Date
4647
"""
47-
return UNIX_EPOCH_DATE + Duration(days=days)
48+
return Date.from_ordinal(UNIX_EPOCH_DATE_ORDINAL + days)
4849

4950

5051
def dehydrate_date(value):
@@ -108,7 +109,7 @@ def hydrate_datetime(seconds, nanoseconds, tz=None):
108109
hours, minutes = map(int, divmod(minutes, 60))
109110
days, hours = map(int, divmod(hours, 24))
110111
seconds = (1000000000 * seconds + nanoseconds) / 1000000000
111-
t = DateTime.combine(UNIX_EPOCH_DATE + Duration(days=days), Time(hours, minutes, seconds))
112+
t = DateTime.combine(Date.from_ordinal(UNIX_EPOCH_DATE_ORDINAL + days), Time(hours, minutes, seconds))
112113
if tz is None:
113114
return t
114115
if isinstance(tz, int):

test/unit/test_types.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,19 @@ def test_can_hydrate_in_dict(self):
188188
self.assertEqual(alice.labels, {"Person"})
189189
self.assertEqual(set(alice.keys()), {"name"})
190190
self.assertEqual(alice.get("name"), "Alice")
191+
192+
193+
class TemporalHydrationTestCase(TestCase):
194+
195+
def setUp(self):
196+
self.hydrant = PackStreamHydrator(2)
197+
198+
def test_can_hydrate_date_time_structure(self):
199+
struct = Structure(b'd', 1539344261, 474716862)
200+
dt, = self.hydrant.hydrate([struct])
201+
self.assertEqual(dt.year, 2018)
202+
self.assertEqual(dt.month, 10)
203+
self.assertEqual(dt.day, 12)
204+
self.assertEqual(dt.hour, 11)
205+
self.assertEqual(dt.minute, 37)
206+
self.assertEqual(dt.second, 41.474716862)

0 commit comments

Comments
 (0)