tlaplus-cli 0.4.1__tar.gz → 0.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {tlaplus_cli-0.4.1/src/tlaplus_cli.egg-info → tlaplus_cli-0.4.2}/PKG-INFO +1 -1
  2. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/pyproject.toml +1 -1
  3. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/compiler.py +38 -8
  4. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2/src/tlaplus_cli.egg-info}/PKG-INFO +1 -1
  5. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/SOURCES.txt +1 -0
  6. tlaplus_cli-0.4.2/tests/test_build_both.py +32 -0
  7. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/LICENSE +0 -0
  8. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/MANIFEST.in +0 -0
  9. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/README.md +0 -0
  10. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/setup.cfg +0 -0
  11. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/__init__.py +0 -0
  12. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cache/__init__.py +0 -0
  13. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cache/github.py +0 -0
  14. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cli.py +0 -0
  15. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/__init__.py +0 -0
  16. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/check_java.py +0 -0
  17. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/__init__.py +0 -0
  18. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/edit.py +0 -0
  19. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/list.py +0 -0
  20. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/fetch_cache/__init__.py +0 -0
  21. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/fetch_cache/clear.py +0 -0
  22. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/__init__.py +0 -0
  23. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/build.py +0 -0
  24. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/lib.py +0 -0
  25. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/path.py +0 -0
  26. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tlc.py +0 -0
  27. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/__init__.py +0 -0
  28. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/dir.py +0 -0
  29. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/install.py +0 -0
  30. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/list.py +0 -0
  31. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/meta/__init__.py +0 -0
  32. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/meta/sync.py +0 -0
  33. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/path.py +0 -0
  34. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/pin.py +0 -0
  35. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/uninstall.py +0 -0
  36. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/upgrade.py +0 -0
  37. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/__init__.py +0 -0
  38. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/loader.py +0 -0
  39. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/schema.py +0 -0
  40. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/java/__init__.py +0 -0
  41. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/java/inspector.py +0 -0
  42. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/project/__init__.py +0 -0
  43. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/project/core.py +0 -0
  44. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/py.typed +0 -0
  45. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/resources/__init__.py +0 -0
  46. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/resources/default_config.yaml +0 -0
  47. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/__init__.py +0 -0
  48. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/runner.py +0 -0
  49. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/ui.py +0 -0
  50. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/__init__.py +0 -0
  51. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/api.py +0 -0
  52. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/downloader.py +0 -0
  53. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/metadata.py +0 -0
  54. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/paths.py +0 -0
  55. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/resolver.py +0 -0
  56. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/schema.py +0 -0
  57. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/dependency_links.txt +0 -0
  58. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/entry_points.txt +0 -0
  59. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/requires.txt +0 -0
  60. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/top_level.txt +0 -0
  61. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_build_modules_path.py +0 -0
  62. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_cli.py +0 -0
  63. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_config.py +0 -0
  64. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_config_suite.py +0 -0
  65. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_build_lib.py +0 -0
  66. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_lib.py +0 -0
  67. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_path.py +0 -0
  68. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_settings.py +0 -0
  69. {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_tlc_modules_path.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tlaplus-cli
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: TLA+ tools: download TLC, compile custom modules, run model checker
5
5
  Author-email: Denis Nikolskiy <codeomatics@gmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tlaplus-cli"
7
- version = "0.4.1"
7
+ version = "0.4.2"
8
8
  description = "TLA+ tools: download TLC, compile custom modules, run model checker"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -14,7 +14,7 @@ def get_tlc_jar_path() -> Path:
14
14
  return pinned_jar if (pinned_jar and pinned_jar.exists()) else legacy
15
15
 
16
16
 
17
- def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path:
17
+ def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path: # noqa: PLR0912, PLR0915
18
18
  """Compile custom Java modules. Returns the classes directory path."""
19
19
  config = load_config()
20
20
  base_dir = base_dir or workspace_root()
@@ -24,19 +24,49 @@ def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path
24
24
  msg = "tla2tools.jar not found. Run 'tla tools install' first."
25
25
  raise FileNotFoundError(msg)
26
26
 
27
- modules_dir = Path(config.module_path) if config.module_path else base_dir / config.workspace.modules_dir
27
+ local_modules_dir = base_dir / config.workspace.modules_dir
28
28
  classes_dir = base_dir / config.workspace.classes_dir
29
29
 
30
- lib_dir = Path(config.module_lib_path) if config.module_lib_path else modules_dir / "lib"
30
+ custom_modules_dir = None
31
+ if config.module_path:
32
+ custom_modules_dir = Path(config.module_path)
33
+ if not custom_modules_dir.exists():
34
+ msg = f"modules directory not found: {custom_modules_dir}"
35
+ raise FileNotFoundError(msg)
36
+
37
+ if not config.module_path and not local_modules_dir.exists():
38
+ msg = f"modules directory not found: {local_modules_dir}"
39
+ raise FileNotFoundError(msg)
40
+
41
+ lib_jars = []
42
+ if config.module_lib_path:
43
+ lib_dir = Path(config.module_lib_path)
44
+ if lib_dir.is_dir():
45
+ lib_jars.extend(sorted(lib_dir.glob("*.jar")))
46
+ else:
47
+ if custom_modules_dir:
48
+ custom_lib = custom_modules_dir / "lib"
49
+ if custom_lib.is_dir():
50
+ lib_jars.extend(sorted(custom_lib.glob("*.jar")))
51
+ local_lib = local_modules_dir / "lib"
52
+ if local_lib.is_dir():
53
+ lib_jars.extend(sorted(local_lib.glob("*.jar")))
54
+
55
+ # Remove duplicates preserving order
56
+ unique_jars = []
57
+ for jar in lib_jars:
58
+ if jar not in unique_jars:
59
+ unique_jars.append(jar)
60
+ lib_jars = unique_jars
31
61
 
32
- lib_jars = sorted(lib_dir.glob("*.jar")) if lib_dir.is_dir() else []
33
62
  classpath = os.pathsep.join([str(jar_path)] + [str(j) for j in lib_jars])
34
63
 
35
- if not modules_dir.exists():
36
- msg = f"modules directory not found: {modules_dir}"
37
- raise FileNotFoundError(msg)
64
+ java_files = []
65
+ if custom_modules_dir:
66
+ java_files.extend(list(custom_modules_dir.rglob("*.java")))
67
+ if local_modules_dir.exists():
68
+ java_files.extend(list(local_modules_dir.rglob("*.java")))
38
69
 
39
- java_files = list(modules_dir.rglob("*.java"))
40
70
  if not java_files:
41
71
  return classes_dir
42
72
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tlaplus-cli
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: TLA+ tools: download TLC, compile custom modules, run model checker
5
5
  Author-email: Denis Nikolskiy <codeomatics@gmail.com>
6
6
  License-Expression: MIT
@@ -55,6 +55,7 @@ src/tlaplus_cli/versioning/metadata.py
55
55
  src/tlaplus_cli/versioning/paths.py
56
56
  src/tlaplus_cli/versioning/resolver.py
57
57
  src/tlaplus_cli/versioning/schema.py
58
+ tests/test_build_both.py
58
59
  tests/test_build_modules_path.py
59
60
  tests/test_cli.py
60
61
  tests/test_config.py
@@ -0,0 +1,32 @@
1
+ from tlaplus_cli.cli import app
2
+
3
+
4
+ def test_build_uses_both_local_and_custom_module_path(mocker, tmp_path, base_settings, runner):
5
+ custom_modules = tmp_path / "custom_modules"
6
+ custom_modules.mkdir()
7
+ (custom_modules / "Custom.java").write_text("class Custom {}")
8
+
9
+ local_modules = tmp_path / "modules"
10
+ local_modules.mkdir()
11
+ (local_modules / "Local.java").write_text("class Local {}")
12
+
13
+ settings = base_settings.model_copy(deep=True)
14
+ settings.module_path = str(custom_modules)
15
+ mocker.patch("tlaplus_cli.tlc.compiler.load_config", return_value=settings)
16
+ mocker.patch("tlaplus_cli.tlc.compiler.workspace_root", return_value=tmp_path)
17
+
18
+ pinned_dir = tmp_path / "tools" / "v1.8.0"
19
+ pinned_dir.mkdir(parents=True)
20
+ (pinned_dir / "tla2tools.jar").write_bytes(b"fake")
21
+ mocker.patch("tlaplus_cli.tlc.compiler.get_pinned_version_dir", return_value=pinned_dir)
22
+
23
+ mock_run = mocker.patch("tlaplus_cli.tlc.compiler.subprocess.run")
24
+ mock_run.return_value.returncode = 0
25
+
26
+ result = runner.invoke(app, ["modules", "build"])
27
+
28
+ assert result.exit_code == 0
29
+ args, _ = mock_run.call_args
30
+ cmd = args[0]
31
+ assert str(custom_modules / "Custom.java") in cmd
32
+ assert str(local_modules / "Local.java") in cmd
File without changes
File without changes
File without changes
File without changes