Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ line-length = 88
target-version = "py38"

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


[tool.ruff.lint.per-file-ignores]
"**/scripts/*" = ["UP"]

[tool.ruff.lint.isort]
force-sort-within-sections = true
known-first-party = ["aiontfy"]
Expand Down
2 changes: 1 addition & 1 deletion src/pythonxbox/authentication/xal.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ async def request_device_token(self) -> XADResponse:

if self.client_params.device_type.lower() == "android":
# {decf45e4-945d-4379-b708-d4ee92c12d99}
device_id = "{%s}" % device_id
device_id = f"{{{device_id}}}"
else:
# iOSs
# DECF45E4-945D-4379-B708-D4EE92C12D99
Expand Down
8 changes: 2 additions & 6 deletions tests/test_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ async def test_get_conversation(respx_mock, xbl_client):
route = respx_mock.get("https://xblmessaging.xboxlive.com").mock(
return_value=Response(200, json=get_response_json("message_get_conversation"))
)
await xbl_client.message.get_conversation(
"05907fa3-0000-0009-acbd-299772a90900"
)
await xbl_client.message.get_conversation("05907fa3-0000-0009-acbd-299772a90900")

assert route.called

Expand All @@ -31,9 +29,7 @@ async def test_get_new_conversation(respx_mock, xbl_client):
route = respx_mock.get("https://xblmessaging.xboxlive.com").mock(
return_value=Response(200, json=get_response_json("message_new_conversation"))
)
await xbl_client.message.get_conversation(
"05907fa3-0000-0009-acbd-299772a90900"
)
await xbl_client.message.get_conversation("05907fa3-0000-0009-acbd-299772a90900")

assert route.called

Expand Down
17 changes: 13 additions & 4 deletions tests/test_ratelimits.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ async def helper_reach_and_wait_for_burst(
start_time,
burst_limit: int,
expected_counter: int,
frozen_datetime: FrozenDateTimeFactory
frozen_datetime: FrozenDateTimeFactory,
):
# Make as many requests as possible without exceeding the BURST limit.
for _ in range(burst_limit):
Expand Down Expand Up @@ -178,6 +178,7 @@ async def helper_reach_and_wait_for_burst(
@pytest.mark.asyncio
async def test_ratelimits_exceeded_sustain_only(respx_mock, xbl_client):
with freeze_time("2025-10-30T00:00:00-00:00") as frozen_datetime:

async def make_request():
route = respx_mock.get("https://social.xboxlive.com").mock(
return_value=Response(200, json=get_response_json("people_summary_own"))
Expand All @@ -197,22 +198,30 @@ async def make_request():

# Exceed the burst limit and wait for it to reset (10 requests)
await helper_reach_and_wait_for_burst(
make_request, start_time, burst_limit=burst_max_request_num, expected_counter=10, frozen_datetime=frozen_datetime
make_request,
start_time,
burst_limit=burst_max_request_num,
expected_counter=10,
frozen_datetime=frozen_datetime,
)

# Repeat: Exceed the burst limit and wait for it to reset (10 requests)
# Counter (the sustain one will be returned)
# For (CombinedRateLimit).get_counter(), the highest counter is returned. (sustain in this case)
await helper_reach_and_wait_for_burst(
make_request, start_time, burst_limit=burst_max_request_num, expected_counter=20, frozen_datetime=frozen_datetime
make_request,
start_time,
burst_limit=burst_max_request_num,
expected_counter=20,
frozen_datetime=frozen_datetime,
)

# Now, make the rest of the requests (10 left, 20/30 done!)
for _ in range(10):
await make_request()

# Wait for the burst limit to 'reset'.
frozen_datetime.tick(timedelta(seconds=TimePeriod.BURST.value+1))
frozen_datetime.tick(timedelta(seconds=TimePeriod.BURST.value + 1))
# Now, we have made 30 requests.
# The counters should be as follows:
# - BURST: 0* (will reset on next check)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_request_signer.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def test_synthetic_verify_digest(
signature = base64.b64decode(
"Fe3R7GuZfvGA350cH7hWgg4HIHjaD9lGYiwxki6bNyGnB8dMEIfEmBiuNuGUfWjY5lL2h44X/VMGOkPIezVb7Q=="
)
invalid_signature = b"\xFF" + bytes(signature)[1:]
invalid_signature = b"\xff" + bytes(signature)[1:]
success = synthetic_request_signer.verify_digest(signature, message)
success_via_vk = synthetic_request_signer.verify_digest(
signature, message, ecdsa_verifying_key
Expand Down
Loading