Skip to content

Commit 9c449f0

Browse files
atravitzianmkenney
andauthored
update for utcnow deprecation (#418)
* update for deprecation * typo * fix call * black formatting * fixing import * fixing datetime call * fix import * fix imports * datetime.now * type fix * revert to utc now tmeporarily * try setting tz=None to avoid utc offset * Use UTC timezone use datetime instead of localdatetime --------- Co-authored-by: Ian Kenney <ianmichaelkenney@gmail.com>
1 parent 3ef7942 commit 9c449f0

12 files changed

Lines changed: 54 additions & 48 deletions

File tree

alchemiscale/compute/api.py

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

77
import json
8-
from datetime import datetime, timedelta
8+
import datetime
9+
from datetime import timedelta
910
import random
1011

1112
from fastapi import FastAPI, APIRouter, Body, Depends, Request
@@ -103,7 +104,7 @@ def register_computeservice(
103104
compute_service_id,
104105
n4js: Neo4jStore = Depends(get_n4js_depends),
105106
):
106-
now = datetime.utcnow()
107+
now = datetime.datetime.now(tz=datetime.UTC)
107108
csreg = ComputeServiceRegistration(
108109
identifier=ComputeServiceID(compute_service_id),
109110
registered=now,
@@ -134,7 +135,7 @@ def heartbeat_computeservice(
134135
n4js: Neo4jStore = Depends(get_n4js_depends),
135136
settings: ComputeAPISettings = Depends(get_base_api_settings),
136137
):
137-
now = datetime.utcnow()
138+
now = datetime.datetime.now(tz=datetime.UTC)
138139

139140
# expire any stale registrations, along with their claims
140141
expire_delta = timedelta(
@@ -215,7 +216,7 @@ def claim_tasks(
215216
216217
"""
217218
# check if the compute service can claim tasks
218-
now = datetime.now()
219+
now = datetime.datetime.now(tz=datetime.UTC)
219220
if not n4js.compute_service_can_claim(
220221
compute_service_id,
221222
now - timedelta(seconds=settings.ALCHEMISCALE_COMPUTE_API_FORGIVE_TIME_SECONDS),
@@ -384,7 +385,7 @@ async def set_task_result(
384385
n4js.set_task_error(tasks=[task_sk])
385386

386387
# report that the compute service experienced a failure
387-
now = datetime.utcnow()
388+
now = datetime.datetime.now(tz=datetime.UTC)
388389
n4js.log_failure_compute_service(compute_service_id, now)
389390
n4js.resolve_task_restarts(task_scoped_keys=[task_sk])
390391

alchemiscale/security/auth.py

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

77
import secrets
8-
from datetime import datetime, timedelta
8+
import datetime
9+
from datetime import timedelta
910

1011
import bcrypt
1112
from fastapi import HTTPException, status
@@ -112,7 +113,7 @@ def create_access_token(
112113
) -> str:
113114
to_encode = data.copy()
114115

115-
expire = datetime.utcnow() + timedelta(seconds=expires_seconds)
116+
expire = datetime.datetime.now(tz=datetime.UTC) + timedelta(seconds=expires_seconds)
116117
to_encode.update({"exp": expire})
117118

118119
encoded_jwt = jwt.encode(to_encode, secret_key, algorithm=jwt_algorithm)

alchemiscale/security/models.py

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

7-
from datetime import datetime
7+
import datetime
88

99
from pydantic import BaseModel, field_validator
1010

@@ -23,7 +23,7 @@ class TokenData(BaseModel):
2323

2424
class CredentialedEntity(BaseModel):
2525
hashed_key: str
26-
expires: datetime | None = None
26+
expires: datetime.datetime | None = None
2727

2828

2929
class ScopedIdentity(BaseModel):

alchemiscale/storage/models.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from abc import abstractmethod
88
from copy import copy
9-
from datetime import datetime
9+
import datetime
1010
from enum import Enum
1111
from uuid import uuid4
1212
import hashlib
@@ -39,7 +39,7 @@ def __str__(self):
3939

4040
@classmethod
4141
def from_now(cls, identifier: ComputeServiceID):
42-
now = datetime.utcnow()
42+
now = datetime.datetime.now(tz=datetime.UTC)
4343
return cls(
4444
identifier=identifier, registered=now, heartbeat=now, failure_times=[]
4545
)
@@ -96,7 +96,7 @@ class Task(GufeTokenizable):
9696
status: TaskStatusEnum
9797
priority: int
9898
claim: str | None
99-
datetime_created: datetime | None
99+
datetime_created: datetime.datetime | None
100100
creator: str | None
101101
extends: str | None
102102

@@ -105,7 +105,7 @@ def __init__(
105105
*,
106106
status: str | TaskStatusEnum = TaskStatusEnum.waiting,
107107
priority: int = 10,
108-
datetime_created: datetime | None = None,
108+
datetime_created: datetime.datetime | None = None,
109109
creator: str | None = None,
110110
extends: str | None = None,
111111
claim: str | None = None,
@@ -118,7 +118,9 @@ def __init__(
118118
self.priority = priority
119119

120120
self.datetime_created = (
121-
datetime_created if datetime_created is not None else datetime.utcnow()
121+
datetime_created
122+
if datetime_created is not None
123+
else datetime.datetime.now(tz=datetime.UTC)
122124
)
123125

124126
self.creator = creator
@@ -422,7 +424,7 @@ def __init__(
422424
obj_key: GufeKey,
423425
scope: Scope,
424426
ok: bool,
425-
datetime_created: datetime | None = None,
427+
datetime_created: datetime.datetime | None = None,
426428
creator: str | None = None,
427429
):
428430
self.location = location
@@ -450,7 +452,7 @@ def _to_dict(self):
450452
def _from_dict(cls, d):
451453
d_ = copy(d)
452454
d_["datetime_created"] = (
453-
datetime.fromisoformat(d["datetime_created"])
455+
datetime.datetime.fromisoformat(d["datetime_created"])
454456
if d.get("received") is not None
455457
else None
456458
)

alchemiscale/storage/objectstore.py

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

77
import os
8-
from datetime import datetime
8+
import datetime
99
from boto3.session import Session
1010
from functools import lru_cache
1111

@@ -237,7 +237,7 @@ def push_protocoldagresult(
237237
obj_key=protocoldagresult_gufekey,
238238
scope=transformation.scope,
239239
ok=ok,
240-
datetime_created=datetime.utcnow(),
240+
datetime_created=datetime.datetime.now(tz=datetime.UTC),
241241
creator=creator,
242242
)
243243

alchemiscale/storage/statestore.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import abc
88
import bisect
9-
from datetime import datetime
9+
import datetime
1010
from contextlib import contextmanager
1111
import json
1212
import re
@@ -115,7 +115,7 @@ def _select_tasks_from_taskpool(taskpool: list[tuple[str, float]], count) -> lis
115115
116116
// create CLAIMS relationship with given compute service
117117
MATCH (csreg:ComputeServiceRegistration {{identifier: $compute_service_id}})
118-
CREATE (t)<-[cl:CLAIMS {{claimed: localdatetime($datetimestr)}}]-(csreg)
118+
CREATE (t)<-[cl:CLAIMS {{claimed: datetime($datetimestr)}}]-(csreg)
119119
120120
SET t.status = '{TaskStatusEnum.running.value}'
121121
@@ -1255,25 +1255,25 @@ def deregister_computeservice(self, compute_service_id: ComputeServiceID):
12551255
return ComputeServiceID(identifier)
12561256

12571257
def heartbeat_computeservice(
1258-
self, compute_service_id: ComputeServiceID, heartbeat: datetime
1258+
self, compute_service_id: ComputeServiceID, heartbeat: datetime.datetime
12591259
):
12601260
"""Update the heartbeat for the given ComputeServiceID."""
12611261

12621262
q = f"""
12631263
MATCH (n:ComputeServiceRegistration {{identifier: $compute_service_id}})
1264-
SET n.heartbeat = localdatetime('{heartbeat.isoformat()}')
1264+
SET n.heartbeat = datetime('{heartbeat.isoformat()}')
12651265
12661266
"""
12671267
with self.transaction() as tx:
12681268
tx.run(q, compute_service_id=str(compute_service_id))
12691269

12701270
return compute_service_id
12711271

1272-
def expire_registrations(self, expire_time: datetime):
1272+
def expire_registrations(self, expire_time: datetime.datetime):
12731273
"""Remove all registrations with last heartbeat prior to the given `expire_time`."""
12741274
q = f"""
12751275
MATCH (n:ComputeServiceRegistration)
1276-
WHERE n.heartbeat < localdatetime('{expire_time.isoformat()}')
1276+
WHERE n.heartbeat < datetime('{expire_time.isoformat()}')
12771277
12781278
WITH n
12791279
@@ -1298,7 +1298,7 @@ def expire_registrations(self, expire_time: datetime):
12981298
def log_failure_compute_service(
12991299
self,
13001300
compute_service_id: ComputeServiceID,
1301-
failure_time: datetime,
1301+
failure_time: datetime.datetime,
13021302
) -> ComputeServiceID:
13031303
"""Add a reported compute service failure to the database.
13041304
@@ -1311,7 +1311,7 @@ def log_failure_compute_service(
13111311
"""
13121312
q = """
13131313
MATCH (n:ComputeServiceRegistration {identifier: $compute_service_id})
1314-
SET n.failure_times = [localdatetime($failure_time)] + n.failure_times
1314+
SET n.failure_times = [datetime($failure_time)] + n.failure_times
13151315
"""
13161316

13171317
with self.transaction() as tx:
@@ -1326,7 +1326,7 @@ def log_failure_compute_service(
13261326
def compute_service_can_claim(
13271327
self,
13281328
compute_service_id: ComputeServiceID,
1329-
forgive_time: datetime,
1329+
forgive_time: datetime.datetime,
13301330
max_failures: int,
13311331
) -> bool:
13321332
"""Check if a compute service is able to claim a ``Task``.
@@ -1345,7 +1345,7 @@ def compute_service_can_claim(
13451345
# get the number of failures that occured after `forgive_time`
13461346
query = """
13471347
MATCH (cs:ComputeServiceRegistration {identifier: $compute_service_id})
1348-
SET cs.failure_times = [entry IN cs.failure_times WHERE entry > localdatetime($forgive_time)]
1348+
SET cs.failure_times = [entry IN cs.failure_times WHERE entry > datetime($forgive_time)]
13491349
RETURN size(cs.failure_times) as n_failures
13501350
"""
13511351
results = self.execute_query(
@@ -2074,7 +2074,7 @@ def task_count(task_dict: dict):
20742074
tx.run(
20752075
CLAIM_QUERY,
20762076
tasks_list=[str(task) for task in tasks if task is not None],
2077-
datetimestr=str(datetime.utcnow().isoformat()),
2077+
datetimestr=str(datetime.datetime.now(tz=datetime.UTC).isoformat()),
20782078
compute_service_id=str(compute_service_id),
20792079
)
20802080

alchemiscale/tests/integration/compute/client/test_compute_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
import json
33
import os
4-
from datetime import datetime
4+
import datetime
55
from time import sleep
66

77
from gufe.tokenization import JSON_HANDLER
@@ -378,7 +378,7 @@ def test_set_task_result_legacy(
378378
obj_key=protocoldagresult.key,
379379
scope=tf_sk.scope,
380380
ok=protocoldagresult.ok(),
381-
datetime_created=datetime.utcnow(),
381+
datetime_created=datetime.datetime.now(tz=datetime.UTC),
382382
creator=None,
383383
)
384384

alchemiscale/tests/integration/compute/client/test_compute_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def test_cycle_max_failures(self, n4js_preloaded, s3os_server_fresh, service):
171171
# create blocking failures
172172
query = """
173173
MATCH (cs:ComputeServiceRegistration {identifier: $compute_service_id})
174-
SET cs.failure_times = [localdatetime()] + cs.failure_times
174+
SET cs.failure_times = [datetime()] + cs.failure_times
175175
"""
176176

177177
for _ in range(4):

alchemiscale/tests/integration/interface/client/test_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pytest
2-
from datetime import datetime
2+
import datetime
33
from time import sleep
44
import os
55
from pathlib import Path
@@ -2212,7 +2212,7 @@ def _push_result_legacy(task_scoped_key, protocoldagresult, n4js, s3os_server):
22122212
obj_key=protocoldagresult.key,
22132213
scope=transformation_sk.scope,
22142214
ok=ok,
2215-
datetime_created=datetime.utcnow(),
2215+
datetime_created=datetime.datetime.now(tz=datetime.UTC),
22162216
creator=None,
22172217
)
22182218
n4js.set_task_result(

alchemiscale/tests/integration/storage/test_statestore.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from datetime import datetime, timedelta
1+
import datetime
2+
from datetime import timedelta
23
import random
34
from pathlib import Path
45
from functools import reduce
@@ -573,7 +574,7 @@ def test_get_transformation_failures(
573574
### compute
574575

575576
def test_register_computeservice(self, n4js, compute_service_id):
576-
now = datetime.utcnow()
577+
now = datetime.datetime.now(tz=datetime.UTC)
577578
registration = ComputeServiceRegistration(
578579
identifier=compute_service_id,
579580
registered=now,
@@ -599,7 +600,7 @@ def test_register_computeservice(self, n4js, compute_service_id):
599600
assert int(csreg["heartbeat"].to_native().timestamp()) == int(now.timestamp())
600601

601602
def test_deregister_computeservice(self, n4js, compute_service_id):
602-
now = datetime.utcnow()
603+
now = datetime.datetime.now(tz=datetime.UTC)
603604
registration = ComputeServiceRegistration(
604605
identifier=compute_service_id,
605606
registered=now,
@@ -622,7 +623,7 @@ def test_deregister_computeservice(self, n4js, compute_service_id):
622623
assert not csreg.records
623624

624625
def test_heartbeat_computeservice(self, n4js, compute_service_id):
625-
now = datetime.utcnow()
626+
now = datetime.datetime.now(tz=datetime.UTC)
626627
registration = ComputeServiceRegistration(
627628
identifier=compute_service_id,
628629
registered=now,
@@ -651,7 +652,7 @@ def test_heartbeat_computeservice(self, n4js, compute_service_id):
651652
)
652653

653654
def test_expire_registrations(self, n4js, compute_service_id):
654-
now = datetime.utcnow()
655+
now = datetime.datetime.now(tz=datetime.UTC)
655656
yesterday = now - timedelta(days=1)
656657
an_hour_ago = now - timedelta(hours=1)
657658
registration = ComputeServiceRegistration(
@@ -678,7 +679,7 @@ def test_expire_registrations(self, n4js, compute_service_id):
678679
assert compute_service_id in identities
679680

680681
def test_log_failure_computeservice(self, n4js, compute_service_id):
681-
now = datetime.utcnow()
682+
now = datetime.datetime.now(tz=datetime.UTC)
682683
registration = ComputeServiceRegistration(
683684
identifier=compute_service_id,
684685
registered=now,
@@ -706,7 +707,7 @@ def test_log_failure_computeservice(self, n4js, compute_service_id):
706707
assert 6 == results.records[0]["n_failures"]
707708

708709
def test_compute_service_can_claim(self, n4js, compute_service_id):
709-
now = datetime.utcnow()
710+
now = datetime.datetime.now(tz=datetime.UTC)
710711
registration = ComputeServiceRegistration(
711712
identifier=compute_service_id,
712713
registered=now,

0 commit comments

Comments
 (0)