File: patterns.py

package info (click to toggle)
python-apischema 0.18.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,636 kB
  • sloc: python: 15,281; makefile: 3; sh: 2
file content (23 lines) | stat: -rw-r--r-- 789 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from typing import Pattern

from apischema.conversions.conversions import DefaultConversion
from apischema.types import AnyType


def infer_pattern(tp: AnyType, default_conversion: DefaultConversion) -> Pattern:
    from apischema.json_schema.schema import DeserializationSchemaBuilder

    try:
        builder = DeserializationSchemaBuilder(
            False, default_conversion, False, lambda r: r, {}
        )
        prop_schema = builder.visit(tp)
    except RecursionError:
        pass
    else:
        if (
            len(prop_schema.get("patternProperties", {})) == 1
            and "additionalProperties" not in prop_schema
        ):
            return next(iter(prop_schema["patternProperties"]))
    raise TypeError("Cannot inferred pattern from type schema") from None