From ae72b22d94f9cdc7fd58eaec377106f88aa5e482 Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Thu, 27 Nov 2025 15:36:31 +0100 Subject: [PATCH] chore(codebase): format and check code --- src/bibapi/_transformers.py | 28 ++++++++++++------------ src/bibapi/sru.py | 43 ++++++++++++++++++++++++++----------- src/bibapi/webrequest.py | 18 ++++++++++------ 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/bibapi/_transformers.py b/src/bibapi/_transformers.py index 6dc3558..5ec1ae0 100644 --- a/src/bibapi/_transformers.py +++ b/src/bibapi/_transformers.py @@ -43,7 +43,7 @@ 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) + items: list[Item] = dataclass_field(default_factory=list) def import_from_dict(self, data: str): """Import data from dict""" @@ -87,7 +87,7 @@ class RDS_DATA: @dataclass class RDS_GENERIC_DATA: LibrarySigil: str = dataclass_field(default_factory=str) - RDS_DATA: List[RDS_DATA] = dataclass_field(default_factory=list) + RDS_DATA: list[RDS_DATA] = dataclass_field(default_factory=list) def import_from_dict(self, data: str) -> RDS_GENERIC_DATA: """Import data from dict""" @@ -128,8 +128,6 @@ class ARRAYData: return data except Exception: - # # log.debug(f"ARRAYData.transform failed, {source}, {search}") - log.exception(f"ARRAYData.transform failed, no string {search}") return "" def _get_list_entry(source: str, search: str, entry: str) -> str: @@ -137,7 +135,7 @@ class ARRAYData: source = source.replace("\t", "").replace("\r", "") source = source.split(search)[1].split(")")[0] return _get_line(source, entry).replace("=>", "").strip() - except: + except Exception: return "" def _get_isbn(source: str) -> list: @@ -153,7 +151,7 @@ class ARRAYData: continue ret.append(isb) if isb not in ret else None return ret - except: + except Exception: isbn = [] return isbn @@ -212,7 +210,9 @@ class ARRAYData: def _get_adis_idn(data, signature): loksatz_match = re.search( - r"\[loksatz\] => Array\s*\((.*?)\)", data, re.DOTALL, + r"\[loksatz\] => Array\s*\((.*?)\)", + data, + re.DOTALL, ) if loksatz_match: loksatz_content = loksatz_match.group(1) @@ -227,7 +227,9 @@ class ARRAYData: def _get_in_apparat(data): loksatz_match = re.search( - r"\[loksatz\] => Array\s*\((.*?)\)", data, re.DOTALL, + r"\[loksatz\] => Array\s*\((.*?)\)", + data, + re.DOTALL, ) if loksatz_match: loksatz_content = loksatz_match.group(1) @@ -286,7 +288,7 @@ class COinSData: try: data = source.split(f"{search}=")[1] # .split("")[0].strip() return data.split("rft")[0].strip() if "rft" in data else data - except: + except Exception: return "" return BookData( @@ -311,7 +313,7 @@ class RISData: try: data = source.split(f"{search} - ")[1] # .split("")[0].strip() return data.split("\n")[0].strip() if "\n" in data else data - except: + except Exception: return "" return BookData( @@ -348,7 +350,8 @@ class BibTeXData: .replace("[", "") .replace("];", "") ) - except: + except Exception as e: + print(e) return "" return BookData( @@ -497,6 +500,3 @@ class DictToTable: self.signature = data["zs_signature"] self.work_title = data["zs_title"] return self.makeResult() - - - diff --git a/src/bibapi/sru.py b/src/bibapi/sru.py index 9a2d29d..0ea1f21 100644 --- a/src/bibapi/sru.py +++ b/src/bibapi/sru.py @@ -37,8 +37,7 @@ def _req_text(parent: ET.Element, path: str) -> str: def parse_marc_record(record_el: ET.Element) -> MarcRecord: - """record_el is the element (default ns MARC in your sample) - """ + """record_el is the element (default ns MARC in your sample)""" # leader leader_text = _req_text(record_el, "marc:leader") @@ -61,7 +60,9 @@ def parse_marc_record(record_el: ET.Element) -> MarcRecord: datafields.append(DataField(tag=tag, ind1=ind1, ind2=ind2, subfields=subfields)) return MarcRecord( - leader=leader_text, controlfields=controlfields, datafields=datafields, + leader=leader_text, + controlfields=controlfields, + datafields=datafields, ) @@ -245,7 +246,9 @@ def find_datafields_with_subfields( def controlfield_value( - rec: MarcRecord, tag: str, default: str | None = None, + rec: MarcRecord, + tag: str, + default: str | None = None, ) -> str | None: """Get the first controlfield value by tag (e.g., '001', '005').""" for cf in rec.controlfields: @@ -255,7 +258,9 @@ def controlfield_value( def datafields_value( - data: list[DataField], code: str, default: str | None = None, + data: list[DataField], + code: str, + default: str | None = None, ) -> str | None: """Get the first value for a specific subfield code in a list of datafields.""" for df in data: @@ -266,7 +271,9 @@ def datafields_value( def datafield_value( - df: DataField, code: str, default: str | None = None, + df: DataField, + code: str, + default: str | None = None, ) -> str | None: """Get the first value for a specific subfield code in a datafield.""" for sf in df.subfields: @@ -337,13 +344,17 @@ def book_from_marc(rec: MarcRecord, library_identifier: str) -> BookData: # Signature = 924 where $9 == "Frei 129" → take that field's $g frei_fields = find_datafields_with_subfields( - rec, "924", where_all={"9": "Frei 129"}, + rec, + "924", + where_all={"9": "Frei 129"}, ) signature = first_subfield_value_from_fields(frei_fields, "g") # Year = 264 $c (prefer ind2="1" publication; fallback to any 264) year = first_subfield_value(rec, "264", "c", ind2="1") or first_subfield_value( - rec, "264", "c", + rec, + "264", + "c", ) isbn = subfield_values(rec, "020", "a") mediatype = first_subfield_value(rec, "338", "a") @@ -375,7 +386,8 @@ RVK_ALLOWED = r"[A-Z0-9.\-\/]" # conservative char set typically seen in RVK no def find_newer_edition( - swb_result: BookData, dnb_result: list[BookData], + swb_result: BookData, + dnb_result: list[BookData], ) -> list[BookData] | None: """New edition if: - year > swb.year OR @@ -500,7 +512,8 @@ class QueryTransformer: value = value.replace(", ", ",") value = value.replace(" ", " ") if key.upper() == "TITLE" and hasattr( - schema, "ENCLOSE_TITLE_IN_QUOTES", + schema, + "ENCLOSE_TITLE_IN_QUOTES", ): if schema.ENCLOSE_TITLE_IN_QUOTES: value = f'"{value}"' @@ -562,7 +575,8 @@ class Api: if not any(qa.startswith(na + "=") for na in self.notsupported_args) ] query_args = QueryTransformer( - api_schema=self.prefix, arguments=query_args, + api_schema=self.prefix, + arguments=query_args, ).transform() query = "+and+".join(query_args) for old, new in self.replace.items(): @@ -592,11 +606,14 @@ class Api: try: # Per-attempt read timeout capped at remaining overall budget (but at most 30s) remaining = max( - 0.0, self._overall_timeout_seconds - (time.monotonic() - start_time), + 0.0, + self._overall_timeout_seconds - (time.monotonic() - start_time), ) read_timeout = min(30.0, remaining if remaining > 0 else 0.001) resp = self._session.get( - url, headers=headers, timeout=(3.05, read_timeout), + url, + headers=headers, + timeout=(3.05, read_timeout), ) self._last_request_time = time.monotonic() if resp.status_code == 200: diff --git a/src/bibapi/webrequest.py b/src/bibapi/webrequest.py index 867cc6e..c1135db 100644 --- a/src/bibapi/webrequest.py +++ b/src/bibapi/webrequest.py @@ -62,7 +62,7 @@ class WebRequest: def canrun(self) -> None: """Check if requests can be made.""" try: - #check public IP to see if the requested data can be accessed + # check public IP to see if the requested data can be accessed ip_response = requests.get("https://api.ipify.org", timeout=self.timeout) ip_response.raise_for_status() self.public_ip = ip_response.text @@ -125,7 +125,6 @@ class WebRequest: def get_data(self) -> list[str] | None: links = self.get_book_links(self.ppn) - log.debug(f"Links: {links}") return_data: list[str] = [] for link in links: result: str = self.search(link) # type:ignore @@ -145,7 +144,8 @@ class WebRequest: return return_data return return_data item_location = location.find( - "div", class_="col-xs-12 col-md-7 col-lg-8 rds-dl-panel", + "div", + class_="col-xs-12 col-md-7 col-lg-8 rds-dl-panel", ).text.strip() if self.use_any: pre_tag = soup.find_all("pre") @@ -251,8 +251,15 @@ class BibTextTransformer: return self def return_data( - self, option: Any = None, - ) -> BookData | None | RDS_GENERIC_DATA | RDS_AVAIL_DATA | dict[str, RDS_AVAIL_DATA | RDS_GENERIC_DATA]: + self, + option: Any = None, + ) -> ( + BookData + | None + | RDS_GENERIC_DATA + | RDS_AVAIL_DATA + | dict[str, RDS_AVAIL_DATA | RDS_GENERIC_DATA] + ): """Return Data to caller. Args: @@ -279,7 +286,6 @@ class BibTextTransformer: return None - def cover(isbn): test_url = f"https://www.buchhandel.de/cover/{isbn}/{isbn}-cover-m.jpg" data = requests.get(test_url, stream=True)