Skip to content

Commit ff497c7

Browse files
authored
Merge pull request #2573 from Mansur908/develop
change utcnow() to now(timezone.utc)
2 parents 92dfff9 + dceced7 commit ff497c7

13 files changed

Lines changed: 63 additions & 49 deletions

examples/manual_repo/basic_repo.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
import os
2525
import tempfile
26-
from datetime import datetime, timedelta
26+
from datetime import datetime, timedelta, timezone
2727
from pathlib import Path
2828
from typing import Any, Dict
2929

@@ -47,7 +47,9 @@
4747

4848
def _in(days: float) -> datetime:
4949
"""Adds 'days' to now and returns datetime object w/o microseconds."""
50-
return datetime.utcnow().replace(microsecond=0) + timedelta(days=days)
50+
return datetime.now(timezone.utc).replace(microsecond=0) + timedelta(
51+
days=days
52+
)
5153

5254

5355
# Create top-level metadata

examples/manual_repo/hashed_bin_delegation.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import hashlib
2020
import os
2121
import tempfile
22-
from datetime import datetime, timedelta
22+
from datetime import datetime, timedelta, timezone
2323
from pathlib import Path
2424
from typing import Any, Dict, Iterator, List, Tuple
2525

@@ -38,7 +38,9 @@
3838

3939
def _in(days: float) -> datetime:
4040
"""Adds 'days' to now and returns datetime object w/o microseconds."""
41-
return datetime.utcnow().replace(microsecond=0) + timedelta(days=days)
41+
return datetime.now(timezone.utc).replace(microsecond=0) + timedelta(
42+
days=days
43+
)
4244

4345

4446
roles: Dict[str, Metadata[Targets]] = {}

examples/manual_repo/succinct_hash_bin_delegations.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import math
2121
import os
2222
import tempfile
23-
from datetime import datetime, timedelta
23+
from datetime import datetime, timedelta, timezone
2424
from pathlib import Path
2525
from typing import Dict, Tuple
2626

@@ -99,7 +99,9 @@ def create_key() -> Tuple[Key, SSlibSigner]:
9999
# NOTE: See "Targets" and "Targets delegation" paragraphs in 'basic_repo.py'
100100
# example for more details about the Targets object.
101101

102-
expiration_date = datetime.utcnow().replace(microsecond=0) + timedelta(days=7)
102+
expiration_date = datetime.now(timezone.utc).replace(microsecond=0) + timedelta(
103+
days=7
104+
)
103105
targets = Metadata(Targets(expires=expiration_date))
104106

105107
succinct_roles = SuccinctRoles(

examples/repository/_simplerepo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import json
88
import logging
99
from collections import defaultdict
10-
from datetime import datetime, timedelta
10+
from datetime import datetime, timedelta, timezone
1111
from typing import Dict, List, Union
1212

1313
from securesystemslib import keys
@@ -130,7 +130,7 @@ def open(self, role: str) -> Metadata:
130130
def close(self, role: str, md: Metadata) -> None:
131131
"""Store a version of metadata. Handle version bumps, expiry, signing"""
132132
md.signed.version += 1
133-
md.signed.expires = datetime.utcnow() + self.expiry_period
133+
md.signed.expires = datetime.now(timezone.utc) + self.expiry_period
134134

135135
md.signatures.clear()
136136
for signer in self.signer_cache[role]:

examples/uploader/_localrepo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import json
88
import logging
99
import os
10-
from datetime import datetime, timedelta
10+
from datetime import datetime, timedelta, timezone
1111
from typing import Dict
1212

1313
import requests
@@ -77,7 +77,7 @@ def open(self, role: str) -> Metadata:
7777
def close(self, role: str, md: Metadata) -> None:
7878
"""Store a version of metadata. Handle version bumps, expiry, signing"""
7979
md.signed.version += 1
80-
md.signed.expires = datetime.utcnow() + self.expiry_period
80+
md.signed.expires = datetime.now(timezone.utc) + self.expiry_period
8181

8282
with open(f"{self.key_dir}/{role}", "rt", encoding="utf-8") as f:
8383
signer = SSlibSigner(json.loads(f.read()))

tests/generated_data/generate_md.py

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

66
import os
77
import sys
8-
from datetime import datetime
8+
from datetime import datetime, timezone
99
from typing import Dict, List, Optional
1010

1111
from securesystemslib.signer import SSlibKey, SSlibSigner
@@ -48,8 +48,7 @@
4848
}
4949
)
5050

