diff --git a/src/semantic_release/__main__.py b/src/semantic_release/__main__.py index 7ec9adac7..5743bcace 100644 --- a/src/semantic_release/__main__.py +++ b/src/semantic_release/__main__.py @@ -8,6 +8,7 @@ from semantic_release import globals from semantic_release.cli.commands.main import main as cli_main +from semantic_release.enums import SemanticReleaseLogLevels def main() -> None: @@ -18,7 +19,7 @@ def main() -> None: print("\n-- User Abort! --", file=sys.stderr) sys.exit(127) except Exception as err: # noqa: BLE001, graceful error handling across application - if globals.debug: + if globals.log_level <= SemanticReleaseLogLevels.DEBUG: print(f"{err.__class__.__name__}: {err}\n", file=sys.stderr) etype, value, traceback = sys.exc_info() print( @@ -35,9 +36,12 @@ def main() -> None: file=sys.stderr, ) - print(f"::ERROR:: {err}", file=sys.stderr) + print( + str.join("\n", [f"::ERROR:: {line}" for line in str(err).splitlines()]), + file=sys.stderr, + ) - if not globals.debug: + if globals.log_level > SemanticReleaseLogLevels.DEBUG: print( "Run semantic-release in very verbose mode (-vv) to see the full traceback.", file=sys.stderr, diff --git a/src/semantic_release/cli/commands/main.py b/src/semantic_release/cli/commands/main.py index 885898dfb..7f0d170e2 100644 --- a/src/semantic_release/cli/commands/main.py +++ b/src/semantic_release/cli/commands/main.py @@ -116,10 +116,10 @@ def main( SemanticReleaseLogLevels.SILLY, ] - log_level = log_levels[verbosity] + globals.log_level = log_levels[verbosity] logging.basicConfig( - level=log_level, + level=globals.log_level, format=FORMAT, datefmt="[%X]", handlers=[ @@ -130,10 +130,7 @@ def main( ) logger = logging.getLogger(__name__) - logger.debug("logging level set to: %s", logging.getLevelName(log_level)) - - if log_level <= logging.DEBUG: - globals.debug = True + logger.debug("logging level set to: %s", logging.getLevelName(globals.log_level)) if noop: rprint( diff --git a/src/semantic_release/cli/config.py b/src/semantic_release/cli/config.py index 496e97428..721028281 100644 --- a/src/semantic_release/cli/config.py +++ b/src/semantic_release/cli/config.py @@ -665,6 +665,17 @@ def from_raw_config( # noqa: C901 if raw.commit_parser in _known_commit_parsers else dynamic_import(raw.commit_parser) ) + except ValueError as err: + raise ParserLoadError( + str.join( + "\n", + [ + f"Unrecognized commit parser value: {raw.commit_parser!r}.", + str(err), + "Unable to load the given parser! Check your configuration!", + ], + ) + ) from err except ModuleNotFoundError as err: raise ParserLoadError( str.join( diff --git a/src/semantic_release/globals.py b/src/semantic_release/globals.py index 3780b84bb..a0ac61ddb 100644 --- a/src/semantic_release/globals.py +++ b/src/semantic_release/globals.py @@ -2,5 +2,7 @@ from __future__ import annotations -debug: bool = False -"""bool: Enable debug level logging and runtime actions.""" +from semantic_release.enums import SemanticReleaseLogLevels + +log_level: SemanticReleaseLogLevels = SemanticReleaseLogLevels.WARNING +"""int: Logging level for semantic-release""" diff --git a/src/semantic_release/helpers.py b/src/semantic_release/helpers.py index 46358b8d0..5f6723ec4 100644 --- a/src/semantic_release/helpers.py +++ b/src/semantic_release/helpers.py @@ -157,6 +157,12 @@ def dynamic_import(import_path: str) -> Any: Dynamically import an object from a conventionally formatted "module:attribute" string """ + if ":" not in import_path: + raise ValueError( + f"Invalid import path {import_path!r}, must use 'module:Class' format" + ) + + # Split the import path into module and attribute module_name, attr = import_path.split(":", maxsplit=1) # Check if the module is a file path, if it can be resolved and exists on disk then import as a file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy