animedex.backends.ann.models

Rich ANN Encyclopedia dataclasses.

ANN’s public encyclopedia API is XML-only. The high-level backend parses XML into a generic node tree first, then validates the backend-specific rich models below. A 200 response carrying <warning>... is an empty-result signal and is preserved on the rich response models instead of being raised as an error.

AnnXmlNode

class animedex.backends.ann.models.AnnXmlNode(*, _tag: str, _attrs: ~typing.Dict[str, str] = <factory>, _text: str | None = None, _tail: str | None = None, _children: ~typing.List[~animedex.backends.ann.models.AnnXmlNode] = <factory>, _children_by_tag: ~typing.Dict[str, ~typing.List[~animedex.backends.ann.models.AnnXmlNode]] = <factory>, **extra_data: ~typing.Any)[source]

Bases: BackendRichModel

A lossless XML node produced by animedex.render.xml.

tag: str
attrs: Dict[str, str]
text: str | None
tail: str | None
children: List['AnnXmlNode']
children_by_tag: Dict[str, List['AnnXmlNode']]
classmethod from_adapter(node: Dict[str, Any]) AnnXmlNode[source]

Build an AnnXmlNode from the generic XML adapter shape.

by_tag(tag: str) List[AnnXmlNode][source]

Return child nodes with tag from the grouped index.

first_text(tag: str) str | None[source]

Return text from the first direct child named tag.

AnnInfo

class animedex.backends.ann.models.AnnInfo(*, attrs: Dict[str, str] = {}, text: str | None = None, children: List[AnnXmlNode] = [], **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <info> node.

attrs: Dict[str, str]
text: str | None
children: List[AnnXmlNode]
property type: str | None

Return the ANN info type, such as "Main title".

AnnPersonRef

class animedex.backends.ann.models.AnnPersonRef(*, id: str | None = None, name: str | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

A referenced ANN person from staff or cast rows.

id: str | None
name: str | None
to_common_staff(source_tag: SourceTag | None, occupations: List[str] | None = None) Staff[source]

Project the person reference onto Staff.

AnnCompanyRef

class animedex.backends.ann.models.AnnCompanyRef(*, id: str | None = None, name: str | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

A referenced ANN company from credit rows.

id: str | None
name: str | None

AnnStaff

class animedex.backends.ann.models.AnnStaff(*, attrs: Dict[str, str] = {}, task: str | None = None, person: AnnPersonRef | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <staff> row.

attrs: Dict[str, str]
task: str | None
person: AnnPersonRef | None
to_common(source_tag: SourceTag | None = None) Staff[source]

Project this staff credit onto the common staff shape.

AnnCast

class animedex.backends.ann.models.AnnCast(*, attrs: Dict[str, str] = {}, role: str | None = None, person: AnnPersonRef | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <cast> row.

attrs: Dict[str, str]
role: str | None
person: AnnPersonRef | None
to_common(source_tag: SourceTag | None = None) Character[source]

Project the cast row onto a character role record.

AnnCredit

class animedex.backends.ann.models.AnnCredit(*, attrs: Dict[str, str] = {}, task: str | None = None, company: AnnCompanyRef | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <credit> row.

attrs: Dict[str, str]
task: str | None
company: AnnCompanyRef | None

AnnEpisode

class animedex.backends.ann.models.AnnEpisode(*, attrs: Dict[str, str] = {}, titles: List[AnnInfo] = [], **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <episode> row.

attrs: Dict[str, str]
titles: List[AnnInfo]

AnnRelation

class animedex.backends.ann.models.AnnRelation(*, direction: str, attrs: Dict[str, str] = {}, **extra_data: Any)[source]

Bases: BackendRichModel

One related ANN encyclopedia entry.

direction: str
attrs: Dict[str, str]

AnnAnime

class animedex.backends.ann.models.AnnAnime(*, id: str, gid: str | None = None, type: str | None = None, name: str | None = None, precision: str | None = None, generated_on: str | None = None, info: List[AnnInfo] = [], staff: List[AnnStaff] = [], cast: List[AnnCast] = [], credits: List[AnnCredit] = [], episodes: List[AnnEpisode] = [], reviews: List[AnnLink] = [], releases: List[AnnLink] = [], news: List[AnnLink] = [], relations: List[AnnRelation] = [], raw: AnnXmlNode, source_tag: SourceTag | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

One ANN <anime> encyclopedia entry.

id: str
gid: str | None
type: str | None
name: str | None
precision: str | None
generated_on: str | None
info: List[AnnInfo]
staff: List[AnnStaff]
cast: List[AnnCast]
credits: List[AnnCredit]
episodes: List[AnnEpisode]
reviews: List[AnnLink]
releases: List[AnnLink]
news: List[AnnLink]
relations: List[AnnRelation]
raw: AnnXmlNode
source_tag: SourceTag | None
info_by_type(type_name: str) List[AnnInfo][source]

Return <info> rows matching an ANN type string.

first_info_text(type_name: str) str | None[source]

Return text from the first matching <info> row.

to_common() Anime[source]

Project this ANN entry onto Anime.

AnnAnimeResponse

class animedex.backends.ann.models.AnnAnimeResponse(*, warnings: List[str] = [], anime: List[AnnAnime] = [], raw: AnnXmlNode, source_tag: SourceTag | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

ANN api.xml response containing anime entries and warnings.

warnings: List[str]
anime: List[AnnAnime]
raw: AnnXmlNode
source_tag: SourceTag | None

AnnReportItem

class animedex.backends.ann.models.AnnReportItem(*, fields: Dict[str, Any] = {}, raw: AnnXmlNode, source_tag: SourceTag | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

One row from reports.xml.

fields: Dict[str, Any]
raw: AnnXmlNode
source_tag: SourceTag | None

AnnReport

class animedex.backends.ann.models.AnnReport(*, attrs: Dict[str, str] = {}, args: Dict[str, str] = {}, items: List[AnnReportItem] = [], warnings: List[str] = [], raw: AnnXmlNode, source_tag: SourceTag | None = None, **extra_data: Any)[source]

Bases: BackendRichModel

ANN reports.xml response.

attrs: Dict[str, str]
args: Dict[str, str]
items: List[AnnReportItem]
warnings: List[str]
raw: AnnXmlNode
source_tag: SourceTag | None

anime_from_node

animedex.backends.ann.models.anime_from_node(node: AnnXmlNode, source_tag: SourceTag) AnnAnime[source]

Build AnnAnime from an adapted XML anime node.

anime_response_from_root

animedex.backends.ann.models.anime_response_from_root(root: AnnXmlNode, source_tag: SourceTag) AnnAnimeResponse[source]

Build an AnnAnimeResponse from an ANN <ann> root.

report_from_root

animedex.backends.ann.models.report_from_root(root: AnnXmlNode, source_tag: SourceTag) AnnReport[source]

Build an AnnReport from a <report> root.

selftest

animedex.backends.ann.models.selftest() bool[source]

Smoke-test the ANN rich models and warning path.