From e47e36d55c6678932a63e295127b844f817d3948 Mon Sep 17 00:00:00 2001 From: "sascha.koenig" Date: Wed, 18 Feb 2026 09:19:38 +0100 Subject: [PATCH] feat(nix): expose NixOS module and add CLI args for host/port - Expose nixosModules.default in flake outputs for easy import - Add argparse to main.py for --host and --port CLI flags - Support priority: CLI args > env vars > defaults --- flake.nix | 7 +++++-- src/main.py | 24 +++++++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 9fc1b00..664f92f 100644 --- a/flake.nix +++ b/flake.nix @@ -18,8 +18,11 @@ flake-utils, m3ta-nixpkgs, agents, - } @ inputs: - flake-utils.lib.eachDefaultSystem (system: let + }: + { + nixosModules.default = import ./nix/module.nix; + } + // flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; pythonPackages = pkgs.python311Packages; diff --git a/src/main.py b/src/main.py index 765e186..0554505 100644 --- a/src/main.py +++ b/src/main.py @@ -1,8 +1,10 @@ """FastAPI application for ZUGFeRD invoice processing.""" +import argparse import base64 import json import logging +import os from datetime import datetime import uvicorn @@ -147,8 +149,24 @@ async def validate_invoice_endpoint(request: ValidateRequest) -> ValidateRespons def run(host: str = "0.0.0.0", port: int = 5000) -> None: """Run the FastAPI application. + Priority: CLI args > env vars > defaults + Args: - host: Host to bind to. - port: Port to listen on. + host: Host to bind to (default from env HOST or 0.0.0.0). + port: Port to listen on (default from env PORT or 5000). """ - uvicorn.run(app, host=host, port=port) + parser = argparse.ArgumentParser(description="ZUGFeRD REST API Service") + parser.add_argument( + "--host", + default=os.environ.get("HOST", host), + help="Host to bind to (default: 0.0.0.0)", + ) + parser.add_argument( + "--port", + type=int, + default=int(os.environ.get("PORT", port)), + help="Port to listen on (default: 5000)", + ) + args = parser.parse_args() + + uvicorn.run(app, host=args.host, port=args.port)