fix: replace datetime.UTC with timezone.utc for Python 3.10 compatibility

datetime.UTC was introduced in Python 3.11. Users on 3.10 get an ImportError.
Also lower ruff/mypy target-version from py313 to py310 to match minimum supported version.
This commit is contained in:
Pouzor
2026-03-09 22:01:32 +01:00
parent 99b40fa9e9
commit 6ae7f7768f
6 changed files with 14 additions and 14 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
from datetime import UTC, datetime
from datetime import datetime, timezone
from typing import Any
from fastapi import APIRouter, Depends
@@ -71,7 +71,7 @@ async def save_canvas(
state = await db.get(CanvasState, 1)
if state:
state.viewport = body.viewport
state.saved_at = datetime.now(UTC)
state.saved_at = datetime.now(timezone.utc)
else:
db.add(CanvasState(id=1, viewport=body.viewport))
+3 -3
View File
@@ -1,6 +1,6 @@
"""APScheduler setup for background scan and status check jobs."""
import logging
from datetime import UTC, datetime
from datetime import datetime, timezone
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from sqlalchemy import select
@@ -33,12 +33,12 @@ async def _run_status_checks() -> None:
if n:
n.status = check_result["status"]
n.response_time_ms = check_result["response_time_ms"]
n.last_seen = datetime.now(UTC) if check_result["status"] == "online" else n.last_seen
n.last_seen = datetime.now(timezone.utc) if check_result["status"] == "online" else n.last_seen
await db.commit()
await broadcast_status(
node_id=node.id,
status=check_result["status"],
checked_at=datetime.now(UTC).isoformat(),
checked_at=datetime.now(timezone.utc).isoformat(),
response_time_ms=check_result["response_time_ms"],
)
except Exception as exc:
+2 -2
View File
@@ -1,4 +1,4 @@
from datetime import UTC, datetime, timedelta
from datetime import datetime, timedelta, timezone
from jose import JWTError, jwt
from passlib.context import CryptContext
@@ -17,7 +17,7 @@ def hash_password(password: str) -> str:
def create_access_token(subject: str) -> str:
expire = datetime.now(UTC) + timedelta(minutes=settings.access_token_expire_minutes)
expire = datetime.now(timezone.utc) + timedelta(minutes=settings.access_token_expire_minutes)
payload = {"sub": subject, "exp": expire}
return str(jwt.encode(payload, settings.secret_key, algorithm=settings.algorithm))
+2 -2
View File
@@ -1,5 +1,5 @@
import uuid
from datetime import UTC, datetime
from datetime import datetime, timezone
from typing import Any
from sqlalchemy import JSON, Boolean, DateTime, Float, ForeignKey, Integer, String, Text
@@ -9,7 +9,7 @@ from app.db.database import Base
def _now() -> datetime:
return datetime.now(UTC)
return datetime.now(timezone.utc)
def _uuid() -> str:
+3 -3
View File
@@ -2,7 +2,7 @@
import asyncio
import logging
import socket
from datetime import UTC, datetime
from datetime import datetime, timezone
from typing import Any
from sqlalchemy.ext.asyncio import AsyncSession
@@ -159,7 +159,7 @@ async def run_scan(ranges: list[str], db: AsyncSession, run_id: str) -> None:
if run:
run.status = "done"
run.devices_found = devices_found
run.finished_at = datetime.now(UTC)
run.finished_at = datetime.now(timezone.utc)
await db.commit()
except Exception as exc:
@@ -168,5 +168,5 @@ async def run_scan(ranges: list[str], db: AsyncSession, run_id: str) -> None:
if run:
run.status = "error"
run.error = str(exc)
run.finished_at = datetime.now(UTC)
run.finished_at = datetime.now(timezone.utc)
await db.commit()
+2 -2
View File
@@ -1,5 +1,5 @@
[tool.ruff]
target-version = "py313"
target-version = "py310"
line-length = 120
exclude = ["migrations", ".venv"]
@@ -11,7 +11,7 @@ ignore = ["B008"]
"tests/**" = ["E501"]
[tool.mypy]
python_version = "3.13"
python_version = "3.10"
strict = true
ignore_missing_imports = true
exclude = ["migrations", ".venv"]