MCPcopy Create free account
hub / github.com/mongodb/mongo-python-driver / test_local_datetime

Method test_local_datetime

test/test_bson.py:625–667  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

623 self.assertEqual(as_utc, after)
624
625 def test_local_datetime(self):
626 # Timezone -60 minutes of UTC, with DST between April and July.
627 tz = DSTAwareTimezone(60, "sixty-minutes", 4, 7)
628
629 # It's not DST.
630 local = datetime.datetime(year=2025, month=12, hour=2, day=1, tzinfo=tz)
631 options = CodecOptions(tz_aware=True, tzinfo=tz)
632 # Encode with this timezone, then decode to UTC.
633 encoded = encode({"date": local}, codec_options=options)
634 self.assertEqual(local.replace(hour=1, tzinfo=None), decode(encoded)["date"])
635
636 # It's DST.
637 local = datetime.datetime(year=2025, month=4, hour=1, day=1, tzinfo=tz)
638 encoded = encode({"date": local}, codec_options=options)
639 self.assertEqual(
640 local.replace(month=3, day=31, hour=23, tzinfo=None), decode(encoded)["date"]
641 )
642
643 # Encode UTC, then decode in a different timezone.
644 encoded = encode({"date": local.replace(tzinfo=utc)})
645 decoded = decode(encoded, options)["date"]
646 self.assertEqual(local.replace(hour=3), decoded)
647 self.assertEqual(tz, decoded.tzinfo)
648
649 # Test round-tripping.
650 self.assertEqual(
651 local, decode(encode({"date": local}, codec_options=options), options)["date"]
652 )
653
654 # Test around the Unix Epoch.
655 epochs = (
656 EPOCH_AWARE,
657 EPOCH_AWARE.astimezone(FixedOffset(120, "one twenty")),
658 EPOCH_AWARE.astimezone(FixedOffset(-120, "minus one twenty")),
659 )
660 utc_co = CodecOptions(tz_aware=True)
661 for epoch in epochs:
662 doc = {"epoch": epoch}
663 # We always retrieve datetimes in UTC unless told to do otherwise.
664 self.assertEqual(EPOCH_AWARE, decode(encode(doc), codec_options=utc_co)["epoch"])
665 # Round-trip the epoch.
666 local_co = CodecOptions(tz_aware=True, tzinfo=epoch.tzinfo)
667 self.assertEqual(epoch, decode(encode(doc), codec_options=local_co)["epoch"])
668
669 def test_naive_decode(self):
670 aware = datetime.datetime(1993, 4, 4, 2, tzinfo=FixedOffset(555, "SomeZone"))

Callers

nothing calls this directly

Calls 5

CodecOptionsClass · 0.90
encodeFunction · 0.90
decodeFunction · 0.90
FixedOffsetClass · 0.90
DSTAwareTimezoneClass · 0.85

Tested by

no test coverage detected