147 lines
3.8 KiB
Python
147 lines
3.8 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from app.schemas.tag import TagRead
|
|
from app.schemas.ssh_key import (
|
|
ObjectSSHCredentialCreate,
|
|
ObjectSSHCredentialRead,
|
|
ObjectCategoryCredentialCreate,
|
|
ObjectCategoryCredentialRead,
|
|
)
|
|
|
|
|
|
class ObjectCreate(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
server_ip: Optional[str] = None
|
|
city: Optional[str] = None
|
|
client: Optional[str] = None
|
|
# Object DB sync settings
|
|
db_host: Optional[str] = None
|
|
db_port: int = 5432
|
|
db_name: Optional[str] = None
|
|
db_user: Optional[str] = None
|
|
db_password: Optional[str] = None # plaintext, encrypted on write
|
|
db_table: Optional[str] = None
|
|
db_col_ip: Optional[str] = None
|
|
db_col_type: Optional[str] = None
|
|
db_via_tunnel: bool = False
|
|
# SSH defaults
|
|
ssh_user: Optional[str] = None
|
|
ssh_password: Optional[str] = None # plaintext, encrypted on write
|
|
ssh_port: int = 22
|
|
notes: Optional[str] = None
|
|
is_active: bool = True
|
|
tag_ids: list[int] = []
|
|
ssh_credentials: list[ObjectSSHCredentialCreate] = []
|
|
category_credentials: list[ObjectCategoryCredentialCreate] = []
|
|
|
|
|
|
class ObjectUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
description: Optional[str] = None
|
|
server_ip: Optional[str] = None
|
|
city: Optional[str] = None
|
|
client: Optional[str] = None
|
|
db_host: Optional[str] = None
|
|
db_port: Optional[int] = None
|
|
db_name: Optional[str] = None
|
|
db_user: Optional[str] = None
|
|
db_password: Optional[str] = None
|
|
db_table: Optional[str] = None
|
|
db_col_ip: Optional[str] = None
|
|
db_col_type: Optional[str] = None
|
|
db_via_tunnel: Optional[bool] = None
|
|
ssh_user: Optional[str] = None
|
|
ssh_password: Optional[str] = None
|
|
ssh_port: Optional[int] = None
|
|
notes: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
tag_ids: Optional[list[int]] = None
|
|
ssh_credentials: Optional[list[ObjectSSHCredentialCreate]] = None
|
|
category_credentials: Optional[list[ObjectCategoryCredentialCreate]] = None
|
|
|
|
|
|
class ObjectRead(BaseModel):
|
|
id: int
|
|
name: str
|
|
description: Optional[str] = None
|
|
server_ip: Optional[str] = None
|
|
city: Optional[str] = None
|
|
client: Optional[str] = None
|
|
db_host: Optional[str] = None
|
|
db_port: int
|
|
db_name: Optional[str] = None
|
|
db_user: Optional[str] = None
|
|
db_table: Optional[str] = None
|
|
db_col_ip: Optional[str] = None
|
|
db_col_type: Optional[str] = None
|
|
db_via_tunnel: bool
|
|
ssh_user: Optional[str] = None
|
|
ssh_port: int
|
|
notes: Optional[str] = None
|
|
is_active: bool
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
tags: list[TagRead] = []
|
|
ssh_credentials: list[ObjectSSHCredentialRead] = []
|
|
category_credentials: list[ObjectCategoryCredentialRead] = []
|
|
device_count: int = 0
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class ObjectMetaResponse(BaseModel):
|
|
cities: list[str]
|
|
clients: list[str]
|
|
|
|
|
|
# --- Import from xlsx ---
|
|
|
|
class ObjectImportRow(BaseModel):
|
|
row: int
|
|
name: str
|
|
city: str
|
|
server_ip: str
|
|
client: Optional[str] = None
|
|
description: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
ssh_user: str
|
|
db_via_tunnel: bool
|
|
|
|
|
|
class ObjectImportSkipped(BaseModel):
|
|
row: int
|
|
name: str
|
|
server_ip: str
|
|
reason: str
|
|
|
|
|
|
class ObjectImportError(BaseModel):
|
|
row: int
|
|
reason: str
|
|
|
|
|
|
class ObjectImportPreview(BaseModel):
|
|
would_create: list[ObjectImportRow]
|
|
would_skip: list[ObjectImportSkipped]
|
|
errors: list[ObjectImportError]
|
|
|
|
|
|
class ObjectImportResult(BaseModel):
|
|
created: int
|
|
skipped: int
|
|
errors: list[ObjectImportError]
|
|
|
|
|
|
class SyncResult(BaseModel):
|
|
created: int
|
|
updated: int
|
|
skipped: int
|
|
errors: list[str] = []
|
|
|
|
|
|
class DiscoveryStarted(BaseModel):
|
|
task_id: str
|