Skip to content

Commit 7055299

Browse files
authored
Merge branch 'upstream' into pre-commit-ci-update-config
2 parents d0fbb15 + 87cf60b commit 7055299

File tree

5 files changed

+473
-31
lines changed

5 files changed

+473
-31
lines changed

.circleci/config.yml

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
1-
version: 2.1
2-
3-
build_and_test: &build_and_test_steps
4-
- checkout
5-
# Do not use `sudo pip`
6-
# pipx is already installed but `pipx list` is empty
7-
- run: python --version ; pip --version ; pipx --version ; pwd ; ls -l
8-
- run: pip install pytest -r requirements.txt
9-
- run: pip install --editable .
10-
- run: pytest
1+
# https://circleci.com/developer/orbs/orb/circleci/python#usage-work-with-uv
112

3+
version: '2.1'
4+
orbs:
5+
python: circleci/[email protected]
126

137
jobs:
148
pre-commit:
15-
docker:
16-
- image: cimg/python:3.11
9+
executor:
10+
name: python/default
11+
tag: "3.14"
1712
steps:
1813
- checkout
19-
- run: pipx run pre-commit run --all-files --show-diff-on-failure
14+
- python/install-packages:
15+
pkg-manager: uv
16+
- run:
17+
command: |
18+
uvx pre-commit run --all-files --show-diff-on-failure
2019
2120
pytest:
22-
docker:
23-
- image: cimg/python:3.13
24-
steps: *build_and_test_steps
25-
21+
executor:
22+
name: python/default
23+
tag: "3.14"
24+
steps:
25+
- checkout
26+
- python/install-packages:
27+
pkg-manager: uv
28+
- run:
29+
command: |
30+
uv venv --allow-existing
31+
pip install --editable ".[testing]"
32+
pytest
2633
2734
workflows:
28-
build:
35+
main:
2936
jobs:
3037
- pre-commit
3138
- pytest

sc2reader/engine/plugins/gameheart.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime
1+
from datetime import datetime, timezone
22
from sc2reader.utils import Length, get_real_type
33
from sc2reader.objects import Observer, Team
44
from sc2reader.engine.events import PluginExit
@@ -65,8 +65,9 @@ def handleInitGame(self, event, replay):
6565
replay.real_length = Length(
6666
seconds=int(replay.game_length.seconds / GAME_SPEED_FACTOR[replay.speed])
6767
)
68-
replay.start_time = datetime.utcfromtimestamp(
69-
replay.unix_timestamp - replay.real_length.seconds
68+
replay.start_time = datetime.fromtimestamp(
69+
replay.unix_timestamp - replay.real_length.seconds,
70+
timezone.utc
7071
)
7172

7273
def fix_events(self, replay, start_frame):

sc2reader/resources.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections import defaultdict, namedtuple
2-
from datetime import datetime
2+
from datetime import datetime, timezone
33
import hashlib
44
from xml.etree import ElementTree
55
import zlib
@@ -411,7 +411,10 @@ def load_details(self):
411411

412412
self.windows_timestamp = details["file_time"]
413413
self.unix_timestamp = utils.windows_to_unix(self.windows_timestamp)
414-
self.end_time = datetime.utcfromtimestamp(self.unix_timestamp)
414+
self.end_time = datetime.fromtimestamp(
415+
self.unix_timestamp,
416+
timezone.utc
417+
)
415418

416419
# The utc_adjustment is either the adjusted windows timestamp OR
417420
# the value required to get the adjusted timestamp. We know the upper
@@ -429,8 +432,9 @@ def load_details(self):
429432
seconds=self.length.seconds
430433
// GAME_SPEED_FACTOR[self.expansion].get(self.speed, 1.0)
431434
)
432-
self.start_time = datetime.utcfromtimestamp(
433-
self.unix_timestamp - self.real_length.seconds
435+
self.start_time = datetime.fromtimestamp(
436+
self.unix_timestamp - self.real_length.seconds,
437+
timezone.utc
434438
)
435439
self.date = self.end_time # backwards compatibility
436440

@@ -1088,16 +1092,20 @@ def __init__(self, summary_file, filename=None, lang="enUS", **options):
10881092
else:
10891093
self.expansion = ""
10901094

1091-
self.end_time = datetime.utcfromtimestamp(self.parts[0][8])
1095+
self.end_time = datetime.fromtimestamp(
1096+
self.parts[0][8],
1097+
timezone.utc
1098+
)
10921099
self.game_speed = LOBBY_PROPERTIES[0xBB8][1][self.parts[0][0][1].decode("utf8")]
10931100
self.game_length = utils.Length(seconds=self.parts[0][7])
10941101
self.real_length = utils.Length(
10951102
seconds=int(
10961103
self.parts[0][7] / GAME_SPEED_FACTOR[self.expansion][self.game_speed]
10971104
)
10981105
)
1099-
self.start_time = datetime.utcfromtimestamp(
1100-
self.parts[0][8] - self.real_length.seconds
1106+
self.start_time = datetime.fromtimestamp(
1107+
self.parts[0][8] - self.real_length.seconds,
1108+
timezone.utc
11011109
)
11021110

11031111
self.load_map_info()

test_replays/test_replays.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import datetime
2+
from datetime import timezone
23
import json
34
from xml.dom import minidom
45

@@ -193,15 +194,15 @@ def test_datetimes(self):
193194

194195
# Played at 20 Feb 2011 22:44:48 UTC+2
195196
replay = sc2reader.load_replay("test_replays/1.2.2.17811/1.SC2Replay")
196-
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 20, 20, 44, 47))
197+
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 20, 20, 44, 47, tzinfo=timezone.utc))
197198

198199
# Played at 21 Feb 2011 00:42:13 UTC+2
199200
replay = sc2reader.load_replay("test_replays/1.2.2.17811/2.SC2Replay")
200-
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 20, 22, 42, 12))
201+
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 20, 22, 42, 12, tzinfo=timezone.utc))
201202

202203
# Played at 25 Feb 2011 16:36:28 UTC+2
203204
replay = sc2reader.load_replay("test_replays/1.2.2.17811/3.SC2Replay")
204-
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 25, 14, 36, 26))
205+
self.assertEqual(replay.end_time, datetime.datetime(2011, 2, 25, 14, 36, 26, tzinfo=timezone.utc))
205206

206207
def test_hots_pids(self):
207208
for replayfilename in [

0 commit comments

Comments
 (0)