Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-textX for openSUSE:Factory checked in at 2025-05-13 20:07:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-textX (Old) and /work/SRC/openSUSE:Factory/.python-textX.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-textX" Tue May 13 20:07:02 2025 rev:20 rq:1277023 version:4.2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-textX/python-textX.changes 2024-10-30 17:37:03.322839759 +0100 +++ /work/SRC/openSUSE:Factory/.python-textX.new.30101/python-textX.changes 2025-05-13 20:07:11.719185430 +0200 @@ -1,0 +2,16 @@ +Tue May 13 06:47:45 UTC 2025 - Sebastian Wagner <se...@sebix.at> + +- limit check to tests/functional as upstream does +- update to version 4.2.2: + - Fixed: + - tests for subcommands. Click 8.2.0 now returns exit code 2 when command is not + correct. See [433]. +- update to version 4.2.1: + - Fixed: + - regression where textx generate/check command didn't report location info. + - removed encoding of unicode strings in textx exceptions. +- update to version 4.2.0: + - Changed: + - Moved from click.echo to logging. + +------------------------------------------------------------------- Old: ---- python-textX-4.1.0.tar.gz New: ---- python-textX-4.2.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-textX.spec ++++++ --- /var/tmp/diff_new_pack.FLXhts/_old 2025-05-13 20:07:12.975238272 +0200 +++ /var/tmp/diff_new_pack.FLXhts/_new 2025-05-13 20:07:12.975238272 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-textX # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: python-textX -Version: 4.1.0 +Version: 4.2.2 Release: 0 Summary: Meta-language for DSL implementation inspired by Xtext License: MIT @@ -87,7 +87,7 @@ %check export LC_ALL=C.UTF-8 export PYTHONPATH=$(ls -1d tmp-modules/usr/lib/python3.*/site-packages) -%pytest +%pytest tests/functional %post %python_install_alternative textx ++++++ python-textX-4.1.0.tar.gz -> python-textX-4.2.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/.github/workflows/tests.yml new/textX-4.2.2/.github/workflows/tests.yml --- old/textX-4.1.0/.github/workflows/tests.yml 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/.github/workflows/tests.yml 2025-05-11 11:05:11.000000000 +0200 @@ -13,7 +13,7 @@ jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/CHANGELOG.md new/textX-4.2.2/CHANGELOG.md --- old/textX-4.1.0/CHANGELOG.md 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/CHANGELOG.md 2025-05-11 11:05:11.000000000 +0200 @@ -15,6 +15,28 @@ ## [Unreleased] +## [4.2.2] (released: 2025-05-11) + +### Fixed +- tests for subcommands. Click 8.2.0 now returns exit code 2 when command is not + correct. See [433]. Thanks @mgorny for the report. + +[433]: https://github.com/textX/textX/issues/433 + + +## [4.2.1] (released: 2025-05-09) + +### Fixed +- regression where textx generate/check command didn't report location info. +- removed encoding of unicode strings in textx exceptions. + + +## [4.2.0] (released: 2025-05-08) + +### Changed +- Moved from click.echo to logging. + + ## [4.1.0] (released: 2024-10-26) ### Added @@ -741,7 +763,9 @@ [#92]: https://github.com/textX/textX/pull/92 [#40]: https://github.com/textX/textX/issues/40 -[Unreleased]: https://github.com/textX/textX/compare/4.1.0...HEAD +[Unreleased]: https://github.com/textX/textX/compare/4.2.1...HEAD +[4.2.1]: https://github.com/textX/textX/compare/4.2.0...4.2.1 +[4.2.0]: https://github.com/textX/textX/compare/4.1.0...4.2.0 [4.1.0]: https://github.com/textX/textX/compare/4.0.1...4.1.0 [4.0.1]: https://github.com/textX/textX/compare/4.0.0...4.0.1 [4.0.0]: https://github.com/textX/textX/compare/3.1.1...4.0.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/docs/src/tutorials/entity/srcgen.py new/textX-4.2.2/docs/src/tutorials/entity/srcgen.py --- old/textX-4.1.0/docs/src/tutorials/entity/srcgen.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/docs/src/tutorials/entity/srcgen.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,6 +1,8 @@ from os import mkdir -from os.path import exists, dirname, join +from os.path import dirname, exists, join + import jinja2 + from textx import metamodel_from_file this_folder = dirname(__file__) @@ -68,7 +70,7 @@ for entity in person_model.entities: # For each entity generate java file with open(join(srcgen_folder, - "%s.java" % entity.name.capitalize()), 'w') as f: + f"{entity.name.capitalize()}.java"), 'w') as f: f.write(template.render(entity=entity)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/pyproject.toml new/textX-4.2.2/pyproject.toml --- old/textX-4.1.0/pyproject.toml 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/pyproject.toml 2025-05-11 11:05:11.000000000 +0200 @@ -1,7 +1,7 @@ [project] name = "textX" -version = "4.1.0" description = "Meta-language for DSL implementation inspired by Xtext" +dynamic = ["version"] authors = [ {name = "Igor R. Dejanović", email = "igor.dejano...@gmail.com"}, {name = "Pierre Bayerl", email = "noem...@nowhere.com"}, @@ -63,7 +63,6 @@ "click >=7.0, <9.0", "ruff", "flit", - "mike", ] test = [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/conftest.py new/textX-4.2.2/tests/functional/conftest.py --- old/textX-4.1.0/tests/functional/conftest.py 1970-01-01 01:00:00.000000000 +0100 +++ new/textX-4.2.2/tests/functional/conftest.py 2025-05-11 11:05:11.000000000 +0200 @@ -0,0 +1,3 @@ +import logging + +logging.basicConfig(level=logging.INFO) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/projects/flow_codegen/flow_codegen/generators.py new/textX-4.2.2/tests/functional/registration/projects/flow_codegen/flow_codegen/generators.py --- old/textX-4.1.0/tests/functional/registration/projects/flow_codegen/flow_codegen/generators.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/projects/flow_codegen/flow_codegen/generators.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,9 +1,10 @@ +import logging import os -import click - from textx import GeneratorDesc +logger = logging.getLogger(__name__) + def codegen_flow_pu(metamodel, model, output_path, overwrite, debug=False, **custom_args): """ @@ -27,11 +28,11 @@ base_name, _ = os.path.splitext(os.path.basename(input_file)) output_file = os.path.abspath(os.path.join(base_dir, "{}.{}".format(base_name, "pu"))) if overwrite or not os.path.exists(output_file): - click.echo(f"-> {output_file}") + logger.info("-> %s", output_file) with open(output_file, "w") as f: f.write(txt) else: - click.echo(f"-- Skipping: {output_file}") + logger.info("-- Skipping: %s", output_file) flow_pu = GeneratorDesc( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/projects/flow_codegen/pyproject.toml new/textX-4.2.2/tests/functional/registration/projects/flow_codegen/pyproject.toml --- old/textX-4.1.0/tests/functional/registration/projects/flow_codegen/pyproject.toml 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/projects/flow_codegen/pyproject.toml 2025-05-11 11:05:11.000000000 +0200 @@ -4,8 +4,7 @@ version = "1.0.0" dependencies = [ - "textX", - "click" + "textX" ] [build-system] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/test_check.py new/textX-4.2.2/tests/functional/registration/test_check.py --- old/textX-4.1.0/tests/functional/registration/test_check.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/test_check.py 2025-05-11 11:05:11.000000000 +0200 @@ -39,7 +39,7 @@ mm.model_from_file(model_file, type_name_check="off") -def test_check_metamodel(): +def test_check_metamodel(caplog): """ Meta-model is also a model. """ @@ -50,20 +50,20 @@ runner = CliRunner() result = runner.invoke(textx, ["check", metamodel_file]) assert result.exit_code == 0 - assert "Flow.tx: OK." in result.output + assert "Flow.tx: OK." in caplog.text -def test_check_valid_model(): +def test_check_valid_model(caplog): model_file = os.path.join( this_folder, "projects", "flow_dsl", "tests", "models", "data_flow.eflow" ) runner = CliRunner() result = runner.invoke(textx, ["check", model_file]) assert result.exit_code == 0 - assert "data_flow.eflow: OK." in result.output + assert "data_flow.eflow: OK." in caplog.text -def test_check_valid_model_with_explicit_language_name(): +def test_check_valid_model_with_explicit_language_name(caplog): """ Test checking of model where language name is given explicitly. """ @@ -73,10 +73,10 @@ runner = CliRunner() result = runner.invoke(textx, ["check", "--language", "flow-dsl", model_file]) assert result.exit_code == 0 - assert "data_flow.eflow: OK." in result.output + assert "data_flow.eflow: OK." in caplog.text -def test_check_valid_model_with_metamodel_from_file(): +def test_check_valid_model_with_metamodel_from_file(caplog): """ Test checking of model where meta-model is provided from the grammar file. """ @@ -89,10 +89,10 @@ runner = CliRunner() result = runner.invoke(textx, ["check", "--grammar", metamodel_file, model_file]) assert result.exit_code == 0 - assert "types.etype: OK." in result.output + assert "types.etype: OK." in caplog.text -def test_check_invalid_model(): +def test_check_invalid_model(caplog): model_file = os.path.join( this_folder, "projects", @@ -104,16 +104,16 @@ runner = CliRunner() result = runner.invoke(textx, ["check", model_file]) assert result.exit_code != 0 - assert "Error:" in result.output - assert "types must be lowercase" in result.output + assert "ERROR:" in caplog.text + assert "types must be lowercase" in caplog.text -def test_check_invalid_language(): +def test_check_invalid_language(caplog): """ Test calling check command with a file that is not registered. """ runner = CliRunner() - result = runner.invoke(textx, ["check", "some_unexisting_file"]) + runner.invoke(textx, ["check", "some_unexisting_file"]) - assert "No language registered that can parse" in result.output + assert "No language registered that can parse" in caplog.text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/test_discovery.py new/textX-4.2.2/tests/functional/registration/test_discovery.py --- old/textX-4.1.0/tests/functional/registration/test_discovery.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/test_discovery.py 2025-05-11 11:05:11.000000000 +0200 @@ -6,24 +6,24 @@ from textx.cli import textx -def test_list_languages_cli(): +def test_list_languages_cli(caplog): """ Test list-languages command. """ runner = CliRunner() result = runner.invoke(textx, ["list-languages"]) assert result.exit_code == 0 - assert "flow-dsl[1.0.0]" in result.output - assert "*.eflow" in result.output - assert "data-dsl" in result.output + assert "flow-dsl[1.0.0]" in caplog.text + assert "*.eflow" in caplog.text + assert "data-dsl" in caplog.text -def test_list_generators_cli(): +def test_list_generators_cli(caplog): """ Test list-generators command. """ runner = CliRunner() result = runner.invoke(textx, ["list-generators"]) assert result.exit_code == 0 - assert "flow-dsl -> PlantUML" in result.output - assert "flow-codegen[1.0.0]" in result.output + assert "flow-dsl -> PlantUML" in caplog.text + assert "flow-codegen[1.0.0]" in caplog.text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/test_generate.py new/textX-4.2.2/tests/functional/registration/test_generate.py --- old/textX-4.1.0/tests/functional/registration/test_generate.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/test_generate.py 2025-05-11 11:05:11.000000000 +0200 @@ -26,17 +26,17 @@ ) -def test_generator_registered(): +def test_generator_registered(caplog): """ That that generator from flow to PlantUML is registered """ runner = CliRunner() result = runner.invoke(textx, ["list-generators"]) assert result.exit_code == 0 - assert "flow-dsl -> PlantUML" in result.output + assert "flow-dsl -> PlantUML" in caplog.text -def test_generating_flow_model(model_file): +def test_generating_flow_model(caplog, model_file): """ Test that generator can be called. """ @@ -45,9 +45,9 @@ textx, ["generate", "--target", "PlantUML", "--overwrite", model_file] ) assert result.exit_code == 0 - assert "Generating PlantUML target from models" in result.output - assert "->" in result.output - assert "models/data_flow.pu" in result.output + assert "Generating PlantUML target from models" in caplog.text + assert "->" in caplog.text + assert "models/data_flow.pu" in caplog.text assert os.path.exists( os.path.join( this_folder, "projects", "flow_dsl", "tests", "models", "data_flow.pu" @@ -55,7 +55,7 @@ ) -def test_generate_by_providing_explicit_language_name(model_file): +def test_generate_by_providing_explicit_language_name(caplog, model_file): """ Test running generator by providing an explicit language name. """ @@ -73,9 +73,9 @@ ], ) assert result.exit_code == 0 - assert "Generating PlantUML target from models" in result.output - assert "->" in result.output - assert "models/data_flow.pu" in result.output + assert "Generating PlantUML target from models" in caplog.text + assert "->" in caplog.text + assert "models/data_flow.pu" in caplog.text assert os.path.exists( os.path.join( this_folder, "projects", "flow_dsl", "tests", "models", "data_flow.pu" @@ -83,7 +83,7 @@ ) -def test_passing_custom_arguments_to_generator(model_file): +def test_passing_custom_arguments_to_generator(caplog, model_file): """ Test passing custom arguments from command line to the generator. """ @@ -105,9 +105,9 @@ ], ) assert result.exit_code == 0 - assert "Generating PlantUML target from models" in result.output - assert "->" in result.output - assert "models/data_flow.pu" in result.output + assert "Generating PlantUML target from models" in caplog.text + assert "->" in caplog.text + assert "models/data_flow.pu" in caplog.text target_file = os.path.join( this_folder, "projects", "flow_dsl", "tests", "models", "data_flow.pu" ) @@ -118,14 +118,14 @@ assert "custom2=some string" in content -def test_generate_for_invalid_file_raises_error(): +def test_generate_for_invalid_file_raises_error(caplog): """ Test running generator by providing an explicit language name. """ runner = CliRunner() - result = runner.invoke( + runner.invoke( textx, ["generate", "--target", "PlantUML", "--overwrite", "unexistingmodel.invalid"], ) - assert "No language registered that can parse" in result.output + assert "No language registered that can parse" in caplog.text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/registration/test_version.py new/textX-4.2.2/tests/functional/registration/test_version.py --- old/textX-4.1.0/tests/functional/registration/test_version.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/registration/test_version.py 2025-05-11 11:05:11.000000000 +0200 @@ -7,11 +7,11 @@ from textx.cli import textx -def test_version_command(): +def test_version_command(caplog): runner = CliRunner() result = runner.invoke(textx, ["version"]) assert result.exit_code == 0 - assert result.output.startswith("textX") - version_text = result.output.split()[-1] + assert 'textX' in caplog.text + version_text = caplog.text.split()[-1] version = parse(version_text) assert version.__class__.__name__ == "Version" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/tests/functional/subcommands/test_subcommands.py new/textX-4.2.2/tests/functional/subcommands/test_subcommands.py --- old/textX-4.1.0/tests/functional/subcommands/test_subcommands.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/tests/functional/subcommands/test_subcommands.py 2025-05-11 11:05:11.000000000 +0200 @@ -5,14 +5,15 @@ """ Test that a command from the example project is registered. """ - output = subprocess.check_output(["textx"], stderr=subprocess.STDOUT) - assert b"testcommand" in output + result = subprocess.run(["textx"], capture_output=True, check=False) + assert b"testcommand" in (result.stdout + result.stderr) def test_subcommand_group(): """ Test that a command group is registered. """ - output = subprocess.check_output(["textx", "testgroup"], stderr=subprocess.STDOUT) - assert b"groupcommand1" in output - assert b"groupcommand2" in output + result = subprocess.run(["textx", "testgroup"], + capture_output=True, check=False) + assert b"groupcommand1" in (result.stdout + result.stderr) + assert b"groupcommand2" in (result.stdout + result.stderr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/__init__.py new/textX-4.2.2/textx/__init__.py --- old/textX-4.1.0/textx/__init__.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/__init__.py 2025-05-11 11:05:11.000000000 +0200 @@ -37,9 +37,4 @@ language, ) -try: - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version - -__version__ = version("textx") +__version__ = "4.2.2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/cli/__init__.py new/textX-4.2.2/textx/cli/__init__.py --- old/textX-4.1.0/textx/cli/__init__.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/cli/__init__.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,3 +1,5 @@ +import logging + try: import click except ImportError as e: @@ -14,6 +16,12 @@ from importlib.metadata import entry_points +logging.basicConfig( + level=logging.INFO, + format="%(message)s" +) + + @click.group() @click.option("--debug", default=False, is_flag=True, help="Debug/trace output.") @click.pass_context diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/cli/check.py new/textX-4.2.2/textx/cli/check.py --- old/textX-4.1.0/textx/cli/check.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/cli/check.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,3 +1,6 @@ +import logging +import sys + try: import click except ImportError as e: @@ -15,6 +18,8 @@ metamodel_from_file, ) +logger = logging.getLogger(__name__) + def check(textx): @textx.command() @@ -77,10 +82,12 @@ metamodel = metamodel_for_file(model_file) metamodel.model_from_file(model_file, debug=debug) - click.echo(f"{os.path.abspath(model_file)}: OK.") + logger.info("%s: OK.", os.path.abspath(model_file)) except TextXRegistrationError as e: - raise click.ClickException(e.message) from e + logging.error("ERROR: %s", str(e)) + sys.exit(1) except TextXError as e: - raise click.ClickException(str(e)) from e + logging.error("ERROR: %s", str(e)) + sys.exit(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/cli/discover.py new/textX-4.2.2/textx/cli/discover.py --- old/textX-4.1.0/textx/cli/discover.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/cli/discover.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,13 +1,9 @@ -try: - import click -except ImportError as e: - raise Exception( - "textX must be installed with CLI dependencies to use " - "textx command.\npip install textX[cli]" - ) from e +import logging from textx.registration import generator_descriptions, language_descriptions +logger = logging.getLogger(__name__) + def list_languages(textx): @textx.command() @@ -16,7 +12,7 @@ List all registered languages """ for language in language_descriptions().values(): - click.echo( + logger.info( "{:<30}{:<40}{}".format( f"{language.name} ({language.pattern})", f"{language.project_name}[{language.project_version}]", @@ -33,7 +29,7 @@ """ for language in generator_descriptions().values(): for generator in language.values(): - click.echo( + logger.info( "{:<30}{:<30}{}".format( f"{generator.language} -> {generator.target}", f"{generator.project_name}[{generator.project_version}]", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/cli/generate.py new/textX-4.2.2/textx/cli/generate.py --- old/textX-4.1.0/textx/cli/generate.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/cli/generate.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,4 +1,6 @@ +import logging import os +import sys try: import click @@ -17,6 +19,8 @@ metamodel_from_file, ) +logger = logging.getLogger(__name__) + def generate(textx): @textx.command(context_settings=dict(ignore_unknown_options=True)) @@ -95,7 +99,7 @@ """ debug = ctx.obj["debug"] - click.echo(f"Generating {target} target from models:") + logger.info("Generating %s target from models:", target) try: per_file_metamodel = False @@ -127,7 +131,7 @@ # Call generator for each model file for model_file in model_files_without_args: - click.echo(os.path.abspath(model_file)) + logger.info(os.path.abspath(model_file)) if per_file_metamodel: language = language_for_file(model_file).name @@ -149,7 +153,9 @@ generator(metamodel, model, output_path, overwrite, debug, **custom_args) except TextXRegistrationError as e: - raise click.ClickException(e.message) from e + logger.error("ERROR: %s", str(e)) + sys.exit(1) except TextXError as e: - raise click.ClickException(str(e)) from e + logger.error("ERROR: %s", str(e)) + sys.exit(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/cli/version.py new/textX-4.2.2/textx/cli/version.py --- old/textX-4.1.0/textx/cli/version.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/cli/version.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,10 +1,6 @@ -try: - import click -except ImportError as e: - raise Exception( - "textX must be installed with CLI dependencies to use " - "textx command.\npip install textX[cli]" - ) from e +import logging + +logger = logging.getLogger(__name__) def version(textx): @@ -15,4 +11,4 @@ """ import textx - click.echo(f"textX {textx.__version__}") + logger.info("textX %s", textx.__version__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/exceptions.py new/textX-4.2.2/textx/exceptions.py --- old/textX-4.1.0/textx/exceptions.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/exceptions.py 2025-05-11 11:05:11.000000000 +0200 @@ -9,7 +9,7 @@ filename=None, context=None ): - super().__init__(message.encode("utf-8")) + super().__init__(message) self.line = line self.col = col self.nchar = nchar diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/textX-4.1.0/textx/generators.py new/textX-4.2.2/textx/generators.py --- old/textX-4.1.0/textx/generators.py 2024-10-26 14:37:56.000000000 +0200 +++ new/textX-4.2.2/textx/generators.py 2025-05-11 11:05:11.000000000 +0200 @@ -1,9 +1,12 @@ +import logging import os from functools import partial from textx.export import PlantUmlRenderer, metamodel_export, model_export from textx.registration import generator +logger = logging.getLogger(__name__) + def get_output_filename(input_file, output_path, fileext): """ @@ -37,20 +40,12 @@ success_message (str): A message displayed to user after generation is complete. """ - try: - import click - except ImportError as e: - raise Exception( - "textX must be installed with CLI dependencies to use " - "textx command.\npip install textX[cli]" - ) from e if overwrite or not os.path.exists(output_file): - click.echo(f"-> {output_file}") + logger.info("-> %s", output_file) gen_callback() - click.echo(" " + success_message) + logger.info(" %s", success_message) else: - click.echo(click.style("-- NOT overwriting: ", fg="red", bold=True), nl=False) - click.echo(output_file) + logger.warning("-- NOT overwriting: %s", output_file) @generator("textX", "dot")