manta-node 0.6b5.dev758__py3-none-any.whl → 0.6b5.dev762__py3-none-any.whl

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.
@@ -4,7 +4,7 @@ This file is auto-generated at build time by scripts/generate_version.py.
4
4
  Do not edit manually.
5
5
  """
6
6
 
7
- __version__ = "2026.10.07.ed69844e"
7
+ __version__ = "2026.10.07.6c5d7e8c"
8
8
  __build_date__ = "2026.10.07"
9
- __commit_id__ = "ed69844e"
10
- __package_version__ = "0.6b5"
9
+ __commit_id__ = "6c5d7e8c"
10
+ __package_version__ = "0.6b5" # release-series base, moved by scripts/bump_version.py
manta_node/cli/version.py CHANGED
@@ -1,10 +1,16 @@
1
1
  """Version information for Manta Node CLI.
2
2
 
3
- Version information is loaded from:
3
+ The build/commit identity is loaded from:
4
4
  1. _version_generated.py (created at build time by scripts/generate_version.py)
5
5
  2. Fall back to dynamic git detection if not available (development mode)
6
+
7
+ The package version is read from the installed distribution metadata, so a
8
+ published build reports the exact version the fleet installed rather than the
9
+ base literal. A source checkout with no distribution reports none.
6
10
  """
7
11
 
12
+ import importlib.metadata
13
+ import json
8
14
  import subprocess
9
15
  from datetime import datetime
10
16
  from pathlib import Path
@@ -24,13 +30,52 @@ def _load_build_version() -> dict | None:
24
30
  "version": _version_generated.__version__,
25
31
  "date": _version_generated.__build_date__,
26
32
  "commit": _version_generated.__commit_id__,
27
- "package_version": _version_generated.__package_version__,
28
33
  }
29
34
  except ImportError:
30
35
  # Generated file doesn't exist (development mode)
31
36
  return None
32
37
 
33
38
 
39
+ def _is_editable(distribution: importlib.metadata.Distribution) -> bool:
40
+ """Whether `distribution` was installed editable, from its direct_url.json.
41
+
42
+ A static `[project].version` with no dynamic-version plugin makes an
43
+ editable install report the bare base, so this marker is the only thing
44
+ that tells an editable install from a published one.
45
+ """
46
+ raw = distribution.read_text("direct_url.json")
47
+ if not raw:
48
+ return False
49
+ try:
50
+ direct_url = json.loads(raw)
51
+ except json.JSONDecodeError:
52
+ return False
53
+ if not isinstance(direct_url, dict):
54
+ return False
55
+ dir_info = direct_url.get("dir_info")
56
+ return bool(isinstance(dir_info, dict) and dir_info.get("editable"))
57
+
58
+
59
+ def _get_installed_package_version() -> str:
60
+ """Return the installed manta-node distribution version, or "" if none.
61
+
62
+ A published build reports the version the fleet installed (e.g.
63
+ ``1.2b3.dev708``); an editable install reports its local segment (e.g.
64
+ ``1.2b3+editable``); a source checkout with no distribution metadata
65
+ reports none. The base literal is never reported -- it names the release
66
+ series, not the build the node runs.
67
+ """
68
+ try:
69
+ distribution = importlib.metadata.distribution("manta-node")
70
+ except importlib.metadata.PackageNotFoundError:
71
+ return ""
72
+ if _is_editable(distribution):
73
+ # A local version is never published, so the platform reads an editable
74
+ # node as unupdatable -- which is correct.
75
+ return f"{distribution.version}+editable"
76
+ return distribution.version
77
+
78
+
34
79
  def _get_git_commit_id() -> str | None:
35
80
  """Get the current git commit ID (short form) dynamically.
36
81
 
@@ -55,7 +100,9 @@ def _get_git_commit_id() -> str | None:
55
100
  if result.returncode == 0:
56
101
  return result.stdout.strip()
57
102
  return None
58
- except (subprocess.SubprocessError, FileNotFoundError, subprocess.TimeoutExpired):
103
+ except (subprocess.SubprocessError, OSError):
104
+ # OSError covers FileNotFoundError and PermissionError: git may be on
105
+ # PATH but not executable (a sandboxed role), which is still "no git".
59
106
  return None
