%global _empty_manifest_terminate_build 0 Name: python-JSONSchema2PoPo2 Version: 3.0.3 Release: 1 Summary: Converts a JSON Schema to a Plain Old Python Object class License: MIT License URL: https://github.com/mikedombo/JSONSchema2PoPo2 Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e1/a5/bf8b93e6862695a0384a6cbfc392fe9a05c9484f1e1e4dc75601452dc915/JSONSchema2PoPo2-3.0.3.tar.gz BuildArch: noarch Requires: python3-Jinja2 Requires: python3-networkx Requires: python3-jsbeautifier Requires: python3-black %description # JSONSchema2PoPo2 *Forked from [github.com/frx08/jsonschema2popo](https://github.com/frx08/jsonschema2popo)* A converter to extract 'Plain Old Python Object' classes from JSON Schema files. Similar to the Java project [JSONSchema2PoJo](https://github.com/joelittlejohn/jsonschema2pojo/). [![PyPI version](https://badge.fury.io/py/JSONSchema2PoPo2.svg)](https://pypi.org/project/JSONSchema2PoPo2/) [![Python package](https://github.com/MikeDombo/JSONSchema2PoPo2/workflows/Python%20package/badge.svg?branch=master)](https://github.com/MikeDombo/JSONSchema2PoPo2/actions?query=workflow%3A"Python+package") ## Generated Code Compatibility | Language | Feature | Version Compatibility | Reason | | -------- | ------- | --------------------- | ------ | | Python | Basic generation | Any Python | N/A | | Python | Using Enums | \>= Python 3.4 | Uses [Enum](https://docs.python.org/3/library/enum.html) type | | Python | Using Extends | \>= Python 3.0 | Uses new style Python class for inheritance | | Python | Using Types | \>= Python 3.5 | Uses Python [type hints](https://www.python.org/dev/peps/pep-0484/) in code | | | | | JavaScript | Basic Generation | \>= ES2019 (\>= NodeJS 12.x) | Uses ES [classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) and [private fields](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields) | | | | | Go | Basic Generation | Any Go | N/A | ## Installation ``` pip install jsonschema2popo2 ``` ## Usage ### Basic: ``` jsonschema2popo2 -o /path/to/output_file.py /path/to/json_schema.json ``` ### Options: - -o, --output-file - Generated file path. - -jt, --custom-template - Path to custom Jinja template file (relative to CWD). - -t, --use-types - Add MyPy typings. (Python only) - -ct, --constructor-type-check - Validate provided types in constructor. Default only type checks when setting property values and not when setting them in the constructor. (Python and JavaScript only) - -s, --use-slots - Add a `__slots__` to each generated class to be more memory efficient. (Python only) - --no-generate-from-definitions - Don't generate any classes from the "definitions" section of the schema. - --no-generate-from-root-object - Don't generate any classes from the root of the schema. - -tp, --translate-properties - Translate property names to be snake_case. With this enabled, inner classes will no longer be prefixed by "_" since their names won't collide with the property name. - -l, --language - Language to generate in. Choose "python", "js", "go", a python file, or a python module. When using a python file or module, the module must expose `Plugin` as a class which extends and implements `CodeGenPlugin`. - --namespace-path - Namespace path to be prepended to the @memberOf for JSDoc. (JavaScript only) - --package-name - Package name for generated code. Default is "generated". (Go only) - --version - Show the current version number. ### Encode Generated Object to JSON: **Python** ```python import json g = GeneratedClass() json.dumps(g.as_dict()) ``` **JavaScript** ```javascript g = new GeneratedClass(); JSON.stringify(g.asMap()); ``` **Go** ```go g := generated.GeneratedClass{}; str, err := json.Marshal(g) ``` ### Decode JSON into Generated Object: **Python** ```python import json g = GeneratedClass.from_dict(json.loads(data)) ``` **JavaScript** ```javascript const g = GeneratedClass.fromMap(JSON.parse(data)); ``` **Go** ```go var g generated.GeneratedClass err := json.Unmarshal(data, &g) ``` ### JSON Schema Format This library is largely compatible with JSONSchema2PoJo and how that library reads the JSON Schema to generate Java. Specifically, for enumerations, this library supports setting the `javaEnumNames` array in JSON Schema for an enum to give names to the enum values that will be generated in the Python output. If you want to generate an object with a property that accepts any map/dictionary, then simply have `"type": "object"`in the schema and do not add any properties to that definition. In this case, no new class will be generated, instead that property's type will be `dict` in Python, `Object` in JavaScript, and `map[string]interface{}` in Go (`encoding/json` in Go doesn't support `map[interace{}]interface{}`). #### Example JSON Schema Documents **Schema with references and enum** ```json { "definitions": { "Enum1": { "description": "My favorite Enum!", "type": "integer", "enum": [ 1, 2, 3 ], "javaEnumNames": [ "First", "Second", "Third" ] }, "Obj1": { "type": "object", "properties": { "prop1": { "type": "string" }, "prop2": { "$ref": "#/definitions/Enum1" } } }, "Obj2": { "type": "object", "properties": { "obj1": { "$ref": "#/definitions/Obj1" } } } } } ``` #### Generated Documentation When you provide a `"description"` in the JSON Schema, then that description will be applied in docstrings in the generated code. For example, in the example above, the enum will have a docstring which says `My favorite enum!`. You can also choose to add documentation for yourself in the schema document using the `"$comment"` key, which is simply ignored by this tool. In this way, you can have public documentation in the `description`, and anything you want to keep private can go in the `$comment`. ### Customizing Generated Code There are two ways to customize the output code which this project generates: you may use your own code generation template, or you may implement a code generation plugin _and_ code generation template. I would suggest that you go the whole way to implementing a code generation plugin since it isn't much additional work and can give you great benefits. #### Example Code Generation Plugin Take as an example our [builtin Go plugin](https://github.com/MikeDombo/JSONSchema2PoPo2/blob/468ea0881557dd98c831cae173f0bcd2ea73ac72/jsonschema2popo/go/go.py). This plugin is simply a single Python file along with a template file. The Python code implements the `CodeGenPlugin` interface which allows it to add more arguments to the command line options and then make those new values available to the template file. The plugin can also provide more functions to be called from the Jinja template which makes developing a template far simpler. %package -n python3-JSONSchema2PoPo2 Summary: Converts a JSON Schema to a Plain Old Python Object class Provides: python-JSONSchema2PoPo2 BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-JSONSchema2PoPo2 # JSONSchema2PoPo2 *Forked from [github.com/frx08/jsonschema2popo](https://github.com/frx08/jsonschema2popo)* A converter to extract 'Plain Old Python Object' classes from JSON Schema files. Similar to the Java project [JSONSchema2PoJo](https://github.com/joelittlejohn/jsonschema2pojo/). [![PyPI version](https://badge.fury.io/py/JSONSchema2PoPo2.svg)](https://pypi.org/project/JSONSchema2PoPo2/) [![Python package](https://github.com/MikeDombo/JSONSchema2PoPo2/workflows/Python%20package/badge.svg?branch=master)](https://github.com/MikeDombo/JSONSchema2PoPo2/actions?query=workflow%3A"Python+package") ## Generated Code Compatibility | Language | Feature | Version Compatibility | Reason | | -------- | ------- | --------------------- | ------ | | Python | Basic generation | Any Python | N/A | | Python | Using Enums | \>= Python 3.4 | Uses [Enum](https://docs.python.org/3/library/enum.html) type | | Python | Using Extends | \>= Python 3.0 | Uses new style Python class for inheritance | | Python | Using Types | \>= Python 3.5 | Uses Python [type hints](https://www.python.org/dev/peps/pep-0484/) in code | | | | | JavaScript | Basic Generation | \>= ES2019 (\>= NodeJS 12.x) | Uses ES [classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) and [private fields](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields) | | | | | Go | Basic Generation | Any Go | N/A | ## Installation ``` pip install jsonschema2popo2 ``` ## Usage ### Basic: ``` jsonschema2popo2 -o /path/to/output_file.py /path/to/json_schema.json ``` ### Options: - -o, --output-file - Generated file path. - -jt, --custom-template - Path to custom Jinja template file (relative to CWD). - -t, --use-types - Add MyPy typings. (Python only) - -ct, --constructor-type-check - Validate provided types in constructor. Default only type checks when setting property values and not when setting them in the constructor. (Python and JavaScript only) - -s, --use-slots - Add a `__slots__` to each generated class to be more memory efficient. (Python only) - --no-generate-from-definitions - Don't generate any classes from the "definitions" section of the schema. - --no-generate-from-root-object - Don't generate any classes from the root of the schema. - -tp, --translate-properties - Translate property names to be snake_case. With this enabled, inner classes will no longer be prefixed by "_" since their names won't collide with the property name. - -l, --language - Language to generate in. Choose "python", "js", "go", a python file, or a python module. When using a python file or module, the module must expose `Plugin` as a class which extends and implements `CodeGenPlugin`. - --namespace-path - Namespace path to be prepended to the @memberOf for JSDoc. (JavaScript only) - --package-name - Package name for generated code. Default is "generated". (Go only) - --version - Show the current version number. ### Encode Generated Object to JSON: **Python** ```python import json g = GeneratedClass() json.dumps(g.as_dict()) ``` **JavaScript** ```javascript g = new GeneratedClass(); JSON.stringify(g.asMap()); ``` **Go** ```go g := generated.GeneratedClass{}; str, err := json.Marshal(g) ``` ### Decode JSON into Generated Object: **Python** ```python import json g = GeneratedClass.from_dict(json.loads(data)) ``` **JavaScript** ```javascript const g = GeneratedClass.fromMap(JSON.parse(data)); ``` **Go** ```go var g generated.GeneratedClass err := json.Unmarshal(data, &g) ``` ### JSON Schema Format This library is largely compatible with JSONSchema2PoJo and how that library reads the JSON Schema to generate Java. Specifically, for enumerations, this library supports setting the `javaEnumNames` array in JSON Schema for an enum to give names to the enum values that will be generated in the Python output. If you want to generate an object with a property that accepts any map/dictionary, then simply have `"type": "object"`in the schema and do not add any properties to that definition. In this case, no new class will be generated, instead that property's type will be `dict` in Python, `Object` in JavaScript, and `map[string]interface{}` in Go (`encoding/json` in Go doesn't support `map[interace{}]interface{}`). #### Example JSON Schema Documents **Schema with references and enum** ```json { "definitions": { "Enum1": { "description": "My favorite Enum!", "type": "integer", "enum": [ 1, 2, 3 ], "javaEnumNames": [ "First", "Second", "Third" ] }, "Obj1": { "type": "object", "properties": { "prop1": { "type": "string" }, "prop2": { "$ref": "#/definitions/Enum1" } } }, "Obj2": { "type": "object", "properties": { "obj1": { "$ref": "#/definitions/Obj1" } } } } } ``` #### Generated Documentation When you provide a `"description"` in the JSON Schema, then that description will be applied in docstrings in the generated code. For example, in the example above, the enum will have a docstring which says `My favorite enum!`. You can also choose to add documentation for yourself in the schema document using the `"$comment"` key, which is simply ignored by this tool. In this way, you can have public documentation in the `description`, and anything you want to keep private can go in the `$comment`. ### Customizing Generated Code There are two ways to customize the output code which this project generates: you may use your own code generation template, or you may implement a code generation plugin _and_ code generation template. I would suggest that you go the whole way to implementing a code generation plugin since it isn't much additional work and can give you great benefits. #### Example Code Generation Plugin Take as an example our [builtin Go plugin](https://github.com/MikeDombo/JSONSchema2PoPo2/blob/468ea0881557dd98c831cae173f0bcd2ea73ac72/jsonschema2popo/go/go.py). This plugin is simply a single Python file along with a template file. The Python code implements the `CodeGenPlugin` interface which allows it to add more arguments to the command line options and then make those new values available to the template file. The plugin can also provide more functions to be called from the Jinja template which makes developing a template far simpler. %package help Summary: Development documents and examples for JSONSchema2PoPo2 Provides: python3-JSONSchema2PoPo2-doc %description help # JSONSchema2PoPo2 *Forked from [github.com/frx08/jsonschema2popo](https://github.com/frx08/jsonschema2popo)* A converter to extract 'Plain Old Python Object' classes from JSON Schema files. Similar to the Java project [JSONSchema2PoJo](https://github.com/joelittlejohn/jsonschema2pojo/). [![PyPI version](https://badge.fury.io/py/JSONSchema2PoPo2.svg)](https://pypi.org/project/JSONSchema2PoPo2/) [![Python package](https://github.com/MikeDombo/JSONSchema2PoPo2/workflows/Python%20package/badge.svg?branch=master)](https://github.com/MikeDombo/JSONSchema2PoPo2/actions?query=workflow%3A"Python+package") ## Generated Code Compatibility | Language | Feature | Version Compatibility | Reason | | -------- | ------- | --------------------- | ------ | | Python | Basic generation | Any Python | N/A | | Python | Using Enums | \>= Python 3.4 | Uses [Enum](https://docs.python.org/3/library/enum.html) type | | Python | Using Extends | \>= Python 3.0 | Uses new style Python class for inheritance | | Python | Using Types | \>= Python 3.5 | Uses Python [type hints](https://www.python.org/dev/peps/pep-0484/) in code | | | | | JavaScript | Basic Generation | \>= ES2019 (\>= NodeJS 12.x) | Uses ES [classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) and [private fields](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields) | | | | | Go | Basic Generation | Any Go | N/A | ## Installation ``` pip install jsonschema2popo2 ``` ## Usage ### Basic: ``` jsonschema2popo2 -o /path/to/output_file.py /path/to/json_schema.json ``` ### Options: - -o, --output-file - Generated file path. - -jt, --custom-template - Path to custom Jinja template file (relative to CWD). - -t, --use-types - Add MyPy typings. (Python only) - -ct, --constructor-type-check - Validate provided types in constructor. Default only type checks when setting property values and not when setting them in the constructor. (Python and JavaScript only) - -s, --use-slots - Add a `__slots__` to each generated class to be more memory efficient. (Python only) - --no-generate-from-definitions - Don't generate any classes from the "definitions" section of the schema. - --no-generate-from-root-object - Don't generate any classes from the root of the schema. - -tp, --translate-properties - Translate property names to be snake_case. With this enabled, inner classes will no longer be prefixed by "_" since their names won't collide with the property name. - -l, --language - Language to generate in. Choose "python", "js", "go", a python file, or a python module. When using a python file or module, the module must expose `Plugin` as a class which extends and implements `CodeGenPlugin`. - --namespace-path - Namespace path to be prepended to the @memberOf for JSDoc. (JavaScript only) - --package-name - Package name for generated code. Default is "generated". (Go only) - --version - Show the current version number. ### Encode Generated Object to JSON: **Python** ```python import json g = GeneratedClass() json.dumps(g.as_dict()) ``` **JavaScript** ```javascript g = new GeneratedClass(); JSON.stringify(g.asMap()); ``` **Go** ```go g := generated.GeneratedClass{}; str, err := json.Marshal(g) ``` ### Decode JSON into Generated Object: **Python** ```python import json g = GeneratedClass.from_dict(json.loads(data)) ``` **JavaScript** ```javascript const g = GeneratedClass.fromMap(JSON.parse(data)); ``` **Go** ```go var g generated.GeneratedClass err := json.Unmarshal(data, &g) ``` ### JSON Schema Format This library is largely compatible with JSONSchema2PoJo and how that library reads the JSON Schema to generate Java. Specifically, for enumerations, this library supports setting the `javaEnumNames` array in JSON Schema for an enum to give names to the enum values that will be generated in the Python output. If you want to generate an object with a property that accepts any map/dictionary, then simply have `"type": "object"`in the schema and do not add any properties to that definition. In this case, no new class will be generated, instead that property's type will be `dict` in Python, `Object` in JavaScript, and `map[string]interface{}` in Go (`encoding/json` in Go doesn't support `map[interace{}]interface{}`). #### Example JSON Schema Documents **Schema with references and enum** ```json { "definitions": { "Enum1": { "description": "My favorite Enum!", "type": "integer", "enum": [ 1, 2, 3 ], "javaEnumNames": [ "First", "Second", "Third" ] }, "Obj1": { "type": "object", "properties": { "prop1": { "type": "string" }, "prop2": { "$ref": "#/definitions/Enum1" } } }, "Obj2": { "type": "object", "properties": { "obj1": { "$ref": "#/definitions/Obj1" } } } } } ``` #### Generated Documentation When you provide a `"description"` in the JSON Schema, then that description will be applied in docstrings in the generated code. For example, in the example above, the enum will have a docstring which says `My favorite enum!`. You can also choose to add documentation for yourself in the schema document using the `"$comment"` key, which is simply ignored by this tool. In this way, you can have public documentation in the `description`, and anything you want to keep private can go in the `$comment`. ### Customizing Generated Code There are two ways to customize the output code which this project generates: you may use your own code generation template, or you may implement a code generation plugin _and_ code generation template. I would suggest that you go the whole way to implementing a code generation plugin since it isn't much additional work and can give you great benefits. #### Example Code Generation Plugin Take as an example our [builtin Go plugin](https://github.com/MikeDombo/JSONSchema2PoPo2/blob/468ea0881557dd98c831cae173f0bcd2ea73ac72/jsonschema2popo/go/go.py). This plugin is simply a single Python file along with a template file. The Python code implements the `CodeGenPlugin` interface which allows it to add more arguments to the command line options and then make those new values available to the template file. The plugin can also provide more functions to be called from the Jinja template which makes developing a template far simpler. %prep %autosetup -n JSONSchema2PoPo2-3.0.3 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-JSONSchema2PoPo2 -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 3.0.3-1 - Package Spec generated