mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-11 04:58:33 +03:00
117 lines
2.3 KiB
Python
117 lines
2.3 KiB
Python
from typing import Annotated
|
|
from annotated_types import Len
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
|
|
|
|
class Tag(BaseModel):
|
|
id: str
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
__hash__ = object.__hash__
|
|
|
|
|
|
class ArchiveCreate(BaseModel):
|
|
id: str | None = None
|
|
url: str
|
|
result: dict | None = None
|
|
public: bool = True
|
|
author_id: str | None = None
|
|
group_id: str | None = None
|
|
tags: set[Tag] | None = set()
|
|
rearchive: bool = True
|
|
sheet_id: str | None = None
|
|
# urls: list = []
|
|
|
|
|
|
class Archive(ArchiveCreate):
|
|
created_at: datetime
|
|
updated_at: datetime | None
|
|
deleted: bool
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SubmitSheet(BaseModel):
|
|
sheet_name: str | None = None
|
|
sheet_id: str | None = None
|
|
header: int = 1
|
|
public: bool = False
|
|
author_id: str | None = None
|
|
group_id: str | None = None
|
|
tags: set[str] | None = set()
|
|
columns: dict | None = {} # TODO: implement
|
|
|
|
|
|
class SubmitManual(BaseModel):
|
|
result: str # should be a Metadata.to_json()
|
|
public: bool = False
|
|
author_id: str | None = None
|
|
group_id: str | None = None
|
|
tags: set[str] | None = set()
|
|
|
|
# API REQUESTS BELOW
|
|
# TODO: replace existing schemas with these
|
|
|
|
|
|
class ArchiveUrl(BaseModel):
|
|
url: str
|
|
public: bool = False
|
|
author_id: str | None
|
|
group_id: str | None
|
|
tags: set[str] | None = set()
|
|
|
|
# API RESPONSES BELOW
|
|
|
|
|
|
class ArchiveResult(BaseModel):
|
|
id: str
|
|
url: str
|
|
result: dict
|
|
created_at: datetime
|
|
|
|
|
|
class Task(BaseModel):
|
|
id: str
|
|
|
|
|
|
class TaskResult(Task):
|
|
status: str
|
|
result: str
|
|
|
|
|
|
class TaskDelete(Task):
|
|
deleted: bool
|
|
|
|
|
|
class ActiveUser(BaseModel):
|
|
active: bool
|
|
|
|
|
|
class SheetAdd(BaseModel):
|
|
id: str
|
|
name: str
|
|
group_id: str
|
|
frequency: str
|
|
|
|
|
|
class SheetResponse(SheetAdd):
|
|
author_id: str
|
|
created_at: datetime
|
|
last_url_archived_at: datetime | None
|
|
|
|
|
|
class ArchiveTrigger(BaseModel):
|
|
url: Annotated[str, Len(min_length=5)]
|
|
public: bool = True
|
|
group_id: Annotated[str, Len(min_length=1)] | None = None
|
|
tags: set[Tag] | None = set()
|
|
|
|
class Usage(BaseModel):
|
|
monthly_urls: int = 0
|
|
monthly_mbs: int = 0
|
|
total_sheets: int = 0
|
|
|
|
class UsageResponse(Usage):
|
|
groups: dict[str, Usage] |