API

Example Session:

>>> from etiketti.discover import load_conventions, load_label_context
>>> from etiketti.implementation import cross_correlate, pdf_attributes
2023-01-22T18:06:19.181185+00:00 INFO [pikepdf._qpdf]: pikepdf C++ to Python logger bridge initialized
>>> in_pdf = 'example/deep/render/pdf/this.pdf'
>>> out_pdf = 'labeled.pdf'
>>> cfg_path = 'example/etiketti.yml'
>>> context = load_label_context(cfg_path)
>>> conventions = load_conventions(context, in_pdf)
>>> cross_correlate(source=in_pdf, conventions=conventions, context=context, target=out_pdf)
2023-01-22T18:06:19.251886+00:00 INFO [ETIKETTI]: Retrieving producer information:
2023-01-22T18:06:19.251930+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-01-22T18:06:19.255359+00:00 INFO [ETIKETTI]: producer version banner: (This is LuaHBTeX, Version 1.15.0 (TeX Live 2022))
2023-01-22T18:06:19.262069+00:00 INFO [ETIKETTI]: - noting as: producer_version='lltx-1.15.0-txlv-2022-macos-11.7.2-arm64-arm-64bit'
2023-01-22T18:06:19.262153+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-01-22T18:06:19.266233+00:00 INFO [ETIKETTI]: - BookmatterTexHash -> sha512:2d46ce8e8df5d1e5402a407a4f1da8123d937eeb013c935304a3a50e38a21959462671022385af11bc2ed845ee9217824a3e1fd6c1bc7d4a0241c609e5cdb10b
2023-01-22T18:06:19.266265+00:00 INFO [ETIKETTI]: - DocumentTexHash   -> sha512:ccc6a03dd69b0a1fa0ab809576ea381abbe5879f8c722ae2a5d8598edb043aab5556ba5ed54915e664b2e6383571353cad609c7b1574bc455074c94cefd2cf40
2023-01-22T18:06:19.266281+00:00 INFO [ETIKETTI]: - DriverTexHash     -> sha512:da21513181c651d3faf40b197049bc0ff743e6a385328d50564babebb34fb31f8416ae44c0eb9226df6a4fb68fcc9d549a2b87978a45103490c8b152c3765910
2023-01-22T18:06:19.266294+00:00 INFO [ETIKETTI]: - MetadataTexHash   -> sha512:742504804e06408e1af021525d4d701cd11eadd8163b03109fed9ca80e31b508599facded70f69d553c355e477bcda662a1c6176355f2a04edd6935960f58ab5
2023-01-22T18:06:19.266307+00:00 INFO [ETIKETTI]: - PublisherTexHash  -> sha512:566d2c7775ed5a83876df9135b70f4cfe618656f79837bc15703f0b0ed7f413b1a3b0a76f88755791b1d70bd410812bf31d421fd5c656451da33ee20b4f2245a
2023-01-22T18:06:19.266319+00:00 INFO [ETIKETTI]: - SetupTexHash      -> sha512:8cbb7f0d2b84194348acb85bd632c4389be21827baeabf8453757b1502054779f8fd34d5b2b202d345d659e1b184c9500ad3b9ea7401a969861b8012e26423ba
2023-01-22T18:06:19.266331+00:00 INFO [ETIKETTI]: - ThisTexHash       -> sha512:da21513181c651d3faf40b197049bc0ff743e6a385328d50564babebb34fb31f8416ae44c0eb9226df6a4fb68fcc9d549a2b87978a45103490c8b152c3765910
2023-01-22T18:06:19.280735+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-01-22T18:06:19.280811+00:00 INFO [ETIKETTI]: Patching the timestamps:
2023-01-22T18:06:19.280829+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-01-22T18:06:19.280842+00:00 INFO [ETIKETTI]: exiftool "-CreateDate=2023-01-22 17:53:11" "-ModifyDate=2023-01-22 17:53:11" labeled.pdf ...
2023-01-22T18:06:19.436420+00:00 INFO [ETIKETTI]: timestamp-patch:     1 image files updated
2023-01-22T18:06:19.438490+00:00 INFO [ETIKETTI]: ==> Timestamp patch process (exiftool "-CreateDate=2023-01-22 17:53:11" "-ModifyDate=2023-01-22 17:53:11" labeled.pdf) returned 0
2023-01-22T18:06:19.438528+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>> pdf_attributes(out_pdf)
2023-01-22T18:06:19.439786+00:00 INFO [ETIKETTI]: exiftool labeled.pdf ...
2023-01-22T18:06:19.519213+00:00 INFO [ETIKETTI]: meta-state: ExifTool Version Number         : 12.50
2023-01-22T18:06:19.519401+00:00 INFO [ETIKETTI]: meta-state: File Name                       : labeled.pdf
2023-01-22T18:06:19.519419+00:00 INFO [ETIKETTI]: meta-state: Directory                       : .
2023-01-22T18:06:19.519436+00:00 INFO [ETIKETTI]: meta-state: File Size                       : 46 kB
2023-01-22T18:06:19.519451+00:00 INFO [ETIKETTI]: meta-state: File Modification Date/Time     : 2023:01:22 19:06:19+01:00
2023-01-22T18:06:19.519466+00:00 INFO [ETIKETTI]: meta-state: File Access Date/Time           : 2023:01:22 19:06:19+01:00
2023-01-22T18:06:19.519481+00:00 INFO [ETIKETTI]: meta-state: File Inode Change Date/Time     : 2023:01:22 19:06:19+01:00
2023-01-22T18:06:19.519496+00:00 INFO [ETIKETTI]: meta-state: File Permissions                : -rw-r--r--
2023-01-22T18:06:19.519512+00:00 INFO [ETIKETTI]: meta-state: File Type                       : PDF
2023-01-22T18:06:19.519524+00:00 INFO [ETIKETTI]: meta-state: File Type Extension             : pdf
2023-01-22T18:06:19.519536+00:00 INFO [ETIKETTI]: meta-state: MIME Type                       : application/pdf
2023-01-22T18:06:19.519557+00:00 INFO [ETIKETTI]: meta-state: PDF Version                     : 1.5
2023-01-22T18:06:19.519572+00:00 INFO [ETIKETTI]: meta-state: Linearized                      : No
2023-01-22T18:06:19.519584+00:00 INFO [ETIKETTI]: meta-state: Author                          : An Author
2023-01-22T18:06:19.519596+00:00 INFO [ETIKETTI]: meta-state: Bookmatter Tex Hash             : sha512:2d46ce8e8df5d1e5402a407a4f1da8123d937eeb013c935304a3a50e38a21959462671022385af11bc2ed845ee9217824a3e1fd6c1bc7d4a0241c609e5cdb10b
2023-01-22T18:06:19.519621+00:00 INFO [ETIKETTI]: meta-state: Classification                  : Internal
2023-01-22T18:06:19.519634+00:00 INFO [ETIKETTI]: meta-state: Create Date                     : 2023:01:22 17:53:11
2023-01-22T18:06:19.519645+00:00 INFO [ETIKETTI]: meta-state: Creator                         : liitos 2023.1.21+parent.85ecfd90
2023-01-22T18:06:19.519657+00:00 INFO [ETIKETTI]: meta-state: Document Tex Hash               : sha512:ccc6a03dd69b0a1fa0ab809576ea381abbe5879f8c722ae2a5d8598edb043aab5556ba5ed54915e664b2e6383571353cad609c7b1574bc455074c94cefd2cf40
2023-01-22T18:06:19.519670+00:00 INFO [ETIKETTI]: meta-state: Driver Tex Hash                 : sha512:da21513181c651d3faf40b197049bc0ff743e6a385328d50564babebb34fb31f8416ae44c0eb9226df6a4fb68fcc9d549a2b87978a45103490c8b152c3765910
2023-01-22T18:06:19.519682+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Action Id: a5682b06-8eb6-4865-809e-a16341072c4e
2023-01-22T18:06:19.519694+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Content Bits: 0
2023-01-22T18:06:19.519757+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Enabled: true
2023-01-22T18:06:19.519787+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Method: Privileged
2023-01-22T18:06:19.519803+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Name: Internal
2023-01-22T18:06:19.519818+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Set Date: 2023-01-22T17:53:11Z
2023-01-22T18:06:19.519832+00:00 INFO [ETIKETTI]: meta-state: MSIP Label D9272c 50-c 515-4861-9939-24c 65e 703a 54 Site Id: 199bb307-615a-479c-9793-bae9cca4d8d7
2023-01-22T18:06:19.519845+00:00 INFO [ETIKETTI]: meta-state: Metadata Tex Hash               : sha512:742504804e06408e1af021525d4d701cd11eadd8163b03109fed9ca80e31b508599facded70f69d553c355e477bcda662a1c6176355f2a04edd6935960f58ab5
2023-01-22T18:06:19.519858+00:00 INFO [ETIKETTI]: meta-state: Modify Date                     : 2023:01:22 17:53:11
2023-01-22T18:06:19.519871+00:00 INFO [ETIKETTI]: meta-state: PTEX Full Banner                : cf. pdf.Producer
2023-01-22T18:06:19.519883+00:00 INFO [ETIKETTI]: meta-state: Producer                        : lltx-1.15.0-txlv-2022-macos-11.7.2-arm64-arm-64bit
2023-01-22T18:06:19.519895+00:00 INFO [ETIKETTI]: meta-state: Publisher Tex Hash              : sha512:566d2c7775ed5a83876df9135b70f4cfe618656f79837bc15703f0b0ed7f413b1a3b0a76f88755791b1d70bd410812bf31d421fd5c656451da33ee20b4f2245a
2023-01-22T18:06:19.519907+00:00 INFO [ETIKETTI]: meta-state: Setup Tex Hash                  : sha512:8cbb7f0d2b84194348acb85bd632c4389be21827baeabf8453757b1502054779f8fd34d5b2b202d345d659e1b184c9500ad3b9ea7401a969861b8012e26423ba
2023-01-22T18:06:19.520433+00:00 INFO [ETIKETTI]: meta-state: Subject                         : P99999
2023-01-22T18:06:19.520453+00:00 INFO [ETIKETTI]: meta-state: This Tex Hash                   : sha512:da21513181c651d3faf40b197049bc0ff743e6a385328d50564babebb34fb31f8416ae44c0eb9226df6a4fb68fcc9d549a2b87978a45103490c8b152c3765910
2023-01-22T18:06:19.520467+00:00 INFO [ETIKETTI]: meta-state: Title                           : Ttt Tt Tt
2023-01-22T18:06:19.520479+00:00 INFO [ETIKETTI]: meta-state: Trapped                         : False
2023-01-22T18:06:19.520492+00:00 INFO [ETIKETTI]: meta-state: Unique Identity                 : a4d86ff8-7d3e-4719-9f45-4bb65f471453
2023-01-22T18:06:19.520504+00:00 INFO [ETIKETTI]: meta-state: Page Mode                       : UseOutlines
2023-01-22T18:06:19.520516+00:00 INFO [ETIKETTI]: meta-state: Page Count                      : 10
2023-01-22T18:06:19.520528+00:00 INFO [ETIKETTI]: meta-state: XMP Toolkit                     : Image::ExifTool 12.50
2023-01-22T18:06:19.520570+00:00 INFO [ETIKETTI]: ==> Meta-state process (exiftool labeled.pdf) returned 0
2023-01-22T18:06:19.520586+00:00 INFO [ETIKETTI]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>

