54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
from app.api.schemas.common import ApiMeta
|
|
from app.api.schemas.runs import ScrapeSafetyStateData
|
|
|
|
|
|
class SettingsPolicyData(BaseModel):
|
|
min_run_interval_minutes: int
|
|
min_request_delay_seconds: int
|
|
automation_allowed: bool
|
|
manual_run_allowed: bool
|
|
blocked_failure_threshold: int
|
|
network_failure_threshold: int
|
|
cooldown_blocked_seconds: int
|
|
cooldown_network_seconds: int
|
|
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
class SettingsData(BaseModel):
|
|
auto_run_enabled: bool
|
|
run_interval_minutes: int
|
|
request_delay_seconds: int
|
|
nav_visible_pages: list[str]
|
|
policy: SettingsPolicyData
|
|
safety_state: ScrapeSafetyStateData
|
|
|
|
openalex_api_key: str | None = None
|
|
crossref_api_token: str | None = None
|
|
crossref_api_mailto: str | None = None
|
|
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
class SettingsEnvelope(BaseModel):
|
|
data: SettingsData
|
|
meta: ApiMeta
|
|
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
class SettingsUpdateRequest(BaseModel):
|
|
auto_run_enabled: bool
|
|
run_interval_minutes: int
|
|
request_delay_seconds: int
|
|
nav_visible_pages: list[str] | None = None
|
|
|
|
openalex_api_key: str | None = None
|
|
crossref_api_token: str | None = None
|
|
crossref_api_mailto: str | None = None
|
|
|
|
model_config = ConfigDict(extra="forbid")
|