68 lines
1.3 KiB
Python
68 lines
1.3 KiB
Python
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)
|