Skip to content

type_bridge.generator.render.structs

structs

Render struct class definitions from parsed schema.

StructFieldContext dataclass

StructFieldContext(name, python_name, python_type, optional)

Context for rendering a single struct field.

StructContext dataclass

StructContext(class_name, typedb_name, docstring, fields)

Context for rendering a single struct class.

render_structs

render_structs(schema, class_names)

Render the complete structs module source.

Parameters:

Name Type Description Default
schema ParsedSchema

Parsed schema containing struct definitions

required
class_names dict[str, str]

Mapping from TypeDB names to Python class names

required

Returns:

Type Description
str

Complete Python source code for structs.py, or empty string if no structs

Source code in type_bridge/generator/render/structs.py
def render_structs(schema: ParsedSchema, class_names: dict[str, str]) -> str:
    """Render the complete structs module source.

    Args:
        schema: Parsed schema containing struct definitions
        class_names: Mapping from TypeDB names to Python class names

    Returns:
        Complete Python source code for structs.py, or empty string if no structs
    """
    if not schema.structs:
        return ""

    logger.debug(f"Rendering {len(schema.structs)} struct classes")

    imports = _get_required_imports(schema)
    datetime_imports = sorted(imports & {"datetime", "date"})
    decimal_import = "Decimal" in imports

    structs = []
    all_names = []
    for struct_name in sorted(schema.structs.keys()):
        all_names.append(class_names[struct_name])
        structs.append(_build_struct_context(struct_name, schema, class_names))

    template = get_template("structs.py.jinja")
    result = template.render(
        datetime_imports=datetime_imports,
        decimal_import=decimal_import,
        structs=structs,
        all_names=sorted(all_names),
    )

    logger.info(f"Rendered {len(all_names)} struct classes")
    return result