From 816e3a59d0d8dcfcfd47247175364b05ee974acf Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Wed, 5 Aug 2026 15:33:02 +0800 Subject: [PATCH] refactor: move version checker to metadata --- packer/src/sarasacw_omrf_packer/__init__.py | 32 +++++++++------------ packer/src/sarasacw_omrf_packer/metadata.py | 15 ++++++++-- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/packer/src/sarasacw_omrf_packer/__init__.py b/packer/src/sarasacw_omrf_packer/__init__.py index 2b3d961..cc649e3 100644 --- a/packer/src/sarasacw_omrf_packer/__init__.py +++ b/packer/src/sarasacw_omrf_packer/__init__.py @@ -1,7 +1,6 @@ import logging import sys from pathlib import Path -from .utils import VERSION from .cli import Cli, parse as parse_cli from .artifact import ( ArtifactContext, @@ -22,21 +21,9 @@ class App: def __init__(self, opts: Cli) -> None: # assign cli options self.__opts = opts - # initialize packer - try: - # build essential instances - self.__extractor = MetadataExtractor(self.__opts.manifest) - self.__ctx = ArtifactContext(self.__extractor) - # check version - metadata = self.__ctx.metadata - if metadata.min_version is not None: - if metadata.min_version > VERSION: - raise RuntimeError( - f"requested minimum version is not fulfilled. {metadata.min_version} required got {VERSION}" - ) - except Exception as e: - logging.error(f"fail to initialize packer: %s", e) - sys.exit(1) + # build essential instances + self.__extractor = MetadataExtractor(self.__opts.manifest) + self.__ctx = ArtifactContext(self.__extractor) def run(self) -> None: # create distribution @@ -71,5 +58,14 @@ def main() -> None: # setup logging logging.basicConfig(format="[%(levelname)s] %(message)s", level=logging.INFO) - app = App(opts) - app.run() + # initialize packer and run + try: + app = App(opts) + except Exception as e: + logging.error("fail to initialize packer: %s", e) + sys.exit(1) + try: + app.run() + except Exception as e: + logging.error("packer runtime error: %s", e) + sys.exit(1) diff --git a/packer/src/sarasacw_omrf_packer/metadata.py b/packer/src/sarasacw_omrf_packer/metadata.py index 2a066cc..2366ce6 100644 --- a/packer/src/sarasacw_omrf_packer/metadata.py +++ b/packer/src/sarasacw_omrf_packer/metadata.py @@ -7,7 +7,7 @@ from pathlib import Path from typing import Any, Callable from semver import Version from . import utils -from .utils import dict_chain_get, dict_typed_get, dict_typed_get_required +from .utils import dict_chain_get, dict_typed_get, dict_typed_get_required, VERSION @dataclass(frozen=True) @@ -62,6 +62,15 @@ class Metadata: cmake: MetadataCMake | None pkgconfig: MetadataPkgConfig | None + def __post_init__(self) -> None: + # check version restriction + this_version = self.min_version + if this_version is not None: + if this_version > VERSION: + raise RuntimeError( + f"requested minimum version is not fulfilled. {this_version} required got {VERSION}" + ) + @staticmethod def from_dict(d: dict[str, Any]) -> "Metadata": raw_min_version = dict_typed_get(d, "min_version", str) @@ -192,7 +201,9 @@ class MetadataExtractor: @wrap_metadata_errors def get_target_directory(self) -> Path: """Get the absolute path to directory where Rust target directory is""" - raw_target_directory = dict_typed_get_required(self.__metadata, "target_directory", str) + raw_target_directory = dict_typed_get_required( + self.__metadata, "target_directory", str + ) return Path(raw_target_directory) @wrap_metadata_errors