dcclib_cli

adapters

adapt_file_list

adapt_file_list(files) -> TableData

Convert file extraction results to TableData.

adapt_schematron_result

adapt_schematron_result(
    result: SchematronValidationResult, filename: str, elapsed_seconds: float = 0.0
) -> ValidationResultData

Convert SchematronValidationResult to generic ValidationResultData.

For Schematron, the 'test' attribute is a stable XPath expression from the schema and serves as the check id. The same test can fire at multiple locations in the document; these are grouped by id in the JUnit formatter.

adapt_xsd_result

adapt_xsd_result(result: XsdValidationResult, filename: str, elapsed_seconds: float = 0.0) -> ValidationResultData

Convert XsdValidationResult to generic ValidationResultData.

For XSD, each error type (type_name) is used as the stable check id. Multiple errors of the same type are grouped by id in the JUnit formatter.

file_adapter

adapt_file_list

adapt_file_list(files) -> TableData

Convert file extraction results to TableData.

validation_adapter

adapt_schematron_result

adapt_schematron_result(
    result: SchematronValidationResult, filename: str, elapsed_seconds: float = 0.0
) -> ValidationResultData

Convert SchematronValidationResult to generic ValidationResultData.

For Schematron, the 'test' attribute is a stable XPath expression from the schema and serves as the check id. The same test can fire at multiple locations in the document; these are grouped by id in the JUnit formatter.

adapt_xsd_result

adapt_xsd_result(result: XsdValidationResult, filename: str, elapsed_seconds: float = 0.0) -> ValidationResultData

Convert XsdValidationResult to generic ValidationResultData.

For XSD, each error type (type_name) is used as the stable check id. Multiple errors of the same type are grouped by id in the JUnit formatter.

cli

main

main()

Run the CLI and terminate, skipping interpreter shutdown once .NET is loaded.

commands

extract

cmd_formulae

KeyDecimalParamType

Bases: click.ParamType

Custom parameter type for key=decimal_value,decimal_value,... pairs.

validate

cmd_validate

DefaultCommandGroup
DefaultCommandGroup(*args, default_cmd_name: str, **kwargs)

Bases: click.Group

A Click group that dispatches to a default command when no subcommand is matched.

cmd_validate_all

decorators

with_formatter

with_formatter(formats: list[str] | None = None)

Decorator to add --format/-f option and inject formatter into Click context.

This decorator adds a --format option to commands and creates a formatter instance based on the user's choice. The formatter is stored in ctx.obj for the command to use.

Usage::

@click.command()
@with_formatter(formats=["plain", "table", "json", "junit"])
@click.pass_context
def my_command(ctx):
    formatter = ctx.obj["formatter"]
    result = do_work()
    output = formatter.format(result)
    click.echo(output)
Parameters:
  • formats (list[str] | None, default: None ) –

    list of allowed format strings (e.g. ["plain", "table", "json"]). If None, defaults to ["plain", "table", "json"]. Validation commands should explicitly include "junit".

output

with_formatter

with_formatter(formats: list[str] | None = None)

Decorator to add --format/-f option and inject formatter into Click context.

This decorator adds a --format option to commands and creates a formatter instance based on the user's choice. The formatter is stored in ctx.obj for the command to use.

Usage::

@click.command()
@with_formatter(formats=["plain", "table", "json", "junit"])
@click.pass_context
def my_command(ctx):
    formatter = ctx.obj["formatter"]
    result = do_work()
    output = formatter.format(result)
    click.echo(output)
Parameters:
  • formats (list[str] | None, default: None ) –

    list of allowed format strings (e.g. ["plain", "table", "json"]). If None, defaults to ["plain", "table", "json"]. Validation commands should explicitly include "junit".

formatters

BaseFormatter

Bases: ABC

Base class for output formatters with generic dispatch.

format

format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation

format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_formula_evaluation abstractmethod

format_formula_evaluation(data: FormulaEvaluationData) -> str

Format formula evaluation data.

format_signature_verification abstractmethod

format_signature_verification(data: SignatureVerificationData) -> str

Format signature verification data.

format_table abstractmethod

format_table(data: TableData) -> str

Format tabular data.

format_validation abstractmethod

format_validation(data: ValidationResultData) -> str

Format validation results.

JUnitXMLFormatter

Bases: BaseFormatter

JUnit XML formatter compatible with GitLab CI test reports.

