From a6cf1d5c89e84d38490c0ab2d32a3a2842a276dd Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Sun, 14 Jun 2020 22:26:52 +0200 Subject: [PATCH] Add _util.now, fixing a few places where datetimes were incorrectly used --- fbchat/_client.py | 2 +- fbchat/_session.py | 2 +- fbchat/_util.py | 10 +++++++++- tests/online/test_client.py | 5 ++--- tests/test_session.py | 4 ++-- tests/test_util.py | 5 +++++ 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/fbchat/_client.py b/fbchat/_client.py index c3a67a7..b6c0fa0 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -419,7 +419,7 @@ class Client: Warning: This is not finished, and the API may change at any point! """ - at = datetime.datetime.utcnow() + at = _util.now() form = { "folders[0]": "inbox", "client": "mercury", diff --git a/fbchat/_session.py b/fbchat/_session.py index de76310..6389eac 100644 --- a/fbchat/_session.py +++ b/fbchat/_session.py @@ -486,7 +486,7 @@ class Session: return self._post("/api/graphqlbatch/", data, as_graphql=True) def _do_send_request(self, data): - now = datetime.datetime.utcnow() + now = _util.now() offline_threading_id = _util.generate_offline_threading_id() data["client"] = "mercury" data["author"] = "fbid:{}".format(self._user_id) diff --git a/fbchat/_util.py b/fbchat/_util.py index ce23f87..0782869 100644 --- a/fbchat/_util.py +++ b/fbchat/_util.py @@ -56,7 +56,7 @@ def parse_json(text: str) -> Any: def generate_offline_threading_id(): - ret = datetime_to_millis(datetime.datetime.utcnow()) + ret = datetime_to_millis(now()) value = int(random.random() * 4294967295) string = ("0000000000000000000000" + format(value, "b"))[-22:] msgs = format(ret, "b") + string @@ -158,3 +158,11 @@ def timedelta_to_seconds(td: datetime.timedelta) -> int: The returned seconds will be rounded to the nearest whole number. """ return round(td.total_seconds()) + + +def now() -> datetime.datetime: + """The current time. + + Similar to datetime.datetime.now(), but returns a non-naive datetime. + """ + return datetime.datetime.now(tz=datetime.timezone.utc) diff --git a/tests/online/test_client.py b/tests/online/test_client.py index 7b55be2..9dde041 100644 --- a/tests/online/test_client.py +++ b/tests/online/test_client.py @@ -1,6 +1,5 @@ import pytest import fbchat -import datetime import os pytestmark = pytest.mark.online @@ -95,11 +94,11 @@ def test_upload_many(client, open_resource): def test_mark_as_read(client, user, group): - client.mark_as_read([user, group], datetime.datetime.now()) + client.mark_as_read([user, group], fbchat._util.now()) def test_mark_as_unread(client, user, group): - client.mark_as_unread([user, group], datetime.datetime.now()) + client.mark_as_unread([user, group], fbchat._util.now()) def test_move_threads(client, user, group): diff --git a/tests/test_session.py b/tests/test_session.py index 1e1b5d1..c9c4713 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -1,6 +1,6 @@ import datetime import pytest -from fbchat import ParseError +from fbchat import ParseError, _util from fbchat._session import ( parse_server_js_define, base36encode, @@ -73,7 +73,7 @@ def test_prefix_url(): def test_generate_message_id(): # Returns random output, so hard to test more thoroughly - assert generate_message_id(datetime.datetime.utcnow(), "def") + assert generate_message_id(_util.now(), "def") def test_session_factory(): diff --git a/tests/test_util.py b/tests/test_util.py index 02fe1b4..1e5eb78 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -15,6 +15,7 @@ from fbchat._util import ( seconds_to_timedelta, millis_to_timedelta, timedelta_to_seconds, + now, ) @@ -245,3 +246,7 @@ def test_timedelta_to_seconds(): assert timedelta_to_seconds(datetime.timedelta(seconds=1)) == 1 assert timedelta_to_seconds(datetime.timedelta(hours=1)) == 3600 assert timedelta_to_seconds(datetime.timedelta(days=1)) == 86400 + + +def test_now(): + assert datetime_to_millis(now()) == datetime_to_millis(datetime.datetime.now())