Skip to main content

pyIIIFpres

Build Status Coverage StatusDocumentation Status

This is a Python module built for easing the construction of JSON manifests compliant with IIIF API 3.0 in a production environment, similarly to iiif-prezi for earlier versions of the protocol.

NOTE: This is NOT a reference implementation. Pull requests and issues are welcome!

Installation

The library uses only standard libraries and can be installed using pip.

Stable version:

pip install pyIIIFpres

Development :

pip install git+https://github.com/giacomomarchioro/pyIIIFpres

Basic usage

The module maps the API structure to Python classes. The user set_ objects that can have only one value (e.g. id) and add_ objects that can have multiple entities (e.g. labels). As an example, we will execute the Simple Manifest - Book recipe from the IIIF cookbook. More examples from the cookbook in the examples folder of this repository.

from IIIFpres import iiifpapi3
iiifpapi3.BASE_URL = "https://iiif.io/api/cookbook/recipe/0009-book-1/"
manifest = iiifpapi3.Manifest()
manifest.set_id(extendbase_url="manifest.json")
manifest.add_label("en","Simple Manifest - Book")
manifest.add_behavior("paged")

#        label       width height id                                                                            service  
data = (("Blank page",3204,4613,"https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18","/full/max/0/default.jpg"),
        ("Frontispiece",3186,4612,"https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19","/full/max/0/default.jpg"),
        ("Title page",3204,4613,"https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20","/full/max/0/default.jpg"),
        ("Blank page",3174,4578,"https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21","/full/max/0/default.jpg"),
        ("Bookplate",3198,4632,"https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22","/full/max/0/default.jpg"),)

for idx,d in enumerate(data):
    idx+=1 
    canvas = manifest.add_canvas_to_items()
    canvas.set_id(extendbase_url="canvas/p%s"%idx) # in this case we use the base url
    canvas.set_height(d[2])
    canvas.set_width(d[1])
    canvas.add_label("en",d[0])
    annopage = canvas.add_annotationpage_to_items()
    annopage.set_id(extendbase_url="page/p%s/1" %idx)
    annotation = annopage.add_annotation_to_items(target=canvas.id)
    annotation.set_id(extendbase_url="annotation/p%s-image"%str(idx).zfill(4))
    annotation.set_motivation("painting")
    annotation.body.set_id("".join(d[3:]))
    annotation.body.set_type("Image")
    annotation.body.set_format("image/jpeg")
    annotation.body.set_width(d[1])
    annotation.body.set_height(d[2])
    s = annotation.body.add_service()
    s.set_id(d[3])
    s.set_type("ImageService3")
    s.set_profile("level1")

manifest.json_save("manifest.json")

Debug the manifest

When you are populating a new IIIF type from scratch some helpful function can be used for spotting errors.

.inspect() method returns a JSON representation of the object where the recommended and required fields are shown:

from IIIFpres import iiifpapi3
manifest = iiifpapi3.Manifest()
manifest.inspect()

.show_errors_in_browser() method open a new browser tab highlighting the required and recommended fields.

manifest.show_errors_in_browser()

Reading the manifest (experimental)

A json file compliant with presentation API3 can be read as follow:

from IIIFpres.utilities import read_API3_json
mymanifest = read_API3_json('manifest.json')

This map Canvas, Annotation and the major IIIF types to iiifpapi3 classes, loading the rests as dicts.

See the project wiki or read the complete documentation on readthedocs.io for information regarding getting image sizes automatically, improve the writing performance and more.

Acknowledgements

Bisides contributors, I would like to thank dnoneill for suggestions , and IIIF community and coordinators.

Metadata

Release files for pyIIIFpres 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyIIIFpres 0.4.0
File Size Uploaded
pyIIIFpres-0.4.0.tar.gz 159.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyIIIFpres 0.4.0
File Interpreter ABI Platform
pyIIIFpres-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 322.7 kB

Release files / pyIIIFpres-0.4.0.tar.gz

Download URL pyIIIFpres-0.4.0.tar.gz
Size 159.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4d8a1cb594addb0c924da8ec0a14287ff50eec3c3c7962614d515d64db657126
BLAKE2b-256 checksum
How to use checksums
a3d383752e63ea1d7cdaae346a80e5fcbc7cad47cfb11ef6b5eee579888257d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/5.1.0 pkginfo/1.5.0.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

Release files / pyIIIFpres-0.4.0-py3-none-any.whl

Download URL pyIIIFpres-0.4.0-py3-none-any.whl
Size 163.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ae3bdbd129d8e79fd4989d139256113e4cd9d25d8f644c659a12a04bb5cfad9
BLAKE2b-256 checksum
How to use checksums
aca92eb2f6365266a044f4691d9b5c9353e8014473ea844c570e97abdf5c744d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/5.1.0 pkginfo/1.5.0.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.2.1

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page