Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ROMM-1452] Mark naive datetimes as UTC #1456

Merged
merged 2 commits into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/endpoints/responses/assets.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from datetime import datetime
from typing import TypedDict

from pydantic import BaseModel
from .base import BaseModel


class BaseAsset(BaseModel):
Expand Down
18 changes: 18 additions & 0 deletions backend/endpoints/responses/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from datetime import datetime, timezone

from pydantic import BaseModel as PydanticBaseModel
from pydantic import ConfigDict


class BaseModel(PydanticBaseModel):
"""Ensures all datetime fields include UTC timezone"""

model_config = ConfigDict(
json_encoders={
datetime: lambda dt: (
dt.isoformat()
if dt.tzinfo
else dt.replace(tzinfo=timezone.utc).isoformat()
)
}
)
3 changes: 2 additions & 1 deletion backend/endpoints/responses/collection.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from datetime import datetime

from models.collection import Collection
from pydantic import BaseModel

from .base import BaseModel


class CollectionSchema(BaseModel):
Expand Down
2 changes: 1 addition & 1 deletion backend/endpoints/responses/firmware.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from datetime import datetime
from typing import TypedDict

from pydantic import BaseModel
from .base import BaseModel


class FirmwareSchema(BaseModel):
Expand Down
3 changes: 2 additions & 1 deletion backend/endpoints/responses/identity.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from datetime import datetime

from models.user import Role
from pydantic import BaseModel

from .base import BaseModel


class UserSchema(BaseModel):
Expand Down
3 changes: 2 additions & 1 deletion backend/endpoints/responses/platform.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from datetime import datetime

from models.platform import DEFAULT_COVER_ASPECT_RATIO
from pydantic import BaseModel, Field, computed_field
from pydantic import Field, computed_field

from .base import BaseModel
from .firmware import FirmwareSchema


Expand Down
4 changes: 3 additions & 1 deletion backend/endpoints/responses/rom.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
from handler.metadata.igdb_handler import IGDBMetadata
from handler.metadata.moby_handler import MobyMetadata
from models.rom import Rom, RomFile, RomUserStatus
from pydantic import BaseModel, computed_field
from pydantic import computed_field

from .base import BaseModel

SORT_COMPARE_REGEX = re.compile(r"^([Tt]he|[Aa]|[Aa]nd)\s")

Expand Down
2 changes: 1 addition & 1 deletion backend/endpoints/responses/search.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pydantic import BaseModel
from .base import BaseModel


class SearchRomSchema(BaseModel):
Expand Down
4 changes: 2 additions & 2 deletions backend/endpoints/rom.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import binascii
from base64 import b64encode
from datetime import datetime, timezone
from io import BytesIO
from shutil import rmtree
from typing import Annotated
Expand Down Expand Up @@ -27,7 +28,6 @@
from logger.logger import log
from models.rom import Rom, RomUser
from PIL import Image
from sqlalchemy import func
from starlette.requests import ClientDisconnect
from starlette.responses import FileResponse
from streaming_form_data import StreamingFormDataParser
Expand Down Expand Up @@ -584,6 +584,6 @@ async def update_rom_user(request: Request, id: int) -> RomUserSchema:
cleaned_data = {field: data[field] for field in fields_to_update if field in data}

if data.get("update_last_played", False):
cleaned_data.update({"last_played": func.now()})
cleaned_data.update({"last_played": datetime.now(timezone.utc)})

return db_rom_handler.update_rom_user(db_rom_user.id, cleaned_data)
Loading