Skip to content

Commit 2ac5309

Browse files
committed
Replace timezone.utc with UTC const
1 parent 92e9a11 commit 2ac5309

File tree

6 files changed

+16
-32
lines changed

6 files changed

+16
-32
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ xbox-xal = "pythonxbox.scripts.xal:main"
4444

4545
[tool.ruff]
4646
line-length = 88
47-
target-version = "py310"
47+
target-version = "py311"
4848

4949
[tool.ruff.lint]
5050
select = ["E4", "E7", "E9", "F", "UP"]

src/pythonxbox/authentication/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Authentication Models."""
22

3-
from datetime import datetime, timedelta, timezone
3+
from datetime import datetime, timedelta, UTC
44

55
from pydantic import BaseModel, Field
66
from pydantic.dataclasses import dataclass
@@ -9,7 +9,7 @@
99

1010

1111
def utc_now():
12-
return datetime.now(timezone.utc)
12+
return datetime.now(UTC)
1313

1414

1515
class XTokenResponse(PascalCaseModel):

src/pythonxbox/common/filetimes.py

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"""Tools to convert between Python datetime instances and Microsoft times."""
2626

2727
from calendar import timegm
28-
from datetime import datetime, timezone, tzinfo, timedelta
28+
from datetime import datetime, timedelta, UTC
2929

3030
# http://support.microsoft.com/kb/167296
3131
# How To Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME
@@ -37,30 +37,14 @@
3737
HOUR = timedelta(hours=1)
3838

3939

40-
class UTC(tzinfo):
41-
"""UTC"""
42-
43-
def utcoffset(self, dt: datetime) -> timedelta:
44-
return ZERO
45-
46-
def tzname(self, dt: datetime) -> str:
47-
return "UTC"
48-
49-
def dst(self, dt: datetime) -> timedelta:
50-
return ZERO
51-
52-
53-
utc = UTC()
54-
55-
5640
def dt_to_filetime(dt: datetime) -> int:
5741
"""Converts a datetime to Microsoft filetime format. If the object is
5842
time zone-naive, it is forced to UTC before conversion.
5943
6044
>>> "%.0f" % dt_to_filetime(datetime(2009, 7, 25, 23, 0))
6145
'128930364000000000'
6246
63-
>>> "%.0f" % dt_to_filetime(datetime(1970, 1, 1, 0, 0, tzinfo=utc))
47+
>>> "%.0f" % dt_to_filetime(datetime(1970, 1, 1, 0, 0, tzinfo=UTC))
6448
'116444736000000000'
6549
6650
>>> "%.0f" % dt_to_filetime(datetime(1970, 1, 1, 0, 0))
@@ -70,7 +54,7 @@ def dt_to_filetime(dt: datetime) -> int:
7054
128930364000001000
7155
"""
7256
if (dt.tzinfo is None) or (dt.tzinfo.utcoffset(dt) is None):
73-
dt = dt.replace(tzinfo=utc)
57+
dt = dt.replace(tzinfo=UTC)
7458
ft = EPOCH_AS_FILETIME + (timegm(dt.timetuple()) * HUNDREDS_OF_NANOSECONDS)
7559
return ft + (dt.microsecond * 10)
7660

@@ -91,7 +75,7 @@ def filetime_to_dt(ft: int) -> datetime:
9175
# Get seconds and remainder in terms of Unix epoch
9276
(s, ns100) = divmod(ft - EPOCH_AS_FILETIME, HUNDREDS_OF_NANOSECONDS)
9377
# Convert to datetime object
94-
dt = datetime.fromtimestamp(s, timezone.utc)
78+
dt = datetime.fromtimestamp(s, UTC)
9579
# Add remainder in as microseconds. Python 3.2 requires an integer
9680
dt = dt.replace(microsecond=(ns100 // 10))
9781
return dt

src/pythonxbox/common/request_signer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"""
66

77
import base64
8-
from datetime import datetime, timezone
8+
from datetime import datetime, UTC
99
import hashlib
1010
import struct
1111

@@ -101,7 +101,7 @@ def sign(
101101
timestamp: datetime = None,
102102
) -> str:
103103
if timestamp is None:
104-
timestamp = datetime.now(timezone.utc)
104+
timestamp = datetime.now(UTC)
105105

106106
signature = self._sign_raw(
107107
method, path_and_query, body, authorization, timestamp

tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timezone
1+
from datetime import datetime, UTC
22
import uuid
33

44
from ecdsa.keys import SigningKey, VerifyingKey
@@ -77,4 +77,4 @@ def synthetic_request_signer(ecdsa_signing_key) -> RequestSigner:
7777

7878
@pytest.fixture(scope="session")
7979
def synthetic_timestamp() -> datetime:
80-
return datetime.fromtimestamp(1586999965, timezone.utc)
80+
return datetime.fromtimestamp(1586999965, UTC)

tests/test_auth.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta, timezone
1+
from datetime import datetime, timedelta, UTC
22

33
from httpx import Response
44
import pytest
@@ -41,7 +41,7 @@ async def test_request_tokens(respx_mock, auth_mgr):
4141
@pytest.mark.asyncio
4242
async def test_refresh_tokens(respx_mock, auth_mgr):
4343
# Expire Tokens
44-
expired = datetime.now(timezone.utc) - timedelta(days=10)
44+
expired = datetime.now(UTC) - timedelta(days=10)
4545
auth_mgr.oauth.issued = expired
4646
auth_mgr.user_token.not_after = expired
4747
auth_mgr.xsts_token.not_after = expired
@@ -63,7 +63,7 @@ async def test_refresh_tokens(respx_mock, auth_mgr):
6363

6464
@pytest.mark.asyncio
6565
async def test_refresh_tokens_still_valid(auth_mgr):
66-
now = datetime.now(timezone.utc)
66+
now = datetime.now(UTC)
6767
auth_mgr.oauth.issued = now
6868
auth_mgr.user_token.not_after = now + timedelta(days=1)
6969
auth_mgr.xsts_token.not_after = now + timedelta(days=1)
@@ -73,11 +73,11 @@ async def test_refresh_tokens_still_valid(auth_mgr):
7373
@pytest.mark.asyncio
7474
async def test_refresh_tokens_user_still_valid(respx_mock, auth_mgr):
7575
# Expire Tokens
76-
expired = datetime.now(timezone.utc) - timedelta(days=10)
76+
expired = datetime.now(UTC) - timedelta(days=10)
7777
auth_mgr.oauth.issued = expired
7878
auth_mgr.xsts_token.not_after = expired
7979

80-
auth_mgr.user_token.not_after = datetime.now(timezone.utc) + timedelta(days=1)
80+
auth_mgr.user_token.not_after = datetime.now(UTC) + timedelta(days=1)
8181
route1 = respx_mock.post("https://login.live.com").mock(
8282
return_value=Response(200, json=get_response_json("auth_oauth2_token"))
8383
)

0 commit comments

Comments
 (0)