Skip to main content

d42 to JSON-Schema translator and vise versa

Project description

SchemaMaximal

PyPI PyPI - Downloads Python Version

d42 schemas โ‡† JSON Schema

Installation

pip3 install schemax

Usage

Translation

>>> import schemax
>>> from d42 import schema
>>> ExampleSchema = schema.str.len(1, 10)
>>> schemax.to_json_schema(ExampleSchema)
{'type': 'string', 'minLength': 1, 'maxLength': 10}

Also, you could use schemax to translate from JSON-Schema to d42 and generate tests interfaces (in future releases) via command line:

schemax translate schema.json
Translation from JSON-Schema to d42-schema for schema.json:
schema.dict({
    'number': schema.int.min(1),
    optional('street_name'): schema.str,
    ...: ...
})

schema.json:

{
  "type": "object",
  "properties": {
    "number": { "type": "integer", "minimum": 1 },
    "street_name": { "type": "string" }
  },
  "required": ["number"],
  "additionalProperties": true
}

Generation

schemax generate my-schema.yml

This command will generate request and response schemas files, API interface and basic scenarios.

You could add basic url to your API as following: --base-url="http://api.example.com".

Making your schemas and interfaces more "friendly" could --humanize flag.

Using SchemaData object in code

import yaml
from schemax import collect_schema_data, SchemaData 

from typing import List

# Also could be JSON OpenAPI file
with open('my_openapi.yaml') as schema_file:
    raw_schema = yaml.load(schema_file, yaml.FullLoader)
    
    parsed_data: List[SchemaData] = collect_schema_data(raw_schema)
    for item in parsed_data:
        print(item.path)
        print(item.response_schema_d42)
        ...

All the data is stored in SchemaData object, which has the following fields:

  • http_method: HTTP method of the request.
  • path: URL path of the request.
  • converted_path: URL path converted to the camel-case for usage in schemax generation.
  • args: Arguments of the request.
  • queries: Query parameters of the request. Currently unsupported and always '[]'.
  • interface_method: Interface name for usage in schemax generation.
  • interface_method_humanized: Interface 'humanized' name for usage in schemax generation.
  • status: Status code for specified schemas.
  • schema_prefix: Schema prefix name for usage in schemax generation.
  • schema_prefix_humanized: Schema prefix 'humanized' name for user in schemax generation.
  • response_schema: Normalized response schema (without $ref).
  • response_schema_d42: Converted to d42 response_schema.
  • request_schema: Normalized request schema (without $ref).
  • request_schema_d42: Converted to d42 request_schema.
  • tags: Tags of the request from OpenAPI schema.

Supported d42 -> JSON Schema types and features

(โœ… - done; ๐Ÿ”ง - planned support; โŒ - unsupportable)

Supported JSON Schema -> d42 types and features

(โœ… - done; ๐Ÿ”ง - planned support; โŒ - unsupportable)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

schemax-2.1.1.tar.gz (77.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

schemax-2.1.1-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file schemax-2.1.1.tar.gz.

File metadata

  • Download URL: schemax-2.1.1.tar.gz
  • Upload date:
  • Size: 77.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for schemax-2.1.1.tar.gz
Algorithm Hash digest
SHA256 674712478f5c7c2f50bf9a4c8f4838d8b99e390408179c8d153cde38094ffdf2
MD5 fd25c1d74aa5b43bb8e71315e6715525
BLAKE2b-256 ab5a213d349aa8092d81de54c52340b2a46c4d541ae09ddb5ad5acf41812ec00

See more details on using hashes here.

File details

Details for the file schemax-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: schemax-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for schemax-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4626d7da653364f73bffe304f30bac0b8d5185289fdc09f8bcb4f5490da6cfc4
MD5 deb5d59ded3c8892258a936a8ca89b64
BLAKE2b-256 e7f2ac2ef864f513a27282501cc1de27b8ba3d8d2df049d03953aea0c53c23bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page