from dataclasses import dataclass, field # --- MARC XML structures --- @dataclass class ControlField: tag: str value: str @dataclass class SubField: code: str value: str @dataclass class DataField: tag: str ind1: str = " " ind2: str = " " subfields: list[SubField] = field(default_factory=list) @dataclass class MarcRecord: leader: str controlfields: list[ControlField] = field(default_factory=list) datafields: list[DataField] = field(default_factory=list) # --- SRU record wrapper --- @dataclass class Record: recordSchema: str recordPacking: str recordData: MarcRecord recordPosition: int @dataclass class EchoedSearchRequest: version: str query: str maximumRecords: int recordPacking: str recordSchema: str @dataclass class SearchRetrieveResponse: version: str numberOfRecords: int records: list[Record] = field(default_factory=list) echoedSearchRetrieveRequest: EchoedSearchRequest | None = None @dataclass class FormattedResponse: title: str edition: str | None = None publisher: str | None = None year: str | None = None authors: list[str] = field(default_factory=list) isbn: list[str] = field(default_factory=list) ppn: str | None = None libraries: list[str] = field(default_factory=list)