Added missing timezone in responses

Fixes #114
This commit is contained in:
Donkie
2023-09-20 20:12:55 +02:00
parent 5f5473481e
commit b795680226
4 changed files with 28 additions and 8 deletions

View File

@@ -43,6 +43,9 @@ call = "spoolman.bump:bump"
[tool.pdm.scripts.app] [tool.pdm.scripts.app]
cmd = "uvicorn spoolman.main:app" cmd = "uvicorn spoolman.main:app"
[tool.pdm.scripts.itest]
cmd = "python tests_integration/run.py"
[tool.ruff] [tool.ruff]
select = ["ALL"] select = ["ALL"]
ignore = [ ignore = [

View File

@@ -1,14 +1,31 @@
"""Pydantic data models for typing the FastAPI request/responses.""" """Pydantic data models for typing the FastAPI request/responses."""
from datetime import datetime from datetime import datetime, timezone
from typing import Optional from typing import Optional
from pydantic import BaseModel, Field from pydantic import BaseModel as PydanticBaseModel
from pydantic import Field
from spoolman.database import models from spoolman.database import models
from spoolman.math import length_from_weight from spoolman.math import length_from_weight
def datetime_to_str(dt: datetime) -> str:
"""Convert a datetime object to a string."""
if dt.tzinfo is None:
dt = dt.astimezone(tz=timezone.utc)
return dt.isoformat().replace("+00:00", "Z")
class BaseModel(PydanticBaseModel):
class Config:
"""Pydantic configuration."""
json_encoders = { # noqa: RUF012
datetime: datetime_to_str,
}
class Message(BaseModel): class Message(BaseModel):
message: str = Field() message: str = Field()

View File

@@ -50,8 +50,8 @@ def test_add_spool_remaining_weight(random_filament: dict[str, Any]):
assert spool == { assert spool == {
"id": spool["id"], "id": spool["id"],
"registered": spool["registered"], "registered": spool["registered"],
"first_used": "2023-01-02T11:00:00", "first_used": "2023-01-02T11:00:00Z",
"last_used": "2023-01-02T11:00:00", "last_used": "2023-01-02T11:00:00Z",
"filament": random_filament, "filament": random_filament,
"remaining_weight": pytest.approx(remaining_weight), "remaining_weight": pytest.approx(remaining_weight),
"used_weight": pytest.approx(used_weight), "used_weight": pytest.approx(used_weight),
@@ -70,8 +70,8 @@ def test_add_spool_remaining_weight(random_filament: dict[str, Any]):
def test_add_spool_used_weight(random_filament: dict[str, Any]): def test_add_spool_used_weight(random_filament: dict[str, Any]):
"""Test adding a spool to the database.""" """Test adding a spool to the database."""
# Execute # Execute
first_used = "2023-01-01T00:00:00" first_used = "2023-01-01T00:00:00Z"
last_used = "2023-01-02T00:00:00" last_used = "2023-01-02T00:00:00Z"
used_weight = 250 used_weight = 250
location = "The Pantry" location = "The Pantry"
lot_nr = "123456789" lot_nr = "123456789"

View File

@@ -61,8 +61,8 @@ def test_update_spool(random_filament: dict[str, Any]):
) )
spool = result.json() spool = result.json()
assert spool["first_used"] == "2023-01-01T10:00:00" assert spool["first_used"] == "2023-01-01T10:00:00Z"
assert spool["last_used"] == "2023-01-02T10:00:00" assert spool["last_used"] == "2023-01-02T10:00:00Z"
assert spool["remaining_weight"] == pytest.approx(remaining_weight) assert spool["remaining_weight"] == pytest.approx(remaining_weight)
assert spool["used_weight"] == pytest.approx(used_weight) assert spool["used_weight"] == pytest.approx(used_weight)
assert spool["remaining_length"] == pytest.approx(remaining_length) assert spool["remaining_length"] == pytest.approx(remaining_length)