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")

Reply via email to