Skip to main content

Python library for working with IIIF Image and Presentation APIs

Project description

piffle

Python library for generating and parsing IIIF Image API URLs in an object-oriented, pythonic fashion.

unit tests codecov Maintainability

Piffle is tested on Python 3.8—3.12.

Piffle was originally developed by Rebecca Sutton Koeser at Emory University as a part of Readux and forked as a separate project under emory-lits-labs. It was later transferred to Rebecca Sutton Koeser at the Center for Digital Humanities at Princeton.

Installation and example use:

pip install piffle

Example use for generating an IIIF image url:

>>> from piffle.image import IIIFImageClient
>>> myimg = IIIFImageClient('http://image.server/path/', 'myimgid')
>>> print myimg
http://image.server/path/myimgid/full/full/0/default.jpg
>>> print myimg.info()
http://image.server/path/myimgid/info.json"
>>> print myimg.size(width=120).format('png')
http://image.server/path/myimgid/full/120,/0/default.png

Example use for parsing an IIIF image url:

>>> from piffle.image import IIIFImageClient
>>> myimg = IIIFImageClient.init_from_url('http://www.example.org/image-service/abcd1234/full/full/0/default.jpg')
>>> print myimg
http://www.example.org/image-service/abcd1234/full/full/0/default.jpg
>>> print myimg.info()
http://www.example.org/image-service/abcd1234/info.json
>>> myimg.as_dict()['size']['full']
True
>>> myimg.as_dict()['size']['exact']
False
>>> myimg.as_dict()['rotation']['degrees']
0.0

Example use for reading a IIIF manifest:

>>> from piffle.image import IIIFImageClient
>>> from piffle.presentation import IIIFPresentation
>>>  manifest = IIIFPresentation.from_url('https://iiif.bodleian.ox.ac.uk/iiif/manifest/60834383-7146-41ab-bfe1-48ee97bc04be.json')
>>> manifest.label
'Bodleian Library MS. Bodl. 264'
>>> manifest.id
'https://iiif.bodleian.ox.ac.uk/iiif/manifest/60834383-7146-41ab-bfe1-48ee97bc04be.json'
>>> manifest.type
'sc:Manifest'
>>> for canvas in manifest.sequences[0].canvases[:5]:
...     image_id = canvas.images[0].resource.id
...     iiif_img = IIIFImageClient(*image_id.rsplit('/', 1))
...     print(str(iiif_img.size(height=250)))
...
https://iiif.bodleian.ox.ac.uk/iiif/image/90701d49-5e0c-4fb5-9c7d-45af96565468/full/,250/0/default.jpg
https://iiif.bodleian.ox.ac.uk/iiif/image/e878cc78-acd3-43ca-ba6e-90a392f15891/full/,250/0/default.jpg
https://iiif.bodleian.ox.ac.uk/iiif/image/0f1ed064-a972-4215-b884-d8d658acefc5/full/,250/0/default.jpg
https://iiif.bodleian.ox.ac.uk/iiif/image/6fe52b9a-5bb7-4b5b-bbcd-ad0489fcad2a/full/,250/0/default.jpg
https://iiif.bodleian.ox.ac.uk/iiif/image/483ff8ec-347d-4070-8442-dbc15bc7b4de/full/,250/0/default.jpg

Development and Testing

This project uses git-flow branching conventions.

Install locally for development (the use of a python virtualenv is recommended):

pip install -e .

Install test dependencies:

pip install -e ".[dev]"

Run unit tests: py.test or python setup.py test

Install pre-commit hooks

Anyone who wants to contribute to this codebase should install the configured pre-commit hooks:

pre-commit install

This will configure a pre-commit hooks to automatically lint and format python code with ruff and black.

Pre-commit hooks and formatting conventions were added at version 0.5, so git blame may not reflect the true author of a given change. To make git blame more accurate, ignore formatting revisions:

git blame <FILE> --ignore-revs-file .git-blame-ignore-revs

Or configure your git to always ignore styling revision commits:

git config blame.ignoreRevsFile .git-blame-ignore-revs

Publishing python packages

A new python package is automatically built and published to PyPI using a GitHub Actions workflow when a new release is created on GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

piffle-0.5.1.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

piffle-0.5.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file piffle-0.5.1.tar.gz.

File metadata

  • Download URL: piffle-0.5.1.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for piffle-0.5.1.tar.gz
Algorithm Hash digest
SHA256 0ce805536c4baa1e23446b7a1c70158c8fc5b0a85a441ba97e46be848ab1220b
MD5 f98933e15ffadf7feafd811c513eb093
BLAKE2b-256 a93cd2ed674846e606dcc9db11a700efa814d242742240278572bd4af34755ea

See more details on using hashes here.

File details

Details for the file piffle-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: piffle-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for piffle-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb64a8e1e53e538f16d007587e3be3245b08af45f9df2c331c0b02c66ea9d60d
MD5 56c712962b9638f2951792f3da4c2b86
BLAKE2b-256 9bbf7e7e57db64ae19c2498b6137c452ed5ca5c03aef86162c613bd54dfb6fc1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page