60
107
 
61
108
 
@@ -84,22 +131,24 @@ def get_full_version_info() -> dict:
84
131
  """Get detailed version information.
85
132
 
86
133
  Returns:
87
- Dictionary with version details.
134
+ Dictionary with version details. ``package_version`` is the installed
135
+ distribution version, or "" when the distribution is not installed.
88
136
  """
89
137
  # Try build-time version first
90
138
  build_version = _load_build_version()
91
139
  if build_version:
92
- return build_version
93
-
94
- # Fall back to dynamic detection (development mode)
95
- commit_id = _get_git_commit_id()
140
+ info = dict(build_version)
141
+ else:
142
+ # Fall back to dynamic detection (development mode)
143
+ commit_id = _get_git_commit_id()
144
+ info = {
145
+ "version": get_version_string(),
146
+ "date": datetime.now().strftime("%Y.%m.%d"),
147
+ "commit": commit_id or "unknown",
148
+ }
96
149
 
97
- return {
98
- "version": get_version_string(),
99
- "date": datetime.now().strftime("%Y.%m.%d"),
100
- "commit": commit_id or "unknown",
101
- "package_version": "0.6b5", # mirrors pyproject.toml [project].version; nothing syncs the two, so both move together
102
- }
150
+ info["package_version"] = _get_installed_package_version()
151
+ return info
103
152
 
104
153
 
105
154
  if __name__ == "__main__":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: manta_node
3
- Version: 0.6b5.dev758
3
+ Version: 0.6b5.dev762
4
4
  Summary: Node side software of the Manta platform. It is responsible for the communication with the Manta Core and the execution of the tasks.
5
5
  Author-email: Hugo Miralles <hugo.miralles@manta-tech.io>, Matthew Thompson <matthew.thompson@manta-tech.io>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -28,7 +28,7 @@ Requires-Dist: pyyaml
28
28
  Requires-Dist: psutil
29
29
  Requires-Dist: msgpack
30
30
  Requires-Dist: aiomqtt<3.0,>=2.5.1
31
- Requires-Dist: manta-common-core<=0.6b5,>=0.6b5.dev738
31
+ Requires-Dist: manta-common-core==0.6b5.dev738
32
32
  Requires-Dist: toml
33
33
  Requires-Dist: tomli; python_version < "3.11"
34
34
  Requires-Dist: tomli-w
@@ -73,6 +73,20 @@ python -m manta_node --manager-host localhost --manager-port 50051 --token <jwt_
73
73
  python -c "from manta_node import start_nodes; import asyncio; asyncio.run(start_nodes(3, 'localhost', 50051, '<jwt_token>'))"
