Update datetime handling in ApiKey and Variable models (#1673)
* Update datetime handling in ApiKey and Variable models * Refactor test_login_successful function in test_login.py * Fix nullable attribute for created_at and updated_at fields in Variable model
This commit is contained in:
parent
4ee9b72634
commit
836ac08d80
6 changed files with 24 additions and 18 deletions
|
|
@ -9,7 +9,6 @@ from typing import Sequence, Union
|
|||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
from sqlalchemy.dialects import postgresql
|
||||
from sqlalchemy.engine.reflection import Inspector
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
|
|
@ -35,7 +34,9 @@ def upgrade() -> None:
|
|||
"created_at",
|
||||
existing_type=sa.TIMESTAMP(timezone=True),
|
||||
nullable=True,
|
||||
existing_server_default=sa.text("now()"),
|
||||
# existing_server_default expects str | bool | Identity | Computed | None
|
||||
# sa.text("now()") is not a valid value for existing_server_default
|
||||
existing_server_default=False,
|
||||
)
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -54,7 +55,7 @@ def downgrade() -> None:
|
|||
"created_at",
|
||||
existing_type=sa.TIMESTAMP(timezone=True),
|
||||
nullable=False,
|
||||
existing_server_default=sa.text("now()"),
|
||||
existing_server_default=False,
|
||||
)
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from typing import TYPE_CHECKING, Optional
|
||||
from uuid import UUID, uuid4
|
||||
|
||||
from pydantic import validator
|
||||
from pydantic import field_validator, validator
|
||||
from sqlmodel import Field, Relationship, SQLModel, Column, func, DateTime
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
|
@ -11,7 +11,9 @@ if TYPE_CHECKING:
|
|||
|
||||
class ApiKeyBase(SQLModel):
|
||||
name: Optional[str] = Field(index=True, nullable=True, default=None)
|
||||
created_at: datetime = Field(sa_column=Column(DateTime(timezone=True), server_default=func.now(), nullable=False))
|
||||
created_at: datetime = Field(
|
||||
default=None, sa_column=Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
|
||||
)
|
||||
last_used_at: Optional[datetime] = Field(default=None, nullable=True)
|
||||
total_uses: int = Field(default=0)
|
||||
is_active: bool = Field(default=True)
|
||||
|
|
@ -33,6 +35,10 @@ class ApiKeyCreate(ApiKeyBase):
|
|||
api_key: Optional[str] = None
|
||||
user_id: Optional[UUID] = None
|
||||
|
||||
@field_validator("created_at", mode="before")
|
||||
def set_created_at(cls, v):
|
||||
return v or datetime.now(timezone.utc)
|
||||
|
||||
|
||||
class UnmaskedApiKeyRead(ApiKeyBase):
|
||||
id: UUID
|
||||
|
|
|
|||
|
|
@ -26,10 +26,12 @@ class Variable(VariableBase, table=True):
|
|||
)
|
||||
# name is unique per user
|
||||
created_at: datetime = Field(
|
||||
default=None,
|
||||
sa_column=Column(DateTime(timezone=True), server_default=func.now(), nullable=True),
|
||||
description="Creation time of the variable",
|
||||
)
|
||||
updated_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
sa_column=Column(DateTime(timezone=True), nullable=True),
|
||||
description="Last update time of the variable",
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue