from dataclasses import dataclass, field from typing import List, Optional # --- 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: Optional[EchoedSearchRequest] = None