add jose
This commit is contained in:
@@ -1,8 +1,18 @@
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
from pydantic import BaseModel, Field, field_validator, field_serializer
|
||||
from typing import Optional, List, Dict, Any
|
||||
from datetime import datetime
|
||||
import ipaddress
|
||||
from app.models.network import IPStatus, TaskStatus, TaskType
|
||||
from app.schemas._tz_util import to_business_iso, to_utc_iso
|
||||
|
||||
|
||||
# Pydantic v2 字段序列化器:把 datetime 转成业务时区 ISO 字符串
|
||||
# 让前端拿到 'YYYY-MM-DDTHH:MM:SS+08:00',可直接当本地时间显示
|
||||
_datetime_business_serializer = field_serializer(
|
||||
'datetime',
|
||||
when_used='always',
|
||||
check_fields=None, # 重要:应用到所有 datetime 字段
|
||||
)(lambda dt: to_business_iso(dt))
|
||||
|
||||
|
||||
# ========== 网段相关 Schemas ==========
|
||||
@@ -55,6 +65,11 @@ class Network(NetworkBase):
|
||||
created_at: datetime
|
||||
updated_at: Optional[datetime]
|
||||
|
||||
# Pydantic v2: 用 model_serializer 在序列化整个 model 时把所有 datetime 转成业务时区
|
||||
@field_serializer('created_at', 'updated_at')
|
||||
def _tz_serializers(self, dt: Optional[datetime]) -> Optional[str]:
|
||||
return to_business_iso(dt)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -120,6 +135,10 @@ class IPAddress(IPAddressBase):
|
||||
created_at: datetime
|
||||
updated_at: Optional[datetime]
|
||||
|
||||
@field_serializer('last_seen', 'first_seen', 'created_at', 'updated_at')
|
||||
def _tz_serializers(self, dt: Optional[datetime]) -> Optional[str]:
|
||||
return to_business_iso(dt)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -155,6 +174,13 @@ class ScanTask(BaseModel):
|
||||
error_message: Optional[str]
|
||||
created_at: datetime
|
||||
|
||||
@field_serializer(
|
||||
'started_at', 'completed_at', 'created_at',
|
||||
check_fields=None,
|
||||
)
|
||||
def _tz_serializers(self, dt: Optional[datetime]) -> Optional[str]:
|
||||
return to_business_iso(dt)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -170,4 +196,4 @@ class ScanResult(BaseModel):
|
||||
status: str
|
||||
mac_address: Optional[str] = None
|
||||
hostname: Optional[str] = None
|
||||
response_time: Optional[float] = None
|
||||
response_time: Optional[float] = None
|
||||
Reference in New Issue
Block a user