51-
expires_str = "2050-01-01T00:00:00Z"
52-
EXPIRY = datetime.strptime(expires_str, "%Y-%m-%dT%H:%M:%SZ")
51+
EXPIRY = datetime(2050, 1, 1, tzinfo=timezone.utc)
5352
OUT_DIR = "generated_data/ed25519_metadata"
5453
if not os.path.exists(OUT_DIR):
5554
os.mkdir(OUT_DIR)

tests/repository_simulator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def __init__(self) -> None:
124124

125125
self.fetch_tracker = FetchTracker()
126126

127-
now = datetime.datetime.utcnow()
127+
now = datetime.datetime.now(datetime.timezone.utc)
128128
self.safe_expiry = now.replace(microsecond=0) + datetime.timedelta(
129129
days=30
130130
)

tests/test_api.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import tempfile
1515
import unittest
1616
from copy import copy, deepcopy
17-
from datetime import datetime, timedelta
17+
from datetime import datetime, timedelta, timezone
1818
from pathlib import Path
1919
from typing import Any, ClassVar, Dict, Optional
2020

@@ -313,7 +313,8 @@ def test_metadata_signed_is_expired(self) -> None:
313313
snapshot_path = os.path.join(self.repo_dir, "metadata", "snapshot.json")
314314
md = Metadata.from_file(snapshot_path)
315315

316-
self.assertEqual(md.signed.expires, datetime(2030, 1, 1, 0, 0))
316+
expected_expiry = datetime(2030, 1, 1, 0, 0, tzinfo=timezone.utc)
317+
self.assertEqual(md.signed.expires, expected_expiry)
317318

318319
# Test is_expired with reference_time provided
319320
is_expired = md.signed.is_expired(md.signed.expires)
@@ -326,10 +327,10 @@ def test_metadata_signed_is_expired(self) -> None:
326327
# Test is_expired without reference_time,
327328
# manipulating md.signed.expires
328329
expires = md.signed.expires
329-
md.signed.expires = datetime.utcnow()
330+
md.signed.expires = datetime.now(timezone.utc)
330331
is_expired = md.signed.is_expired()
331332
self.assertTrue(is_expired)
332-
md.signed.expires = datetime.utcnow() + timedelta(days=1)
333+
md.signed.expires = datetime.now(timezone.utc) + timedelta(days=1)
333334
is_expired = md.signed.is_expired()
334335
self.assertFalse(is_expired)
335336
md.signed.expires = expires

tests/test_trusted_metadata_set.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
import sys
66
import unittest
7-
from datetime import datetime
7+
from datetime import datetime, timezone
88
from typing import Callable, ClassVar, Dict, List, Optional, Tuple
99

