diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-jsonschema2popo2.spec | 625 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 627 insertions, 0 deletions
@@ -0,0 +1 @@ +/JSONSchema2PoPo2-3.0.3.tar.gz diff --git a/python-jsonschema2popo2.spec b/python-jsonschema2popo2.spec new file mode 100644 index 0000000..a56e1f9 --- /dev/null +++ b/python-jsonschema2popo2.spec @@ -0,0 +1,625 @@ +%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/). + +[](https://pypi.org/project/JSONSchema2PoPo2/) [](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/). + +[](https://pypi.org/project/JSONSchema2PoPo2/) [](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/). + +[](https://pypi.org/project/JSONSchema2PoPo2/) [](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 <Python_Bot@openeuler.org> - 3.0.3-1 +- Package Spec generated @@ -0,0 +1 @@ +d0b431559240811ce48b917e659d808a JSONSchema2PoPo2-3.0.3.tar.gz |