Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/toumorokoshi/jsonschema-extractor

Extract jsonschema from various Python objects
https://github.com/toumorokoshi/jsonschema-extractor

Last synced: about 2 months ago
JSON representation

Extract jsonschema from various Python objects

Awesome Lists containing this project

README

        

====================
jsonschema-extractor
====================

jsonschema-extractor is a library and extensible framework for
extracting `json schema `_ from various object and
primitives.

.. image:: https://github.com/toumorokoshi/jsonschema-extractor/actions/workflows/python-package.yaml/badge.svg
:target: https://github.com/toumorokoshi/jsonschema-extractor/actions/workflows/python-package.yaml

Out of the box support exists for:

- `attrs `_
- `typing `_

-----
Usage
-----

.. code-block:: python

from typing import List
import jsonschema_extractor
assert jsonschema_extractor.extract(List[int]) == {
"type": "array",
"items": {"type": "integer"}
}

-------------
Attrs-example
-------------

.. code-block:: python

import attr
from attr.validators import instance_of
import jsonschema_extractor

@attr.define
class Example(object):
integer: int = attr.field()
foo = attr.field(metadata={"jsonschema": {"type": "string", "format": "uuid"}})
validator_list: List[float] = attr.field()
string: str = attr.field(
default="foo",
metadata={"description": "This is an description."}
)

assert extractor.extract(Example) == {
"type": "object",
"title": "Example",
"properties": {
"string": {"description": "This is an description.", "type": "string"},
"integer": {"type": "integer"},
"validator_list": {"items": {"type": "number"}, "type": "array"},
"foo": {"type": "string", "format": "uuid"},
},
"required": ["integer", "foo", "validator_list"],
}