Help

The usual help function works as all functions provide docstrings:

>>> import etiketti.implementation
>>> help(etiketti.implementation)
Help on module etiketti.implementation in etiketti:

NAME
    etiketti.implementation - Implementation API for labeling.

FUNCTIONS
    camelize_first_two(dashed_key: str) -> str
        Transform kebab-key-input into KebabKey.

    cross_correlate(source: str | pathlib.Path, conventions: dict[str, pathlib.Path], context: dict[str, dict[str, str]], target: str | pathlib.Path) -> None
        Load information per conventions and mix with source to create target pdf.

    log_subprocess_output(pipe, prefix: str)

    patch(options: argparse.Namespace) -> int
        Patch the two related meta structures of the pdf file

    pdf_attributes(path: str | pathlib.Path) -> None
        Let exiftool assess the attributes.

    pdf_info(path: str | pathlib.Path) -> None
        Let pdfinfo assess some attributes.

    timestamp_patch(create_date: str, modify_date: str, path: str | pathlib.Path) -> None
        Let exiftool patch the time fields.

DATA
    CREATOR_NAME = 'liitos'
    CREATOR_VERSION = '2023.1.21+parent.85ecfd90'
    ContextType = dict[str, dict[str, str]]
    ConventionsType = dict[str, pathlib.Path]
    ENCODING = 'utf-8'
    LOG_SEPARATOR = '- - - - - - - - - - - - - - - - - - - - - - - - ... -...
    PathLike = str | pathlib.Path
    TS_FORMAT_ISO = '%Y-%m-%dT%H:%M:%SZ'
    TS_FORMAT_PATCH = '%Y-%m-%d %H:%M:%S'
    TS_FORMAT_PAYLOADS = '%Y-%m-%d %H:%M:%S.%f UTC'
    log = <Logger ETIKETTI (INFO)>

FILE
    /Users/ruth/d/gh/sha/src/etiketti/etiketti/implementation.py