Source code for finance_enums.schema
"""Schema / reference-data introspection for the enum families.
These helpers expose the canonical enum families (name, variants, and the
Rust/Python/JSON/Arrow/C-ABI binding metadata) as data. The variant records come
from the native extension, so the schema always matches the compiled enum
families exactly.
"""
from __future__ import annotations
import json
from dataclasses import dataclass
from typing import Any
from ._finance_enums import enum_records_raw as _enum_records_raw
__all__ = [
"EnumFamilySchema",
"EnumVariantRecord",
"enum_family_schemas",
"enum_schema",
"enum_schema_json",
"enum_variant_records",
]
_ENUM_SCHEMA_VERSION = 1
[docs]
@dataclass(frozen=True)
class EnumVariantRecord:
enum_name: str
variant: str
ordinal: int
[docs]
@dataclass(frozen=True)
class EnumFamilySchema:
name: str
rust_static: str
python_symbol: str
c_abi_family: str
json_type: str
arrow_type: str
variants: tuple[str, ...]
_ENUM_VARIANT_RECORDS = [EnumVariantRecord(enum_name, variant, ordinal) for enum_name, variant, ordinal in _enum_records_raw()]
[docs]
def enum_variant_records() -> list[EnumVariantRecord]:
return list(_ENUM_VARIANT_RECORDS)
[docs]
def enum_family_schemas() -> list[EnumFamilySchema]:
families: dict[str, list[str]] = {}
for record in _ENUM_VARIANT_RECORDS:
families.setdefault(record.enum_name, []).append(record.variant)
return [
EnumFamilySchema(
name=name,
rust_static=f"{name}_VARIANTS",
python_symbol=name,
c_abi_family=name,
json_type="string",
arrow_type="dictionary<utf8>",
variants=tuple(variants),
)
for name, variants in families.items()
]
def _enum_family_schema_to_dict(schema: EnumFamilySchema) -> dict[str, Any]:
return {
"name": schema.name,
"rust_static": schema.rust_static,
"python_symbol": schema.python_symbol,
"c_abi_family": schema.c_abi_family,
"json_type": schema.json_type,
"arrow_type": schema.arrow_type,
"variants": list(schema.variants),
}
[docs]
def enum_schema() -> dict[str, Any]:
return {
"schema_version": _ENUM_SCHEMA_VERSION,
"exports": {
"rust": "finance_enums::enum_data::enum_family_specs",
"python": "finance_enums.enum_family_schemas",
"json": "finance_enums.enum_schema_json",
"arrow": "dictionary<utf8>",
"c_abi": "finance_enums_enum_export_v1",
},
"families": [_enum_family_schema_to_dict(schema) for schema in enum_family_schemas()],
}
[docs]
def enum_schema_json() -> str:
return json.dumps(enum_schema(), sort_keys=True, separators=(",", ":"))