1010
from securesystemslib.interface import (
@@ -279,7 +279,7 @@ def test_update_root_new_root_ver_same_as_trusted_root_ver(self) -> None:
279279

280280
def test_root_expired_final_root(self) -> None:
281281
def root_expired_modifier(root: Root) -> None:
282-
root.expires = datetime(1970, 1, 1)
282+
root.expires = datetime(1970, 1, 1, tzinfo=timezone.utc)
283283

284284
# intermediate root can be expired
285285
root = self.modify_metadata(Root.type, root_expired_modifier)
@@ -329,7 +329,7 @@ def bump_snapshot_version(timestamp: Timestamp) -> None:
329329
def test_update_timestamp_expired(self) -> None:
330330
# new_timestamp has expired
331331
def timestamp_expired_modifier(timestamp: Timestamp) -> None:
332-
timestamp.expires = datetime(1970, 1, 1)
332+
timestamp.expires = datetime(1970, 1, 1, tzinfo=timezone.utc)
333333

334334
# expired intermediate timestamp is loaded but raises
335335
timestamp = self.modify_metadata(
@@ -406,7 +406,7 @@ def test_update_snapshot_expired_new_snapshot(self) -> None:
406406
self.trusted_set.update_timestamp(self.metadata[Timestamp.type])
407407

408408
def snapshot_expired_modifier(snapshot: Snapshot) -> None:
409-
snapshot.expires = datetime(1970, 1, 1)
409+
snapshot.expires = datetime(1970, 1, 1, tzinfo=timezone.utc)
410410

411411
# expired intermediate snapshot is loaded but will raise
412412
snapshot = self.modify_metadata(
@@ -486,7 +486,7 @@ def test_update_targets_expired_new_target(self) -> None:
486486

487487
# new_delegated_target has expired
488488
def target_expired_modifier(target: Targets) -> None:
489-
target.expires = datetime(1970, 1, 1)
489+
target.expires = datetime(1970, 1, 1, tzinfo=timezone.utc)
490490

491491
targets = self.modify_metadata(Targets.type, target_expired_modifier)
492492
with self.assertRaises(exceptions.ExpiredMetadataError):

tests/test_updater_top_level_update.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import sys
1212
import tempfile
1313
import unittest
14+
from datetime import timezone
1415
from typing import Iterable, Optional
1516
from unittest.mock import MagicMock, Mock, call, patch
1617

@@ -43,7 +44,7 @@ class TestRefresh(unittest.TestCase):
4344
# set dump_dir to trigger repository state dumps
4445
dump_dir: Optional[str] = None
4546

46-
past_datetime = datetime.datetime.utcnow().replace(
47+
past_datetime = datetime.datetime.now(timezone.utc).replace(
4748
microsecond=0
4849
) - datetime.timedelta(days=5)
4950

@@ -320,7 +321,7 @@ def test_expired_timestamp_version_rollback(self, mock_time: Mock) -> None:
320321
- Second updater refresh performed on day 18:
321322
assert that rollback check uses expired timestamp v1"""
322323

323-
now = datetime.datetime.utcnow()
324+
now = datetime.datetime.now(timezone.utc)
324325
self.sim.timestamp.expires = now + datetime.timedelta(days=7)
325326

326327
self.sim.timestamp.version = 2
@@ -332,9 +333,9 @@ def test_expired_timestamp_version_rollback(self, mock_time: Mock) -> None:
332333

333334
self.sim.timestamp.version = 1
334335

335-
mock_time.utcnow.return_value = (
336-
datetime.datetime.utcnow() + datetime.timedelta(days=18)
337-
)
336+
mock_time.now.return_value = datetime.datetime.now(
337+
timezone.utc
338+
) + datetime.timedelta(days=18)
338339
with patch("datetime.datetime", mock_time):
339340
# Check that a rollback protection is performed even if
340341
# local timestamp has expired
@@ -356,7 +357,7 @@ def test_expired_timestamp_snapshot_rollback(self, mock_time: Mock) -> None:
356357
- Second updater refresh performed on day 18:
357358
assert that rollback protection is done with expired timestamp v1"""
358359

359-
now = datetime.datetime.utcnow()
360+
now = datetime.datetime.now(timezone.utc)
360361
self.sim.timestamp.expires = now + datetime.timedelta(days=7)
361362

362363
# Bump the snapshot version number to 3
@@ -371,9 +372,9 @@ def test_expired_timestamp_snapshot_rollback(self, mock_time: Mock) -> None:
371372
self.sim.update_snapshot()
372373
self.sim.timestamp.expires = now + datetime.timedelta(days=21)
373374

374-
mock_time.utcnow.return_value = (
375-
datetime.datetime.utcnow() + datetime.timedelta(days=18)
376-
)
375+
mock_time.now.return_value = datetime.datetime.now(
376+
timezone.utc
377+
) + datetime.timedelta(days=18)
377378
with patch("datetime.datetime", mock_time):
378379
# Assert that rollback protection is done even if
379380
# local timestamp has expired
@@ -750,7 +751,7 @@ def test_expired_metadata(self, mock_time: Mock) -> None:
750751
- Second updater refresh performed on day 18,
751752
it is successful and timestamp/snaphot final versions are v2"""
752753

753-
now = datetime.datetime.utcnow()
754+
now = datetime.datetime.now(timezone.utc)
754755
self.sim.timestamp.expires = now + datetime.timedelta(days=7)
755756

756757
# Make a successful update of valid metadata which stores it in cache
@@ -762,9 +763,9 @@ def test_expired_metadata(self, mock_time: Mock) -> None:
762763

763764
# Mocking time so that local timestam has expired
764765
# but the new timestamp has not
765-
mock_time.utcnow.return_value = (
766-
datetime.datetime.utcnow() + datetime.timedelta(days=18)
767-
)
766+
mock_time.now.return_value = datetime.datetime.now(
767+
timezone.utc
768+
) + datetime.timedelta(days=18)
768769
with patch("datetime.datetime", mock_time):
769770
self._run_refresh()
770771

0 commit comments

Comments
 (0)