comicbox.sources

[docs] module comicbox.sources

  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
"""Metadata sources definitions."""

from dataclasses import dataclass
from enum import Enum

from comicbox.formats import MetadataFormats


@dataclass
class MetadataSource:
    """Metadata source attributes."""

    label: str
    path: bool = False
    formats: tuple[MetadataFormats, ...] = tuple(
        fmt for fmt in MetadataFormats if fmt.value.enabled
    )
    from_archive: bool = False


class MetadataSources(Enum):
    """Metadata sources."""

    # Source order declares masking precedence
    # Format tuples declare masking precedence under each source

    CONFIG = MetadataSource(
        "Config",
        formats=(
            MetadataFormats.COMICBOX_YAML,
            MetadataFormats.METRON_INFO,
            MetadataFormats.COMIC_INFO,
            MetadataFormats.COMIC_BOOK_INFO,
            MetadataFormats.COMET,
            MetadataFormats.PDF,
            MetadataFormats.COMICTAGGER,
            MetadataFormats.FILENAME,
        ),
    )
    ARCHIVE_FILENAME = MetadataSource(
        "Filename", path=True, formats=(MetadataFormats.FILENAME,), from_archive=True
    )
    ARCHIVE_PDF = MetadataSource(
        "Archive Header", path=True, formats=(MetadataFormats.PDF,), from_archive=True
    )
    ARCHIVE_COMMENT = MetadataSource(
        "Archive Comment",
        path=True,
        formats=(MetadataFormats.COMIC_BOOK_INFO,),
        from_archive=True,
    )
    ARCHIVE_FILE = MetadataSource(
        "Archive File",
        path=True,
        formats=(
            MetadataFormats.COMICBOX_YAML,
            MetadataFormats.COMICBOX_JSON,
            MetadataFormats.COMICBOX_CLI_YAML,
            MetadataFormats.METRON_INFO,
            MetadataFormats.COMIC_INFO,
            MetadataFormats.COMET,
            MetadataFormats.COMIC_BOOK_INFO,
            MetadataFormats.COMICTAGGER,
        ),
        from_archive=True,
    )
    IMPORT_FILE = MetadataSource("Imported File", path=True)
    CLI = MetadataSource(
        "Comicbox CLI",
        formats=(
            MetadataFormats.COMICBOX_CLI_YAML,
            MetadataFormats.METRON_INFO,
            MetadataFormats.COMIC_INFO,
            MetadataFormats.COMIC_BOOK_INFO,
            MetadataFormats.PDF,
            MetadataFormats.COMET,
            MetadataFormats.COMICTAGGER,
        ),
    )
    API = MetadataSource(
        "API",
        formats=(
            MetadataFormats.COMICBOX_CLI_YAML,
            MetadataFormats.COMICBOX_YAML,
            MetadataFormats.COMICBOX_JSON,
            MetadataFormats.METRON_INFO,
            MetadataFormats.COMIC_INFO,
            MetadataFormats.COMIC_BOOK_INFO,
            MetadataFormats.COMET,
            MetadataFormats.PDF,
            MetadataFormats.PDF_XML,
            MetadataFormats.COMICTAGGER,
            MetadataFormats.FILENAME,
        ),
    )
    LEGACY_NESTED = MetadataSource(
        "Nested in Other Metadata",
        path=True,
        formats=(
            MetadataFormats.COMICBOX_CLI_YAML,
            MetadataFormats.COMICBOX_JSON,
            MetadataFormats.METRON_INFO,
            MetadataFormats.COMIC_INFO,
            MetadataFormats.FILENAME,
        ),
        from_archive=True,
    )