Source code for bibble.bidi.isbn

 1#!/usr/bin/env python3
 2"""
 3
 4"""
 5# Imports:
 6from __future__ import annotations
 7
 8# ##-- stdlib imports
 9import datetime
10import enum
11import functools as ftz
12import itertools as itz
13import logging as logmod
14import pathlib as pl
15import re
16import time
17import types
18import collections
19import contextlib
20import hashlib
21from copy import deepcopy
22from uuid import UUID, uuid1
23from weakref import ref
24import atexit # for @atexit.register
25import faulthandler
26# ##-- end stdlib imports
27
28from jgdv import Proto, Mixin
29import bibble._interface as API
30from bibble.util.middlecore import IdenBidiMiddleware
31from bibble.metadata import IsbnValidator, IsbnWriter
32
33# ##-- types
34# isort: off
35import abc
36import collections.abc
37from typing import TYPE_CHECKING, cast, assert_type, assert_never
38from typing import Generic, NewType
39# Protocols:
40from typing import Protocol, runtime_checkable
41# Typing Decorators:
42from typing import no_type_check, final, override, overload
43
44if TYPE_CHECKING:
45    from jgdv import Maybe
46    from typing import Final
47    from typing import ClassVar, Any, LiteralString
48    from typing import Never, Self, Literal
49    from typing import TypeGuard
50    from collections.abc import Iterable, Iterator, Callable, Generator
51    from collections.abc import Sequence, Mapping, MutableMapping, Hashable
52
53    from bibtexparser import model, Library
54    type Entry = model.Entry
55##--|
56
57# isort: on
58# ##-- end types
59
60##-- logging
61logging = logmod.getLogger(__name__)
62##-- end logging
63
64# Vars:
65
66# Body:
67
[docs] 68@Proto(API.AdaptiveMiddleware_p, API.BidirectionalMiddleware_p) 69class BidiIsbn(IdenBidiMiddleware): 70 """ A simple wrapper around IsbnValidator and IsbnWriter 71 to make a bidirectional isbn middleware 72 """ 73 74 def __init__(self, *args, reader:Maybe[IsbnValidator]=None, writer:Maybe[IsbnWriter]=None, **kwargs) -> None: 75 kwargs.setdefault(API.ALLOW_INPLACE_MOD_K, False) 76 super().__init__(*args, **kwargs) 77 self._reader = reader or IsbnValidator() 78 self._writer = writer or IsbnWriter() 79
[docs] 80 def read_transform_Entry(self, entry:Entry, library:Library) -> list[Entry]: 81 return self._reader.transform_Entry(entry, library)
82
[docs] 83 def write_transform_Entry(self, entry:Entry, library:Library) -> list[Entry]: 84 return self._writer.transform_Entry(entry, library)