123 lines
4.5 KiB
Python
123 lines
4.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Optional, Any, List
|
|
from dataclasses import dataclass
|
|
from dataclasses import field as dataclass_field
|
|
import json
|
|
|
|
|
|
@dataclass
|
|
class Item:
|
|
superlocation: str | None = dataclass_field(default_factory=str)
|
|
status: str | None = dataclass_field(default_factory=str)
|
|
availability: str | None = dataclass_field(default_factory=str)
|
|
notes: str | None = dataclass_field(default_factory=str)
|
|
limitation: str | None = dataclass_field(default_factory=str)
|
|
duedate: str | None = dataclass_field(default_factory=str)
|
|
id: str | None = dataclass_field(default_factory=str)
|
|
item_id: str | None = dataclass_field(default_factory=str)
|
|
ilslink: str | None = dataclass_field(default_factory=str)
|
|
number: int | None = dataclass_field(default_factory=int)
|
|
barcode: str | None = dataclass_field(default_factory=str)
|
|
reserve: str | None = dataclass_field(default_factory=str)
|
|
callnumber: str | None = dataclass_field(default_factory=str)
|
|
department: str | None = dataclass_field(default_factory=str)
|
|
locationhref: str | None = dataclass_field(default_factory=str)
|
|
location: str | None = dataclass_field(default_factory=str)
|
|
|
|
def from_dict(self, data: dict):
|
|
"""Import data from dict"""
|
|
data = data["items"]
|
|
for entry in data:
|
|
for key, value in entry.items():
|
|
setattr(self, key, value)
|
|
return self
|
|
|
|
|
|
@dataclass
|
|
class RDS_AVAIL_DATA:
|
|
"""Class to store RDS availability data"""
|
|
|
|
library_sigil: str = dataclass_field(default_factory=str)
|
|
items: List[Item] = dataclass_field(default_factory=list)
|
|
|
|
def import_from_dict(self, data: str):
|
|
"""Import data from dict"""
|
|
edata = json.loads(data)
|
|
# library sigil is first key
|
|
|
|
self.library_sigil = str(list(edata.keys())[0])
|
|
# get data from first key
|
|
edata = edata[self.library_sigil]
|
|
for location in edata:
|
|
item = Item(superlocation=location).from_dict(edata[location])
|
|
|
|
self.items.append(item)
|
|
return self
|
|
|
|
|
|
@dataclass
|
|
class RDS_DATA:
|
|
"""Class to store RDS data"""
|
|
|
|
RDS_SIGNATURE: str = dataclass_field(default_factory=str)
|
|
RDS_STATUS: str = dataclass_field(default_factory=str)
|
|
RDS_LOCATION: str = dataclass_field(default_factory=str)
|
|
RDS_URL: Any = dataclass_field(default_factory=str)
|
|
RDS_HINT: Any = dataclass_field(default_factory=str)
|
|
RDS_COMMENT: Any = dataclass_field(default_factory=str)
|
|
RDS_HOLDING: Any = dataclass_field(default_factory=str)
|
|
RDS_HOLDING_LEAK: Any = dataclass_field(default_factory=str)
|
|
RDS_INTERN: Any = dataclass_field(default_factory=str)
|
|
RDS_PROVENIENCE: Any = dataclass_field(default_factory=str)
|
|
RDS_LOCAL_NOTATION: str = dataclass_field(default_factory=str)
|
|
RDS_LEA: Any = dataclass_field(default_factory=str)
|
|
|
|
def import_from_dict(self, data: dict) -> RDS_DATA:
|
|
"""Import data from dict"""
|
|
for key, value in data.items():
|
|
setattr(self, key, value)
|
|
return self
|
|
|
|
|
|
@dataclass
|
|
class RDS_GENERIC_DATA:
|
|
LibrarySigil: str = dataclass_field(default_factory=str)
|
|
RDS_DATA: List[RDS_DATA] = dataclass_field(default_factory=list)
|
|
|
|
def import_from_dict(self, data: str) -> RDS_GENERIC_DATA:
|
|
"""Import data from dict"""
|
|
edata = json.loads(data)
|
|
# library sigil is first key
|
|
self.LibrarySigil = str(list(edata.keys())[0])
|
|
# get data from first key
|
|
edata = edata[self.LibrarySigil]
|
|
for entry in edata:
|
|
rds_data = RDS_DATA() # Create a new RDS_DATA instance
|
|
# Populate the RDS_DATA instance from the entry
|
|
# This assumes that the entry is a dictionary that matches the structure of the RDS_DATA class
|
|
rds_data.import_from_dict(entry)
|
|
self.RDS_DATA.append(rds_data) # Add the RDS_DATA instance to the list
|
|
return self
|
|
|
|
|
|
@dataclass
|
|
class LoksatzData:
|
|
type: Optional[str] = None
|
|
adis_idn: Optional[str] = None
|
|
t_idn: Optional[str] = None
|
|
ktrl_nr: Optional[str] = None
|
|
adis_isil: Optional[str] = None
|
|
adis_sigel: Optional[str] = None
|
|
bib_sigel: Optional[str] = None
|
|
standort: Optional[str] = None
|
|
signatur: Optional[str] = None
|
|
ausleihcode: Optional[str] = None
|
|
sig_katalog: Optional[str] = None
|
|
erwerb_datum: Optional[str] = None
|
|
medientypcode: Optional[str] = None
|
|
bestellart: Optional[str] = None
|
|
faecherstatistik: Optional[str] = None
|
|
exemplar_stat: Optional[str] = None
|
|
so_standort: Optional[str] = None
|