pyIIIFpres
==========
|Build Status| |Coverage 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.
.. code:: python
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.
:mod:`inspect ` method returns a
JSON representation of the object where the recommended and required fields are
shown:
.. code:: python
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.
.. code:: python
manifest.show_errors_in_browser()
Reading the manifest (experimental)
-----------------------------------
A json file compliant with presentation API3 can be read as follow:
.. code:: python
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.
Acknowledgements
----------------
Bisides contributors, I would like to thank
`dnoneill `__ for suggestions , and IIIF
community and coordinators.
.. |Build Status| image:: https://travis-ci.com/giacomomarchioro/pyIIIFpres.svg?branch=main
:target: https://travis-ci.com/giacomomarchioro/pyIIIFpres
.. |Coverage Status| image:: https://coveralls.io/repos/github/giacomomarchioro/pyIIIFpres/badge.svg?branch=main
:target: https://coveralls.io/github/giacomomarchioro/pyIIIFpres?branch=main