mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
33b7d52d31
* moving docs to mkdocs * transfering readme to md and more * fixing build * splitting usage.md * improving schema.md and index.md * fix make_history.rst * models intro * working on data conversation and required fields * more fixes to models.md * list all standard types supported * list of pydantic types * tweaks * update links in code * Apply suggestions from code review incorporate @dmontagu's suggestions. Co-Authored-By: dmontagu <35119617+dmontagu@users.noreply.github.com> * Apply suggestions from code review more missed suggestions. Co-Authored-By: dmontagu <35119617+dmontagu@users.noreply.github.com> * Apply suggestions from code review more corrects. * cleanup * Field order warning * fix and regenerate benchmarks * format examples better, cleanup * improve schema mapping table * correct highlighting file types in schema.md * add redirects in javascript * add logo
505 lines
12 KiB
Python
Executable File
505 lines
12 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Build a table of Python / Pydantic to JSON Schema mappings.
|
|
|
|
Done like this rather than as a raw rst table to make future edits easier.
|
|
|
|
Please edit this file directly not .tmp_schema_mappings.html
|
|
"""
|
|
import re
|
|
from pathlib import Path
|
|
|
|
table = [
|
|
[
|
|
'bool',
|
|
'boolean',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'str',
|
|
'string',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'float',
|
|
'number',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'int',
|
|
'integer',
|
|
'',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'dict',
|
|
'object',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'list',
|
|
'array',
|
|
'{"items": {}}',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'tuple',
|
|
'array',
|
|
'{"items": {}}',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'set',
|
|
'array',
|
|
'{"items": {}, {"uniqueItems": true}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'List[str]',
|
|
'array',
|
|
'{"items": {"type": "string"}}',
|
|
'JSON Schema Validation',
|
|
'And equivalently for any other sub type, e.g. `List[int]`.'
|
|
],
|
|
[
|
|
'Tuple[str, int]',
|
|
'array',
|
|
'{"items": [{"type": "string"}, {"type": "integer"}]}',
|
|
'JSON Schema Validation',
|
|
(
|
|
'And equivalently for any other set of subtypes. Note: If using schemas for OpenAPI, '
|
|
'you shouldn\'t use this declaration, as it would not be valid in OpenAPI (although it is '
|
|
'valid in JSON Schema).'
|
|
)
|
|
],
|
|
[
|
|
'Dict[str, int]',
|
|
'object',
|
|
'{"additionalProperties": {"type": "integer"}}',
|
|
'JSON Schema Validation',
|
|
(
|
|
'And equivalently for any other subfields for dicts. Have in mind that although you can use other types as '
|
|
'keys for dicts with Pydantic, only strings are valid keys for JSON, and so, only str is valid as '
|
|
'JSON Schema key types.'
|
|
)
|
|
],
|
|
[
|
|
'Union[str, int]',
|
|
'anyOf',
|
|
'{"anyOf": [{"type": "string"}, {"type": "integer"}]}',
|
|
'JSON Schema Validation',
|
|
'And equivalently for any other subfields for unions.'
|
|
],
|
|
[
|
|
'Enum',
|
|
'enum',
|
|
'{"enum": [...]}',
|
|
'JSON Schema Validation',
|
|
'All the literal values in the enum are included in the definition.'
|
|
],
|
|
[
|
|
'SecretStr',
|
|
'string',
|
|
'{"writeOnly": true}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'SecretBytes',
|
|
'string',
|
|
'{"writeOnly": true}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'EmailStr',
|
|
'string',
|
|
'{"format": "email"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'NameEmail',
|
|
'string',
|
|
'{"format": "name-email"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'AnyUrl',
|
|
'string',
|
|
'{"format": "uri"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'DSN',
|
|
'string',
|
|
'{"format": "dsn"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'bytes',
|
|
'string',
|
|
'{"format": "binary"}',
|
|
'OpenAPI',
|
|
''
|
|
],
|
|
[
|
|
'Decimal',
|
|
'number',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'UUID1',
|
|
'string',
|
|
'{"format": "uuid1"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'UUID3',
|
|
'string',
|
|
'{"format": "uuid3"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'UUID4',
|
|
'string',
|
|
'{"format": "uuid4"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'UUID5',
|
|
'string',
|
|
'{"format": "uuid5"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'UUID',
|
|
'string',
|
|
'{"format": "uuid"}',
|
|
'Pydantic standard "format" extension',
|
|
'Suggested in OpenAPI.'
|
|
],
|
|
[
|
|
'FilePath',
|
|
'string',
|
|
'{"format": "file-path"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'DirectoryPath',
|
|
'string',
|
|
'{"format": "directory-path"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'Path',
|
|
'string',
|
|
'{"format": "path"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'datetime',
|
|
'string',
|
|
'{"format": "date-time"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'date',
|
|
'string',
|
|
'{"format": "date"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'time',
|
|
'string',
|
|
'{"format": "time"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'timedelta',
|
|
'number',
|
|
'{"format": "time-delta"}',
|
|
'Difference in seconds (a `float`), with Pydantic standard "format" extension',
|
|
'Suggested in JSON Schema repository\'s issues by maintainer.'
|
|
],
|
|
[
|
|
'Json',
|
|
'string',
|
|
'{"format": "json-string"}',
|
|
'Pydantic standard "format" extension',
|
|
''
|
|
],
|
|
[
|
|
'IPv4Address',
|
|
'string',
|
|
'{"format": "ipv4"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'IPv6Address',
|
|
'string',
|
|
'{"format": "ipv6"}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'IPvAnyAddress',
|
|
'string',
|
|
'{"format": "ipvanyaddress"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv4 or IPv6 address as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPv4Interface',
|
|
'string',
|
|
'{"format": "ipv4interface"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv4 interface as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPv6Interface',
|
|
'string',
|
|
'{"format": "ipv6interface"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv6 interface as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPvAnyInterface',
|
|
'string',
|
|
'{"format": "ipvanyinterface"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv4 or IPv6 interface as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPv4Network',
|
|
'string',
|
|
'{"format": "ipv4network"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv4 network as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPv6Network',
|
|
'string',
|
|
'{"format": "ipv6network"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv6 network as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'IPvAnyNetwork',
|
|
'string',
|
|
'{"format": "ipvanynetwork"}',
|
|
'Pydantic standard "format" extension',
|
|
'IPv4 or IPv6 network as used in `ipaddress` module',
|
|
],
|
|
[
|
|
'StrictBool',
|
|
'boolean',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'StrictStr',
|
|
'string',
|
|
'',
|
|
'JSON Schema Core',
|
|
''
|
|
],
|
|
[
|
|
'ConstrainedStr',
|
|
'string',
|
|
'',
|
|
'JSON Schema Core',
|
|
(
|
|
'If the type has values declared for the constraints, they are included as validations. '
|
|
'See the mapping for `constr` below.'
|
|
)
|
|
],
|
|
[
|
|
'constr(regex=\'^text$\', min_length=2, max_length=10)',
|
|
'string',
|
|
'{"pattern": "^text$", "minLength": 2, "maxLength": 10}',
|
|
'JSON Schema Validation',
|
|
'Any argument not passed to the function (not defined) will not be included in the schema.'
|
|
],
|
|
[
|
|
'ConstrainedInt',
|
|
'integer',
|
|
'',
|
|
'JSON Schema Core',
|
|
(
|
|
'If the type has values declared for the constraints, they are included as validations. '
|
|
'See the mapping for `conint` below.'
|
|
)
|
|
],
|
|
[
|
|
'conint(gt=1, ge=2, lt=6, le=5, multiple_of=2)',
|
|
'integer',
|
|
'{"maximum": 5, "exclusiveMaximum": 6, "minimum": 2, "exclusiveMinimum": 1, "multipleOf": 2}',
|
|
'',
|
|
'Any argument not passed to the function (not defined) will not be included in the schema.'
|
|
],
|
|
[
|
|
'PositiveInt',
|
|
'integer',
|
|
'{"exclusiveMinimum": 0}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'NegativeInt',
|
|
'integer',
|
|
'{"exclusiveMaximum": 0}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'ConstrainedFloat',
|
|
'number',
|
|
'',
|
|
'JSON Schema Core',
|
|
(
|
|
'If the type has values declared for the constraints, they are included as validations. '
|
|
'See the mapping for `confloat` below.'
|
|
)
|
|
],
|
|
[
|
|
'confloat(gt=1, ge=2, lt=6, le=5, multiple_of=2)',
|
|
'number',
|
|
'{"maximum": 5, "exclusiveMaximum": 6, "minimum": 2, "exclusiveMinimum": 1, "multipleOf": 2}',
|
|
'JSON Schema Validation',
|
|
'Any argument not passed to the function (not defined) will not be included in the schema.'
|
|
],
|
|
[
|
|
'PositiveFloat',
|
|
'number',
|
|
'{"exclusiveMinimum": 0}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'NegativeFloat',
|
|
'number',
|
|
'{"exclusiveMaximum": 0}',
|
|
'JSON Schema Validation',
|
|
''
|
|
],
|
|
[
|
|
'ConstrainedDecimal',
|
|
'number',
|
|
'',
|
|
'JSON Schema Core',
|
|
(
|
|
'If the type has values declared for the constraints, they are included as validations. '
|
|
'See the mapping for `condecimal` below.'
|
|
)
|
|
],
|
|
[
|
|
'condecimal(gt=1, ge=2, lt=6, le=5, multiple_of=2)',
|
|
'number',
|
|
'{"maximum": 5, "exclusiveMaximum": 6, "minimum": 2, "exclusiveMinimum": 1, "multipleOf": 2}',
|
|
'JSON Schema Validation',
|
|
'Any argument not passed to the function (not defined) will not be included in the schema.'
|
|
],
|
|
[
|
|
'BaseModel',
|
|
'object',
|
|
'',
|
|
'JSON Schema Core',
|
|
'All the properties defined will be defined with standard JSON Schema, including submodels.'
|
|
],
|
|
[
|
|
'Color',
|
|
'string',
|
|
'{"format": "color"}',
|
|
'Pydantic standard "format" extension',
|
|
'',
|
|
],
|
|
]
|
|
|
|
headings = [
|
|
'Python type',
|
|
'JSON Schema Type',
|
|
'Additional JSON Schema',
|
|
'Defined in',
|
|
]
|
|
|
|
|
|
def md2html(s):
|
|
return re.sub(r'`(.+?)`', r'<code>\1</code>', s)
|
|
|
|
|
|
def build_schema_mappings():
|
|
rows = []
|
|
|
|
for py_type, json_type, additional, defined_in, notes in table:
|
|
|
|
cols = [
|
|
f'<code>{py_type}</code>',
|
|
f'<code>{json_type}</code>',
|
|
f'<code>{additional}</code>' if additional else '',
|
|
md2html(defined_in)
|
|
]
|
|
rows.append('\n'.join(f' <td>\n {c}\n </td>' for c in cols))
|
|
if notes:
|
|
rows.append(
|
|
f' <td colspan=4 style="border-top: none; padding-top: 0">\n'
|
|
f' <em>{md2html(notes)}</em>\n'
|
|
f' </td>'
|
|
)
|
|
|
|
heading = '\n'.join(f' <th>{h}</th>' for h in headings)
|
|
body = '\n</tr>\n<tr>\n'.join(rows)
|
|
text = f"""\
|
|
<!--
|
|
Generated from docs/build/schema_mapping.py, DO NOT EDIT THIS FILE DIRECTLY.
|
|
Instead edit docs/build/schema_mapping.py and run `make docs`.
|
|
-->
|
|
|
|
<table style="width:100%">
|
|
<thead>
|
|
<tr>
|
|
{heading}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
{body}
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
"""
|
|
(Path(__file__).parent / '..' / '.tmp_schema_mappings.html').write_text(text)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
build_schema_mappings()
|