GitLab parses the following fields (all others are ignored or optional): testsuites.time → total execution time testsuite.name → internal grouping label testsuite.time → suite execution time testcase.classname → displayed as the suite name in the GitLab UI testcase.name → individual test name (stable check id) testcase.file → file path testcase.time → test execution time in seconds failure / error → element TEXT CONTENT shown as message/stack trace system-out → additional output (not used here)

One per unique check id (stable across runs): - Schematron: id = the 'test' XPath expression from the schema rule. Errors become , warnings , and informational checks a passing testcase with . - XSD: id = error type_name (e.g. SCHEMAV_CVC_PATTERN_VALID). Only failed checks are emitted (XSD provides no passing-check inventory).

When the same check fires at multiple document locations, all locations are consolidated in the // body text so there is exactly one per check id.

format

format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation

format_combined_validation(data: CombinedValidationData) -> str

Combined validation result → one testsuite per sub-result.

format_validation

format_validation(data: ValidationResultData) -> str

Single validation result → one testsuite.

JsonFormatter

Bases: BaseFormatter

Universal JSON formatter for any OutputData.

format

format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

PlainTextFormatter

Bases: BaseFormatter

Plain text formatter without colors or tables.

format

format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation

format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_signature_verification

format_signature_verification(data: SignatureVerificationData) -> str

Format signature verification results as plain text.

format_table

format_table(data: TableData) -> str

Format table as plain text.

format_validation

format_validation(data: ValidationResultData) -> str

Format validation results as plain text.

TableFormatter

Bases: BaseFormatter

Table formatter with colors using Rich.

format

format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation

format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_table

format_table(data: TableData) -> str

Format table with Rich.

format_validation

format_validation(data: ValidationResultData) -> str

Format validation results as a table.

get_formatter

get_formatter(format_type: OutputFormat) -> BaseFormatter

Factory function to get formatter instance.

base

BaseFormatter

Bases: ABC

Base class for output formatters with generic dispatch.

format
format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation
format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_formula_evaluation abstractmethod
format_formula_evaluation(data: FormulaEvaluationData) -> str

Format formula evaluation data.

format_signature_verification abstractmethod
format_signature_verification(data: SignatureVerificationData) -> str

Format signature verification data.

format_table abstractmethod
format_table(data: TableData) -> str

Format tabular data.

format_validation abstractmethod
format_validation(data: ValidationResultData) -> str

Format validation results.

json

CustomEncoder

Bases: json.JSONEncoder

Custom JSON encoder to handle types like datetime.

JsonFormatter

Bases: BaseFormatter

Universal JSON formatter for any OutputData.

format
format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

junit

JUnitXMLFormatter

Bases: BaseFormatter

JUnit XML formatter compatible with GitLab CI test reports.

GitLab parses the following fields (all others are ignored or optional): testsuites.time → total execution time testsuite.name → internal grouping label testsuite.time → suite execution time testcase.classname → displayed as the suite name in the GitLab UI testcase.name → individual test name (stable check id) testcase.file → file path testcase.time → test execution time in seconds failure / error → element TEXT CONTENT shown as message/stack trace system-out → additional output (not used here)

One per unique check id (stable across runs): - Schematron: id = the 'test' XPath expression from the schema rule. Errors become , warnings , and informational checks a passing testcase with . - XSD: id = error type_name (e.g. SCHEMAV_CVC_PATTERN_VALID). Only failed checks are emitted (XSD provides no passing-check inventory).

When the same check fires at multiple document locations, all locations are consolidated in the // body text so there is exactly one per check id.

format
format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation
format_combined_validation(data: CombinedValidationData) -> str

Combined validation result → one testsuite per sub-result.

format_validation
format_validation(data: ValidationResultData) -> str

Single validation result → one testsuite.

plain

PlainTextFormatter

Bases: BaseFormatter

Plain text formatter without colors or tables.

format
format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation
format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_signature_verification
format_signature_verification(data: SignatureVerificationData) -> str

Format signature verification results as plain text.

format_table
format_table(data: TableData) -> str

Format table as plain text.

format_validation
format_validation(data: ValidationResultData) -> str

Format validation results as plain text.

table

TableFormatter

Bases: BaseFormatter

Table formatter with colors using Rich.

format
format(data: OutputData) -> str

Main entry point - dispatches to type-specific methods.

format_combined_validation
format_combined_validation(data: CombinedValidationData) -> str

Format combined validation results - default: format each result separately.

format_table
format_table(data: TableData) -> str

Format table with Rich.

format_validation
format_validation(data: ValidationResultData) -> str

Format validation results as a table.

mcp_server

MCP server exposing the dcclib CLI commands as tools using pycli-mcp.

