{ "info": { "author": "Alex Parmentier, Andrew Hankinson", "author_email": "andrew.hankinson@bodleian.ox.ac.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Multimedia :: Graphics :: Presentation", "Topic :: Software Development :: Quality Assurance" ], "description": "Tripoli: IIIF Document Validation\n=================================\n\n.. image:: https://travis-ci.org/DDMAL/tripoli.svg?branch=master\n :target: https://travis-ci.org/DDMAL/tripoli\n\n.. image:: https://coveralls.io/repos/github/DDMAL/tripoli/badge.svg?branch=master\n :target: https://coveralls.io/github/DDMAL/tripoli?branch=master\n\nTripoli is a validator for documents conforming to the `IIIF\npresentation API 2.1 `__. It makes\nit easy to validate documents, apply provider specific heuristics, and\neven correct documents while they are being validated.\n\nDocumentation\n-------------\n\nDetailed documentation is available at\nhttp://tripoli.readthedocs.io/en/latest/\n\nInstallation\n------------\n\nPython 3.5+ is required to run Tripoli. You can install Tripoli using pip.\n\n.. code:: bash\n\n > pip install tripoli\n\nQuick start\n-----------\n\nOnce installed, it's easy to start validating. Tripoli can validate the\nentire document, and will log informative errors and warnings with\nhelpful paths.\n\n.. code:: python\n\n >>> from tripoli import IIIFValidator\n\n >>> iv = IIIFValidator()\n >>> iv.validate(some_manifest)\n Error: Field has no '@language' key where one is required. - data['metadata']['value']\n Error: viewingHint 'pages' is not valid and not uri. - data['sequences']['canvases']['viewingHint']\n Warning: logo SHOULD be IIIF image service. - data['logo']\n Warning: manifest SHOULD have thumbnail field. - data['thumbnail']\n Warning: Unknown key 'see_also' in 'manifest' - data['see_also']\n Warning: ImageResource SHOULD have @id field. - data['sequences']['canvases']['images']['@id']\n\n\n.. :changelog:\n\nRelease History\n---------------\n\n2.0.0 (2018-02-22)\n++++++++++++++++++\n\nTripoli v2.0.0 is functionally equivalent to v1.2.2. The major version number is being incremented\nto mirror the IIIF Presentation API version it supports. Tripoli v3 will only support Presentation\nAPI v3.\n\n\n1.2.1 (2017-10-11) / 1.2.2\n++++++++++++++++++\n\n**Improvements**\n\n- Unit testing improvements and enhanced coverage\n- Enhanced testing fixtures\n- Travis-CI builds and Coveralls integration\n\n**Bugfixes**\n\n- Multiple sequences are now correctly validated.\n- Canvas images are more thoroughly checked for their values.\n\nNB: 1.2.2 is the same as 1.2.1, but incremented to try and address an issue with\ndistributing via PyPI.\n\n\n1.2.0 (2017-05-04)\n++++++++++++++++++\n\n**Improvements**\n\n- Configuration arguments for the basic IIIFValidator can now be passed in via kwargs\n on the `__init__` function. A validator can now be instantiated with all its settings\n in one line.\n\n**Bugfixes**\n\n- Web interface now specifically mentions that tripoli is for validating IIIF Manifests.\n\n1.1.4 (2016-08-23)\n++++++++++++++++++\n\n**Bugfixes**\n\n- Fixed an issue with the default values of REQUIRED_FIELDS (and other field sets)\n being empty dicts instead of empty sets.\n\n1.1.3 (2016-08-23)\n++++++++++++++++++\n\n**Bugfixes**\n\n- A warning message regarding uncertain HTML tags has been fixed to include the name\n of the tag.\n\n1.1.2 (2016-08-22)\n++++++++++++++++++\n\n**Improvements**\n\n- Added IIIF manifest test suite to tests, ensuring that each throws an error. A\n number of new errors and warning have been added to this end.\n- Faster hash algorithms for ValidatorLogEntries increasing overall performance.\n- Added HISTORY.rst to track bugfixes and improvements.\n- README.rst and HISTORY.rst will be automatically read into the setup.py long_description\n field (idea taken from requests).\n\n**Bugfixes**\n\n- ``ViewingHint`` is now a common field which can be checked on any resource.\n- ``startCanvas`` is now validated properly.\n- ``Annotation`` no longer logs a warning if it has a ``@context`` field.\n- ``ImageResource`` now must have ``@type`` 'dctypes:Image'.\n- Presence of XML Comments or CDATA sections will cause an error to be logged.\n- Fixed exception when ``IIIFValidator`` could not discern the ``@type`` of a resource.\n\n\n1.1.1 (2016-08-18)\n++++++++++++++++++\n\n**Bugfixes**\n\n- A bug was preventing ``descriptions`` from being validated in all resources.\n This has been fixed.\n\n1.1 (2016-08-18)\n++++++++++++++++\n\n**New Features**\n\n- Added HTML validation. This will check that only fields which are allowed\n to contain HTML have it, that the HTML is valid, and that only allowed tags\n and attributes are included.\n- Added indices in error and message paths. These indices make it easier to\n figure out exactly which canvas is failing with an error (if indeed only a\n few are failing).\n- Added unique/non unique error aggregation. Using a ``unique_logging` property\n on a ``IIIFValidator``, users can decide whether all errors and warnings will be\n aggregated, or only unique ones. Here, unique means that only one instance of\n each error/warning per resource will be saved (that is, if every canvas has error\n A, then only the first instance of a canvas with error A will be saved).\n- Added ``verbose`` property to ``IIIFValidatior``. When ``True``, every error and\n warning will be logged immediatly to the screen when hit.\n\n**Bugfixes**\n\n- ``Annotations`` no longer log a warning when they are missing an ``@id`` field.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/DDMAL/tripoli/tarball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DDMAL/tripoli", "keywords": "validator,IIIF", "license": "https://opensource.org/licenses/MIT", "maintainer": "", "maintainer_email": "", "name": "tripoli", "package_url": "https://pypi.org/project/tripoli/", "platform": "", "project_url": "https://pypi.org/project/tripoli/", "project_urls": { "Download": "https://github.com/DDMAL/tripoli/tarball/master", "Homepage": "https://github.com/DDMAL/tripoli" }, "release_url": "https://pypi.org/project/tripoli/2.0.0/", "requires_dist": [ "defusedxml" ], "requires_python": ">=3.5", "summary": "IIIF Presentation API validation.", "version": "2.0.0" }, "last_serial": 3605852, "releases": { "1.0": [], "1.0.1": [], "1.0.2": [ { "comment_text": "", "digests": { "md5": "524c2bd4cd4edef01fbb95b3167d9656", "sha256": "64e7c8e15630c4fc71a09a2bf979016a4cb9c71de7e7570ad7dfb48260e14ed8" }, "downloads": -1, "filename": "tripoli-1.0.2.tar.gz", "has_sig": false, "md5_digest": "524c2bd4cd4edef01fbb95b3167d9656", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13091, "upload_time": "2016-07-25T14:00:19", "url": "https://files.pythonhosted.org/packages/35/89/ec6b2fe453cd305f4e9943e3e1e1dac25a5205b5b5fe788517c16c91aab7/tripoli-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "263ae6701c359f50f3e3409adae01ea5", "sha256": "f35b9d2bd559b2c4d6259e6ffa838f592b95226a251fe7d8fde4cd7454054945" }, "downloads": -1, "filename": "tripoli-1.0.3.tar.gz", "has_sig": false, "md5_digest": "263ae6701c359f50f3e3409adae01ea5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13435, "upload_time": "2016-07-25T18:24:47", "url": "https://files.pythonhosted.org/packages/b6/fe/c53dadb44ba9e9adf574394d9bcaa90792a257c39da4e1913f375e07e21b/tripoli-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "d057a2f9ee1ed0fee9586bdfba72afc6", "sha256": "a2ea12397f8c093a2d1efe4261cd713cb7011e2dec505165695580d82fc06cb9" }, "downloads": -1, "filename": "tripoli-1.0.4.tar.gz", "has_sig": false, "md5_digest": "d057a2f9ee1ed0fee9586bdfba72afc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13507, "upload_time": "2016-07-25T19:49:54", "url": "https://files.pythonhosted.org/packages/db/5c/27c0371a60b69d498e6a8dec25263a88930a57f5a3e75300b559ad121f79/tripoli-1.0.4.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "3c1db902d373b85d3586a84e0b8d51eb", "sha256": "7a15f7ff8e92355165dd546306afb195f7edb7e26f5a43116aa815627c0a125c" }, "downloads": -1, "filename": "tripoli-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3c1db902d373b85d3586a84e0b8d51eb", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 28750, "upload_time": "2016-08-18T16:08:56", "url": "https://files.pythonhosted.org/packages/62/44/277afa08722d9bfed9107135d2705fa0e7cf8cb28899aa8a15914e59a90c/tripoli-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8dc6bd072cf48d052f88416e62f7e367", "sha256": "2f36d2e9dd179a4bc2b00ee0a91d2053fd9864ff76b01b0b6cf8a5feb8e196d8" }, "downloads": -1, "filename": "tripoli-1.1.tar.gz", "has_sig": false, "md5_digest": "8dc6bd072cf48d052f88416e62f7e367", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17009, "upload_time": "2016-08-18T16:08:54", "url": "https://files.pythonhosted.org/packages/39/59/79ab1907bb862809904add3261a24e2f547399612ed6cafe585ee15f3ccd/tripoli-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "f8f4fc805ddd63c2900cbf8d8da9cd14", "sha256": "b57cf0200ab7420c72ba8ef26ab8f1fabd17e8c6caa67f2ee0a680578f906efd" }, "downloads": -1, "filename": "tripoli-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f8f4fc805ddd63c2900cbf8d8da9cd14", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 28775, "upload_time": "2016-08-18T16:28:16", "url": "https://files.pythonhosted.org/packages/72/e1/3338278ec29b7b68b13aa3ee044fe6b3cbfacc8d31d30ed1b35718df75a2/tripoli-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd1313ad94bbaf064935060ebad7632e", "sha256": "6f79d7ad64b2ca0353dd460155ae2c808c3c4d2ae40d2239a1d09ce0c3ac8ece" }, "downloads": -1, "filename": "tripoli-1.1.1.tar.gz", "has_sig": false, "md5_digest": "cd1313ad94bbaf064935060ebad7632e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17023, "upload_time": "2016-08-18T16:28:13", "url": "https://files.pythonhosted.org/packages/35/1b/7f201db5b246159f48027ed6773a9392757826f3e228861dd07d66421545/tripoli-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "38fe0bfdb227b28edc369820430d4fa5", "sha256": "48f71360cf9abc4d388e57f863de8972b5880df12958d375d13d60c45eb93953" }, "downloads": -1, "filename": "tripoli-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "38fe0bfdb227b28edc369820430d4fa5", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 33164, "upload_time": "2016-08-22T14:11:23", "url": "https://files.pythonhosted.org/packages/1c/c4/2aa30ca69ff76f22d96b0e76e6037069a99e60e2af4eb4de79f98acd85ae/tripoli-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae77a4727a841233dae9bcadc1baa37c", "sha256": "eeadd317ba38cf846ba3bbfdde8689b4e2b2551460e5047dabdbdcebb206f039" }, "downloads": -1, "filename": "tripoli-1.1.2.tar.gz", "has_sig": false, "md5_digest": "ae77a4727a841233dae9bcadc1baa37c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19483, "upload_time": "2016-08-22T14:11:20", "url": "https://files.pythonhosted.org/packages/75/1f/0a695596156cf879c35b461a91d1963bfe4465eb4827896dcf8a5e46e7e0/tripoli-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "43529a1adbe76f2bacbb039437c8802a", "sha256": "8b5e05c8ec477f12250b5de1e83c0007a61d7d9309db14781eec471bcd21592a" }, "downloads": -1, "filename": "tripoli-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "43529a1adbe76f2bacbb039437c8802a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 33270, "upload_time": "2016-08-23T13:14:42", "url": "https://files.pythonhosted.org/packages/2b/7d/7282dfb61de6e46f94ba0d82cb90e39eb5903656c37b0db4a7b78699774a/tripoli-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "109844c7a44ded55a4e98303e7d42202", "sha256": "87dad6f89cebd1d49046a3f350bdd81834f571aa2ad65f8a9f19b497421724b1" }, "downloads": -1, "filename": "tripoli-1.1.3.tar.gz", "has_sig": false, "md5_digest": "109844c7a44ded55a4e98303e7d42202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19547, "upload_time": "2016-08-23T13:14:40", "url": "https://files.pythonhosted.org/packages/fd/b5/0667338e653ece1e24702268366501f830b69abf747f74d3651f9fdfa911/tripoli-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "98a9aaa56573e4d2bf48419dac2f0d0d", "sha256": "b918c0cd342c9311a01c018108f1b94094a8eeb0daa0fc4315d49f4869576f3e" }, "downloads": -1, "filename": "tripoli-1.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "98a9aaa56573e4d2bf48419dac2f0d0d", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 33447, "upload_time": "2016-08-23T15:32:06", "url": "https://files.pythonhosted.org/packages/3e/88/7517d5ad1cd7ce2ef7bbc446b7e9d43fa008eb19d0aec90537d586681daa/tripoli-1.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5bc0d4dcf167155e39f76c691ce1bf25", "sha256": "4db5e8b2cfabefe481b939b70eed8867735ef0aa962628f140694fafc8900d26" }, "downloads": -1, "filename": "tripoli-1.1.4.tar.gz", "has_sig": false, "md5_digest": "5bc0d4dcf167155e39f76c691ce1bf25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19640, "upload_time": "2016-08-23T15:32:04", "url": "https://files.pythonhosted.org/packages/2b/83/3921b3784f0ca2c08bb77c350099ca34c5a7204b6bd8b1fbf2d37a330d3e/tripoli-1.1.4.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1cd23eb26beb4fa862ac3a1b7fa13357", "sha256": "5c0fdfb4ac227ea0607601d607efd215e50784e9277bbcfcbf61733f10345122" }, "downloads": -1, "filename": "tripoli-1.2.0-py3.6.egg", "has_sig": false, "md5_digest": "1cd23eb26beb4fa862ac3a1b7fa13357", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 66195, "upload_time": "2017-10-14T17:14:37", "url": "https://files.pythonhosted.org/packages/c6/e6/88fdefd49daabd9ff80a3eb0cb4ff033ebc5b113d00461408feadf3b96c5/tripoli-1.2.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "91702ac4639662ed67231b5e0b714551", "sha256": "74991f530a5840eb390f01a25e4eca5de8de85077e38e88668bbd756b7cd4d26" }, "downloads": -1, "filename": "tripoli-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "91702ac4639662ed67231b5e0b714551", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 33947, "upload_time": "2017-05-05T14:35:47", "url": "https://files.pythonhosted.org/packages/fd/1d/209792ea4d00073b7d30e3036ec5ab61f2641ddd7ff98f3cac68e14e7d68/tripoli-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1862910bf17c27a958902a9bceff6c5b", "sha256": "e027e978e04d6aba5a79304994e52aa3045dfdf1124a9bec79d94796eea33b7d" }, "downloads": -1, "filename": "tripoli-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1862910bf17c27a958902a9bceff6c5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20048, "upload_time": "2017-05-05T14:35:45", "url": "https://files.pythonhosted.org/packages/e9/7f/b4d6c862a5249c0fa752573460efc6198ccbb0e9627f73f41f5dd1f89f4b/tripoli-1.2.0.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "a86092541488d87c891f0c9392bf56a6", "sha256": "ba3be84037bf32cd5d455ceaddafae76284ecf26cfd6131e6d567b44349a04da" }, "downloads": -1, "filename": "tripoli-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a86092541488d87c891f0c9392bf56a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35126, "upload_time": "2017-10-16T09:45:43", "url": "https://files.pythonhosted.org/packages/e6/a7/b480d8ece7d7babbcc7236ef53c164cea55aba865092e48db69b8d642ec8/tripoli-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a23423379acaa546243ba971db505a81", "sha256": "3be414e868055b0be9d84a35c2a13e51ff74499fa78270d495a432574e58c284" }, "downloads": -1, "filename": "tripoli-1.2.2.tar.gz", "has_sig": false, "md5_digest": "a23423379acaa546243ba971db505a81", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 21574, "upload_time": "2017-10-16T09:45:44", "url": "https://files.pythonhosted.org/packages/b3/38/40c79c5ff45b6b66c3e3047021b11cc7bddb8d89e9990c0352c13b313d89/tripoli-1.2.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f34c8d8650eb6ac033ec73ba4c97d572", "sha256": "b85ad96e7ed0233779142c9464a973df4018bd9cb3eec2c8629cd6a2c6ff45a4" }, "downloads": -1, "filename": "tripoli-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f34c8d8650eb6ac033ec73ba4c97d572", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35349, "upload_time": "2018-02-22T15:52:54", "url": "https://files.pythonhosted.org/packages/90/fd/062d49fc455bd398234163c3c2d6b0c914f5737fd2b654d8e98b5bd0548a/tripoli-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80b177f8fdfbba201485b6c706f63e42", "sha256": "6af87e1becf66b2b28b2fed0b4dec95366ca5875f9172a196898e56f4a68445b" }, "downloads": -1, "filename": "tripoli-2.0.0.tar.gz", "has_sig": false, "md5_digest": "80b177f8fdfbba201485b6c706f63e42", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 21687, "upload_time": "2018-02-22T15:57:46", "url": "https://files.pythonhosted.org/packages/23/5a/c5309d6b0ed239927885cec32e6e66cc15dfacffc2df1958a3b7f09c788a/tripoli-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f34c8d8650eb6ac033ec73ba4c97d572", "sha256": "b85ad96e7ed0233779142c9464a973df4018bd9cb3eec2c8629cd6a2c6ff45a4" }, "downloads": -1, "filename": "tripoli-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f34c8d8650eb6ac033ec73ba4c97d572", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 35349, "upload_time": "2018-02-22T15:52:54", "url": "https://files.pythonhosted.org/packages/90/fd/062d49fc455bd398234163c3c2d6b0c914f5737fd2b654d8e98b5bd0548a/tripoli-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80b177f8fdfbba201485b6c706f63e42", "sha256": "6af87e1becf66b2b28b2fed0b4dec95366ca5875f9172a196898e56f4a68445b" }, "downloads": -1, "filename": "tripoli-2.0.0.tar.gz", "has_sig": false, "md5_digest": "80b177f8fdfbba201485b6c706f63e42", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 21687, "upload_time": "2018-02-22T15:57:46", "url": "https://files.pythonhosted.org/packages/23/5a/c5309d6b0ed239927885cec32e6e66cc15dfacffc2df1958a3b7f09c788a/tripoli-2.0.0.tar.gz" } ] }