From c66ca8d726c039441b9628fd3bf5cdff7a8052f9 Mon Sep 17 00:00:00 2001 From: Quratulain-bilal Date: Tue, 4 Aug 2026 01:26:52 +0500 Subject: [PATCH 1/2] fix: replace print() with logger.warning() in presets catalog warning Print to stderr is inappropriate for library code. Replaced with logger.warning() for proper log management. Removed unused sys import. --- src/specify_cli/presets/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/specify_cli/presets/__init__.py b/src/specify_cli/presets/__init__.py index cc5308f3fc..5867541bbb 100644 --- a/src/specify_cli/presets/__init__.py +++ b/src/specify_cli/presets/__init__.py @@ -10,6 +10,7 @@ import copy import json import hashlib +import logging import os import tempfile import shutil @@ -54,6 +55,8 @@ verify_archive_sha256, ) +logger = logging.getLogger(__name__) + _CONSTITUTION_PROVENANCE_FILE = ".constitution-template.json" @@ -4256,18 +4259,15 @@ def get_active_catalogs(self) -> List[PresetCatalogEntry]: Raises: PresetValidationError: If a catalog URL is invalid """ - import sys - # 1. SPECKIT_PRESET_CATALOG_URL env var replaces all defaults if env_value := os.environ.get("SPECKIT_PRESET_CATALOG_URL"): catalog_url = env_value.strip() self._validate_catalog_url(catalog_url) if catalog_url != self.DEFAULT_CATALOG_URL: if not getattr(self, "_non_default_catalog_warning_shown", False): - print( - "Warning: Using non-default preset catalog. " + logger.warning( + "Using non-default preset catalog. " "Only use catalogs from sources you trust.", - file=sys.stderr, ) self._non_default_catalog_warning_shown = True return [PresetCatalogEntry(url=catalog_url, name="custom", priority=1, install_allowed=True, description="Custom catalog via SPECKIT_PRESET_CATALOG_URL")] From 4960e4ee9e1ad48d924cd29cf20e8bd70595d5da Mon Sep 17 00:00:00 2001 From: Quratulain-bilal Date: Fri, 2 Oct 2026 23:10:29 +0500 Subject: [PATCH 2/2] fix(presets): retarget the logger warning after the preset package split presets/__init__.py is now a re-export module, so the branch's conflict resolved to main's version. The non-default catalog warning moved to presets/_catalog.py, where it was still written to stderr with print(); it now logs at WARNING through the module's own logger, and the local sys import it needed is gone. Merging main also dropped the logger definition this branch had added to __init__.py, which nothing imports. Assisted-by: opencode (model: mimo-v2.6-flash-free, autonomous) --- src/specify_cli/presets/_catalog.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/specify_cli/presets/_catalog.py b/src/specify_cli/presets/_catalog.py index a4768cc22d..5d359ab685 100644 --- a/src/specify_cli/presets/_catalog.py +++ b/src/specify_cli/presets/_catalog.py @@ -2,6 +2,7 @@ import hashlib import json +import logging import os import tempfile from dataclasses import dataclass @@ -20,6 +21,8 @@ ) from ._manifest import PresetError, PresetValidationError +logger = logging.getLogger(__name__) + @dataclass class PresetCatalogEntry: @@ -302,18 +305,15 @@ def get_active_catalogs(self) -> List[PresetCatalogEntry]: Raises: PresetValidationError: If a catalog URL is invalid """ - import sys - # 1. SPECKIT_PRESET_CATALOG_URL env var replaces all defaults if env_value := os.environ.get("SPECKIT_PRESET_CATALOG_URL"): catalog_url = env_value.strip() self._validate_catalog_url(catalog_url) if catalog_url != self.DEFAULT_CATALOG_URL: if not getattr(self, "_non_default_catalog_warning_shown", False): - print( - "Warning: Using non-default preset catalog. " - "Only use catalogs from sources you trust.", - file=sys.stderr, + logger.warning( + "Using non-default preset catalog. " + "Only use catalogs from sources you trust." ) self._non_default_catalog_warning_shown = True return [PresetCatalogEntry(url=catalog_url, name="custom", priority=1, install_allowed=True, description="Custom catalog via SPECKIT_PRESET_CATALOG_URL")]