Metadata-Version: 1.1
Name: jsonschema
Version: 2.5.1
Summary: An implementation of JSON Schema validation for Python
Home-page: http://github.com/Julian/jsonschema
Author: Julian Berman
Author-email: Julian@GrayVines.com
License: MIT
Description: .. image:: https://img.shields.io/pypi/v/jsonschema.svg
            :target: https://pypi.python.org/pypi/jsonschema
        .. image:: https://travis-ci.org/Julian/jsonschema.svg?branch=master
            :target: https://travis-ci.org/Julian/jsonschema
        .. image:: https://img.shields.io/pypi/l/jsonschema.svg
            :target: https://pypi.python.org/pypi/jsonschema
        
        ==========
        jsonschema
        ==========
        
        ``jsonschema`` is an implementation of `JSON Schema <http://json-schema.org>`_
        for Python (supporting 2.6+ including Python 3).
        
        .. code-block:: python
        
            >>> from jsonschema import validate
        
            >>> # A sample schema, like what we'd get from json.load()
            >>> schema = {
            ...     "type" : "object",
            ...     "properties" : {
            ...         "price" : {"type" : "number"},
            ...         "name" : {"type" : "string"},
            ...     },
            ... }
        
            >>> # If no exception is raised by validate(), the instance is valid.
            >>> validate({"name" : "Eggs", "price" : 34.99}, schema)
        
            >>> validate(
            ...     {"name" : "Eggs", "price" : "Invalid"}, schema
            ... )                                   # doctest: +IGNORE_EXCEPTION_DETAIL
            Traceback (most recent call last):
                ...
            ValidationError: 'Invalid' is not of type 'number'
        
        
        Features
        --------
        
        * Full support for
          `Draft 3 <https://python-jsonschema.readthedocs.org/en/latest/validate/#jsonschema.Draft3Validator>`_
          **and** `Draft 4 <https://python-jsonschema.readthedocs.org/en/latest/validate/#jsonschema.Draft4Validator>`_
          of the schema.
        
        * `Lazy validation <https://python-jsonschema.readthedocs.org/en/latest/validate/#jsonschema.IValidator.iter_errors>`_
          that can iteratively report *all* validation errors.
        
        * Small and extensible
        
        * `Programmatic querying <https://python-jsonschema.readthedocs.org/en/latest/errors/#module-jsonschema>`_
          of which properties or items failed validation.
        
        
        Release Notes
        -------------
        
        Version 2.5.0 is mainly a performance release. The interface for `RefResolver`
        was extended to add methods that improve performance on CPython.
        
        Support for custom `RefResolver` objects with the legacy interface should *not*
        be affected. If you notice something amiss please file an issue ticket.
        
        
        Running the Test Suite
        ----------------------
        
        If you have ``tox`` installed (perhaps via ``pip install tox`` or your
        package manager), running``tox`` in the directory of your source checkout will
        run ``jsonschema``'s test suite on all of the versions of Python ``jsonschema``
        supports. Note that you'll need to have all of those versions installed in
        order to run the tests on each of them, otherwise ``tox`` will skip (and fail)
        the tests on that version.
        
        Of course you're also free to just run the tests on a single version with your
        favorite test runner. The tests live in the ``jsonschema.tests`` package.
        
        
        Community
        ---------
        
        There's a `mailing list <https://groups.google.com/forum/#!forum/jsonschema>`_
        for this implementation on Google Groups.
        
        Please join, and feel free to send questions there.
        
        
        Contributing
        ------------
        
        I'm Julian Berman.
        
        ``jsonschema`` is on `GitHub <http://github.com/Julian/jsonschema>`_.
        
        Get in touch, via GitHub or otherwise, if you've got something to contribute,
        it'd be most welcome!
        
        You can also generally find me on Freenode (nick: ``tos9``) in various
        channels, including ``#python``.
        
        If you feel overwhelmingly grateful, you can woo me with beer money on
        `Gittip <https://www.gittip.com/Julian/>`_ or via Google Wallet with the email
        in my GitHub profile.
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