DccMCPServer

DccMCPServer(cli: click.Group, **kwargs: Any)

Bases: CommandMCPServer

MCP server exposing every CLI command as a tool.

Parameters:
  • cli (click.Group) –

    The root command group.

  • kwargs (Any, default: {} ) –

    Additional settings passed to :class:pycli_mcp.CommandMCPServer.

invoke

invoke(args: list[str]) -> Result

Run the CLI in-process with captured output.

Parameters:
  • args (list[str]) –

    The command line arguments, without the program name.

Returns:
  • Result –

    The captured result of the invocation.

run_stdio

run_stdio() -> None

Serve the MCP server over stdin/stdout.

run_server

run_server(cli: click.Group, transport: Literal['stdio', 'http'], host: str, port: int) -> None

Start the MCP server for cli.

Parameters:
  • cli (click.Group) –

    The root command group.

  • transport (Literal['stdio', 'http']) –

    stdio or http (streamable HTTP served at /mcp).

  • host (str) –

    Host to bind the HTTP server to.

  • port (int) –

    Port to bind the HTTP server to.

models

CombinedValidationData dataclass

CombinedValidationData(filename: str, results: list[ValidationResultData])

Bases: OutputData

Holds multiple validation results for combined XSD + Schematron validation.

FormulaCallResult dataclass

FormulaCallResult(formula: str, inputs: dict[str, Quantity], output: Quantity)

A single evaluation of a formula with its concrete inputs and output.

OutputData dataclass

OutputData()

Bases: ABC

Base class for all output data structures.

accept abstractmethod

accept(formatter: Any) -> str

Accepts a formatter to implement double-dispatch formatting.

Quantity dataclass

Quantity(values: list[Any], unit: str | None = None, uncertainties: list[float] | None = None)

Machine-readable representation of a (possibly unit-aware) value.

SignatureVerificationData dataclass

SignatureVerificationData(
    subject: str,
    issuer: str,
    validity_start: datetime,
    validity_end: datetime,
    serial_number: int,
    signature_algorithm: str,
)

Bases: OutputData

Data representing the result of a signature verification.

TableData dataclass

TableData(columns: list[str], rows: list[dict[str, Any]], title: str | None = None)

Bases: OutputData

Generic table output with rows and columns.

ValidationIssue dataclass

ValidationIssue(id: str, message: str, severity: Severity, location: dict = dict(), metadata: dict = dict())

Base class for validation issues (errors, warnings, info).

ValidationResultData dataclass

ValidationResultData(
    is_valid: bool,
    validation_type: str,
    filename: str,
    issues: list[ValidationIssue],
    passed_checks: list[ValidationIssue] = list(),
    elapsed_seconds: float = 0.0,
)

Bases: OutputData

Generic validation result that works for all validation types.

formula_data

FormulaCallResult dataclass

FormulaCallResult(formula: str, inputs: dict[str, Quantity], output: Quantity)

A single evaluation of a formula with its concrete inputs and output.

Quantity dataclass

Quantity(values: list[Any], unit: str | None = None, uncertainties: list[float] | None = None)

Machine-readable representation of a (possibly unit-aware) value.

output_data

OutputData dataclass

OutputData()

Bases: ABC

Base class for all output data structures.

accept abstractmethod
accept(formatter: Any) -> str

Accepts a formatter to implement double-dispatch formatting.

signature_data

SignatureVerificationData dataclass

SignatureVerificationData(
    subject: str,
    issuer: str,
    validity_start: datetime,
    validity_end: datetime,
    serial_number: int,
    signature_algorithm: str,
)

Bases: OutputData

Data representing the result of a signature verification.

table_data

TableData dataclass

TableData(columns: list[str], rows: list[dict[str, Any]], title: str | None = None)

Bases: OutputData

Generic table output with rows and columns.

validation_data

CombinedValidationData dataclass

CombinedValidationData(filename: str, results: list[ValidationResultData])

Bases: OutputData

Holds multiple validation results for combined XSD + Schematron validation.

ValidationResultData dataclass

ValidationResultData(
    is_valid: bool,
    validation_type: str,
    filename: str,
    issues: list[ValidationIssue],
    passed_checks: list[ValidationIssue] = list(),
    elapsed_seconds: float = 0.0,
)

Bases: OutputData

Generic validation result that works for all validation types.

validation_issue

ValidationIssue dataclass

ValidationIssue(id: str, message: str, severity: Severity, location: dict = dict(), metadata: dict = dict())

Base class for validation issues (errors, warnings, info).