Source code for monitor_schema.models.utils
"""Common utilities."""
from typing import Any, Dict, Optional
from pydantic import Field, constr
[docs]def anyOf_to_oneOf(schema: Dict[str, Any], field_name: str) -> None:
"""Turn anyOf in JSON schema to oneOf.
onfOf is much stricter and pyDantic doesn't produce this tag. We hijack the JSON schema object to
set this correctly.
See: https://github.com/samuelcolvin/pydantic/issues/656
"""
cfg = schema["properties"].get(field_name)
if cfg is None:
return
if cfg.get('anyOf') is None:
return
cfg["oneOf"] = cfg["anyOf"]
del cfg["anyOf"]
COLUMN_NAME_TYPE = constr(max_length=1000)
METRIC_NAME_STR = constr(max_length=50)
[docs]def duration_field(description: str, title: Optional[str] = None) -> Field: # type: ignore
"""Duration of a field."""
return Field(
None,
title=title,
description=description,
example="PT1H, P1D",
regex="^P(?!$)(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d+[HM])(\\d+H)?(\\d+M)?)?$",
)