from __future__ import annotations
from importlib.metadata import PackageNotFoundError, version
from pyodcs._native import inspect as _inspect
from pyodcs._native import parse_document as _parse_document
from pyodcs._native import parse_path as _parse_path
from pyodcs._native import upstream_spec_version as _upstream_spec_version
from pyodcs._native import validate_contract as _validate_contract
from pyodcs._native import validate_document as _validate_document
UPSTREAM_SPEC_VERSION = _upstream_spec_version()
try:
__version__ = version("pyodcs")
except PackageNotFoundError:
__version__ = "0.2.0"
def parse(content: str | bytes, format: str = "yaml") -> dict:
return _parse_document(content, format)
def parse_file(path: str) -> dict:
return _parse_path(path)
def validate(contract: dict) -> dict:
return _validate_contract(contract)
def validate_result(result: dict) -> dict:
diagnostics = list(result.get("report", {}).get("diagnostics", []))
contract = result.get("contract")
if contract is not None:
validation = _validate_contract(contract)
diagnostics.extend(validation.get("diagnostics", []))
return {"diagnostics": diagnostics}
def parse_and_validate(content: str | bytes, format: str = "yaml") -> dict:
return _validate_document(content, format)
def inspect(contract: dict) -> str:
return _inspect(contract)
def is_valid(report: dict) -> bool:
return not any(
diagnostic.get("severity") == "error"
for diagnostic in report.get("diagnostics", [])
)
__all__ = [
"UPSTREAM_SPEC_VERSION",
"__version__",
"inspect",
"is_valid",
"parse",
"parse_and_validate",
"parse_file",
"validate",
"validate_result",
]