This commit is contained in:
2025-08-26 23:33:29 +03:00
commit 3b238ae283
110 changed files with 3837 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
from .monitoring_fuel import MonitoringFuelMonthRequest, MonitoringFuelTotalRequest
from .svodka_ca import SvodkaCARequest
from .svodka_pm import SvodkaPMSingleOGRequest, SvodkaPMTotalOGsRequest
from .server import ServerInfoResponse
from .upload import UploadResponse, UploadErrorResponse
__all__ = [
'MonitoringFuelMonthRequest', 'MonitoringFuelTotalRequest',
'SvodkaCARequest',
'SvodkaPMSingleOGRequest', 'SvodkaPMTotalOGsRequest',
'ServerInfoResponse',
'UploadResponse', 'UploadErrorResponse'
]

View File

@@ -0,0 +1,34 @@
from pydantic import BaseModel, Field
from typing import List
class MonitoringFuelMonthRequest(BaseModel):
month: str = Field(
...,
description="Номер месяца строкой с ведущим 0",
example="02",
pattern="^(0[1-9]|1[0-2])$"
)
class Config:
json_schema_extra = {
"example": {
"month": "02"
}
}
class MonitoringFuelTotalRequest(BaseModel):
columns: List[str] = Field(
...,
description="Массив названий выбираемых столбцов",
example=["total", "normativ"],
min_items=1
)
class Config:
json_schema_extra = {
"example": {
"columns": ["total", "normativ"]
}
}

View File

@@ -0,0 +1,18 @@
from pydantic import BaseModel, Field
class ServerInfoResponse(BaseModel):
process_id: int = Field(..., description="Идентификатор текущего процесса сервера")
parent_id: int = Field(..., description="Идентификатор родительского процесса")
cpu_cores: int = Field(..., description="Количество ядер процессора в системе")
memory_mb: float = Field(..., description="Общий объем оперативной памяти в мегабайтах")
class Config:
json_schema_extra = {
"example": {
"process_id": 12345,
"parent_id": 6789,
"cpu_cores": 8,
"memory_mb": 16384.5
}
}

View File

@@ -0,0 +1,33 @@
from pydantic import BaseModel, Field
from typing import List
from enum import Enum
class ReportMode(str, Enum):
PLAN = "plan"
FACT = "fact"
NORMATIV = "normativ"
class SvodkaCARequest(BaseModel):
modes: List[ReportMode] = Field(
...,
description="Массив кодов режимов: plan, fact или normativ",
example=["plan", "fact"],
min_items=1
)
tables: List[str] = Field(
...,
description="Массив названий таблиц как есть",
example=["ТиП, %", "Топливо итого, тонн", "Топливо итого, %", "Потери итого, тонн"],
min_items=1
)
class Config:
json_schema_extra = {
"example": {
"modes": ["plan", "fact"],
"tables": ["ТиП, %", "Топливо итого, тонн", "Топливо итого, %", "Потери итого, тонн"]
}
}

View File

@@ -0,0 +1,91 @@
from pydantic import Field, BaseModel
from typing import Optional, List
from enum import Enum
class OGID(str, Enum):
"""Доступные идентификаторы ОГ"""
KNPZ = "KNPZ"
ANHK = "ANHK"
AchNPZ = "AchNPZ"
BASH = "BASH"
UNPZ = "UNPZ"
UNH = "UNH"
NOV = "NOV"
NovKuybNPZ = "NovKuybNPZ"
KuybNPZ = "KuybNPZ"
CyzNPZ = "CyzNPZ"
TuapsNPZ = "TuapsNPZ"
SNPZ = "SNPZ"
RNPK = "RNPK"
NVNPO = "NVNPO"
KLNPZ = "KLNPZ"
PurNP = "PurNP"
YANOS = "YANOS"
class SvodkaPMSingleOGRequest(BaseModel):
id: OGID = Field(
...,
description="Идентификатор МА для запрашиваемого ОГ",
example="SNPZ"
)
codes: List[int] = Field(
...,
description="Массив кодов выбираемых строк",
example=[78, 79],
min_items=1
)
columns: List[str] = Field(
...,
description="Массив названий выбираемых столбцов",
example=["ПП", "СЭБ"],
min_items=1
)
search: Optional[str] = Field(
None,
description="Опциональный параметр для фильтрации ('Итого' или null)",
example="Итого"
)
class Config:
json_schema_extra = {
"example": {
"id": "SNPZ",
"codes": [78, 79],
"columns": ["ПП", "СЭБ"]
}
}
class SvodkaPMTotalOGsRequest(BaseModel):
codes: List[int] = Field(
...,
description="Массив кодов выбираемых строк",
example=[78, 79, 394, 395, 396, 397, 81, 82, 83, 84],
min_items=1
)
columns: List[str] = Field(
...,
description="Массив названий выбираемых столбцов",
example=["БП", "ПП", "СЭБ"],
min_items=1
)
search: Optional[str] = Field(
None,
description="Опциональный параметр для фильтрации ('Итого' или null)",
example="Итого"
)
class Config:
json_schema_extra = {
"example": {
"codes": [78, 79, 394, 395, 396, 397, 81, 82, 83, 84],
"columns": ["БП", "ПП", "СЭБ"]
}
}

View File

@@ -0,0 +1,44 @@
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any
from enum import Enum
class UploadStatus(str, Enum):
SUCCESS = "success"
PROCESSING = "processing"
ERROR = "error"
class UploadResponse(BaseModel):
success: bool = Field(..., description="Успешность операции")
message: str = Field(..., description="Сообщение о результате операции")
object_id: Optional[str] = Field(None, description="Идентификатор загруженного объекта")
class Config:
json_schema_extra = {
"example": {
"success": True,
"message": "Файл успешно загружен и обработан",
"object_id": "65a1b2c3d4e5f6a7b8c9d0e1",
}
}
class UploadErrorResponse(BaseModel):
success: bool = Field(False, description="Успешность операции")
message: str = Field(..., description="Сообщение об ошибке")
error_code: Optional[str] = Field(None, description="Код ошибки")
details: Optional[Dict[str, Any]] = Field(None, description="Детали ошибки")
class Config:
json_schema_extra = {
"example": {
"success": False,
"message": "Неверный формат файла",
"error_code": "INVALID_FILE_FORMAT",
"details": {
"expected_formats": [".zip"],
"received_format": ".rar"
}
}
}