comicbox.transforms.comicbookinfo

[docs] package comicbox.transforms.comicbookinfo

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
"""Comic Book Info transform to and from Comicbox format."""

from bidict import frozenbidict

from comicbox.schemas.comicbookinfo import ComicBookInfoSchema
from comicbox.schemas.comicbox import (
    COUNTRY_KEY,
    CRITICAL_RATING_KEY,
    GENRES_KEY,
    LANGUAGE_KEY,
    PAGE_COUNT_KEY,
    SUMMARY_KEY,
    TAGGER_KEY,
    TAGS_KEY,
    TITLE_KEY,
    UPDATED_AT_KEY,
    ComicboxSchemaMixin,
)
from comicbox.transforms.base import BaseTransform
from comicbox.transforms.comicbookinfo.credits import (
    cbi_credits_primary_to_cb,
    cbi_credits_transform_from_cb,
    cbi_credits_transform_to_cb,
)
from comicbox.transforms.comicbox import (
    DAY_KEYPATH,
    ISSUE_NAME_KEYPATH,
    MONTH_KEYPATH,
    YEAR_KEYPATH,
)
from comicbox.transforms.comicbox.name_objs import name_obj_from_cb, name_obj_to_cb
from comicbox.transforms.publishing_tags import (
    ISSUE_COUNT_KEYPATH,
    PUBLISHER_NAME_KEYPATH,
    SERIES_NAME_KEYPATH,
    VOLUME_COUNT_KEYPATH,
    VOLUME_NUMBER_KEYPATH,
)
from comicbox.transforms.spec import (
    MetaSpec,
    create_specs_from_comicbox,
    create_specs_to_comicbox,
)

TAGGER_KEYPATH = f"{ComicboxSchemaMixin.ROOT_KEYPATH}.{TAGGER_KEY}"
UPDATED_AT_KEYPATH = f"{ComicboxSchemaMixin.ROOT_KEYPATH}.{UPDATED_AT_KEY}"


TOP_KEYPATHS = frozenbidict(
    {
        "appID": TAGGER_KEYPATH,
        "lastModified": UPDATED_AT_KEYPATH,
    }
)
SIMPLE_KEYPATHS = frozenbidict(
    {
        "comments": SUMMARY_KEY,
        "country": COUNTRY_KEY,
        "issue": ISSUE_NAME_KEYPATH,
        "language": LANGUAGE_KEY,
        "numberOfIssues": ISSUE_COUNT_KEYPATH,
        "numberOfVolumes": VOLUME_COUNT_KEYPATH,
        "pages": PAGE_COUNT_KEY,
        "publicationDay": DAY_KEYPATH,
        "publicationMonth": MONTH_KEYPATH,
        "publicationYear": YEAR_KEYPATH,
        "publisher": PUBLISHER_NAME_KEYPATH,
        "rating": CRITICAL_RATING_KEY,
        "series": SERIES_NAME_KEYPATH,
        "title": TITLE_KEY,
        "volume": VOLUME_NUMBER_KEYPATH,
    }
)
NAME_OBJ_KEYPATHS = frozenbidict(
    {
        "genre": GENRES_KEY,
        "tags": TAGS_KEY,
    }
)


class ComicBookInfoTransform(BaseTransform):
    """Comic Book Info transform."""

    SCHEMA_CLASS = ComicBookInfoSchema
    SPECS_TO = create_specs_to_comicbox(
        MetaSpec(
            key_map=TOP_KEYPATHS.inverse,
            inherit_root_keypath=False,
        ),
        MetaSpec(
            key_map=SIMPLE_KEYPATHS.inverse,
        ),
        cbi_credits_transform_to_cb("credits"),
        cbi_credits_primary_to_cb("credits"),
        name_obj_to_cb(NAME_OBJ_KEYPATHS.inverse),
        format_root_keypath=ComicBookInfoSchema.ROOT_KEYPATH,
    )
    SPECS_FROM = create_specs_from_comicbox(
        MetaSpec(
            key_map=TOP_KEYPATHS,
            inherit_root_keypath=False,
        ),
        MetaSpec(
            key_map=SIMPLE_KEYPATHS,
        ),
        cbi_credits_transform_from_cb("credits"),
        name_obj_from_cb(NAME_OBJ_KEYPATHS),
        format_root_keypath=ComicBookInfoSchema.ROOT_KEYPATH,
    )