Source code for pain001.__main__
# Other imports remain the same
# pylint: disable=duplicate-code
import sys
from typing import Optional
from rich.console import Console
from pain001.cli.cli import main as cli
from pain001.core.core import process_files
from pain001.validation import ValidationConfig, ValidationService
console = Console()
[docs]
def main(
xml_message_type: Optional[str],
xml_template_file_path: Optional[str],
xsd_schema_file_path: Optional[str],
data_file_path: Optional[str],
dry_run: bool = False,
) -> None:
"""Main entry point for python -m pain001.
Args:
xml_message_type: ISO 20022 message type (e.g., 'pain.001.001.03').
xml_template_file_path: Path to Jinja2 XML template file.
xsd_schema_file_path: Path to XSD schema for validation.
data_file_path: Path to CSV or SQLite data file.
dry_run: If True, validate inputs without generating XML.
Exits:
0 on success, 1 on validation or processing error.
"""
try:
# Check that the required arguments are provided
if not xml_message_type:
console.print(
"The XML message type is required. Use -h for help.\n"
)
sys.exit(1)
if not xml_template_file_path:
console.print("The XML template file path is required.\n")
sys.exit(1)
if not xsd_schema_file_path:
console.print("The XSD schema file path is required.\n")
sys.exit(1)
if not data_file_path:
console.print("The data file path is required.\n")
sys.exit(1)
# Use ValidationService for comprehensive validation
validation_service = ValidationService()
validation_config = ValidationConfig(
xml_message_type=xml_message_type,
xml_template_file_path=xml_template_file_path,
xsd_schema_file_path=xsd_schema_file_path,
data_file_path=data_file_path,
)
report = validation_service.validate_all(validation_config)
if not report.is_valid:
console.print("\n[red]Validation Failed:[/red]")
for error in report.errors:
console.print(f" • {error}")
sys.exit(1)
if dry_run:
console.print(
"[green]✓ Validation succeeded. No XML generated (--dry-run).[/green]"
)
return
process_files(
xml_message_type,
xml_template_file_path,
xsd_schema_file_path,
data_file_path,
)
except Exception as e:
console.print(f"[red]An error occurred: {e}[/red]")
sys.exit(1)
if __name__ == "__main__":
# pylint: disable=no-value-for-parameter
cli()