Skip to content

Commit

Permalink
Require timezone-aware datetimes for all model fields
Browse files Browse the repository at this point in the history
  • Loading branch information
zyv committed Feb 13, 2025
1 parent 1f597b5 commit 1365921
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 9 deletions.
15 changes: 7 additions & 8 deletions src/github_issues_import/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from datetime import datetime
from typing import Literal

from pydantic import AwareDatetime, ConfigDict, HttpUrl
from pydantic import BaseModel as PydanticBaseModel
from pydantic import ConfigDict, HttpUrl

DEFAULT_CONFIG = ConfigDict(
populate_by_name=True,
Expand All @@ -19,9 +18,9 @@ class BaseModel(PydanticBaseModel):
class Issue(BaseModel):
title: str
body: str
created_at: datetime | None = None
updated_at: datetime | None = None
closed_at: datetime | None = None
created_at: AwareDatetime | None = None
updated_at: AwareDatetime | None = None
closed_at: AwareDatetime | None = None
assignee: str | None = None
milestone: int | None = None
closed: bool | None = None
Expand All @@ -30,7 +29,7 @@ class Issue(BaseModel):

class Comment(BaseModel):
body: str
created_at: datetime | None = None
created_at: AwareDatetime | None = None


class IssueImportRequest(BaseModel):
Expand All @@ -55,8 +54,8 @@ class IssueImportStatusResponse(BaseModel):

issue_url: HttpUrl | None = None # if "imported"

created_at: datetime | None = None
updated_at: datetime | None = None
created_at: AwareDatetime | None = None
updated_at: AwareDatetime | None = None

# if "failed"
errors: list[IssueImportError] | None = None
5 changes: 4 additions & 1 deletion tests/test_models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
from datetime import timedelta
from pathlib import Path

import pytest
Expand All @@ -15,7 +16,9 @@ def test_issue_import_request(fixture: Path):

@pytest.mark.parametrize("fixture", get_fixtures("response-single-*.json"))
def test_issue_import_status_response(fixture: Path):
IssueImportStatusResponse.model_validate_json(get_fixture(fixture))
response = IssueImportStatusResponse.model_validate_json(get_fixture(fixture))
if response.created_at is not None:
assert response.created_at.tzinfo.utcoffset(response.created_at) == timedelta(hours=-7)


def test_issue_import_status_multiple():
Expand Down

0 comments on commit 1365921

Please sign in to comment.