74
74
  ```
75
75
 
76
+ ## Dependency pinning
77
+
78
+ A released `manta-node` wheel pins `manta-common-core` to the exact build the
79
+ release was tested with, so installing any `manta-node` version gives the same
80
+ `manta-common-core` wherever and whenever it is installed. The source
81
+ `pyproject.toml` keeps a range for development and version bumps; only the
82
+ published wheel carries the exact pin.
83
+
84
+ This is stricter than a range: installing `manta-node` beside a package that
85
+ requires a different `manta-common-core` (for example `manta-sdk` in one
86
+ virtualenv) can fail to resolve. Production nodes run alone in their own
87
+ version directory, so this affects only mixed local environments. It fails
88
+ loudly at install time, not silently at run time.
89
+
76
90
  ## Documentation
77
91
 
78
92
  📚 **Full documentation is available at [docs.manta-tech.io](https://docs.manta-tech.io/)**
@@ -6,10 +6,10 @@ manta_node/task_manager.py,sha256=xRE-yKdUW0FFR8vtX1jDwl1AxTbqVD_JS7QVR62GA00,38
6
6
  manta_node/tasks.py,sha256=o837Hi-KFVJg9LF5iOtE8oD6UuTOfrEPWR-JOdhRGeY,6983
7
7
  manta_node/utils.py,sha256=Hw4Iw2jYQYsfVLVJuBMt-_rMFBeml3nCDE2jiiXc8YM,1155
8
8
  manta_node/cli/__init__.py,sha256=arzO3mXDJ-E2yeeytbZfN7mCswwxdQ43_QjyeL2E5yE,134
9
- manta_node/cli/_version_generated.py,sha256=JjgJK6qhaYEYJ4uBuhr33_KwdpzC0V1ewvzZ9kjrwBU,275
9
+ manta_node/cli/_version_generated.py,sha256=JFAW1e6DAkd-vf4o1WM-kdUL5t3oc6Pd_QSHqmfKfmw,332
10
10
  manta_node/cli/config_manager.py,sha256=BCju9zqzraviL3KrzRnB-vZQUY__Q5kuEqb7EdB8YdI,4409
11
11
  manta_node/cli/main.py,sha256=dZa6zrypWBvpN8hd4qpxevvlyNFhxKINCg1537NJ36w,4318
12
- manta_node/cli/version.py,sha256=3lrnIWpOosszBN-VsCBVLxDgpvCC7IB0aDIKx_3e7hI,3115
12
+ manta_node/cli/version.py,sha256=L4lNTz-Uw_ejumy1tXJcJhcjhb-5FRcRQ6ogZM5N1Xo,5136
13
13
  manta_node/cli/commands/__init__.py,sha256=GKLOURXZqec5B3H3EiwX41xDISGg6cO_kCueoyZvt0Q,505
14
14
  manta_node/cli/commands/cluster.py,sha256=kUVopCN4xkEk-IR1aKpr7bfBSQEtG6pEj_hlWno5SZQ,14257
15
15
  manta_node/cli/commands/config.py,sha256=BiarCD0S8rcNYbio4RLzDvUS7A50s5dd5F4TiZqLR6M,16577
@@ -61,9 +61,9 @@ manta_node/supervisor/process.py,sha256=N5WvNCJnJR3c6I4uqBPPFqgEdCI9rFulHyGem9Sh
61
61
  manta_node/supervisor/records.py,sha256=fUlL1SfmWpGnCbJ9956cuy0H3a7-aEF-B-naqbJiYoU,6405
62
62
  manta_node/supervisor/seam.py,sha256=HomMFTDbc0dZQ9VrfGVhQxjiU7E23-zwyjZnLsnq6dc,8031
63
63
  manta_node/supervisor/switch.py,sha256=hFCWhZDoWN9KN0zkNepsQfkypDhhlkBKmCOltCqlb3w,17614
64
- manta_node-0.6b5.dev758.dist-info/licenses/LICENSE,sha256=9mBgLhiB9goQPQjg9XQJ6FjgVxYw9Q8lyOZYkPGwF_c,34484
65
- manta_node-0.6b5.dev758.dist-info/METADATA,sha256=kk5m-PtQxTKU3U8wSZq7hinEWgOfgEylF7KH6A72QPY,4231
66
- manta_node-0.6b5.dev758.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
67
- manta_node-0.6b5.dev758.dist-info/entry_points.txt,sha256=uCwggRApalLEsYs1YxwTBN0-e9oMJAkMoBp01HaSdoY,110
68
- manta_node-0.6b5.dev758.dist-info/top_level.txt,sha256=nbT5J5WETuXM9UPoQckl29uUOq8wMYdRb9QDx5kAFeo,11
69
- manta_node-0.6b5.dev758.dist-info/RECORD,,
64
+ manta_node-0.6b5.dev762.dist-info/licenses/LICENSE,sha256=9mBgLhiB9goQPQjg9XQJ6FjgVxYw9Q8lyOZYkPGwF_c,34484
65
+ manta_node-0.6b5.dev762.dist-info/METADATA,sha256=4X0tk7IlwABdNPkFnSgQgFlr4sCjzRG7v98E_9a9c-c,4937
66
+ manta_node-0.6b5.dev762.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
67
+ manta_node-0.6b5.dev762.dist-info/entry_points.txt,sha256=uCwggRApalLEsYs1YxwTBN0-e9oMJAkMoBp01HaSdoY,110
68
+ manta_node-0.6b5.dev762.dist-info/top_level.txt,sha256=nbT5J5WETuXM9UPoQckl29uUOq8wMYdRb9QDx5kAFeo,11
69
+ manta_node-0.6b5.dev762.dist-info/RECORD,,