flashnode 0.2.0__tar.gz → 0.2.1__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.
- {flashnode-0.2.0 → flashnode-0.2.1}/PKG-INFO +1 -1
- flashnode-0.2.1/flashnode/__init__.py +21 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/PKG-INFO +1 -1
- {flashnode-0.2.0 → flashnode-0.2.1}/pyproject.toml +6 -4
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_capabilities.py +19 -0
- flashnode-0.2.0/flashnode/__init__.py +0 -7
- {flashnode-0.2.0 → flashnode-0.2.1}/LICENSE +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/README.md +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/agent/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/agent/cli.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/agent/daemon.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/agent/kube.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/artifacts/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/benchmark/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/config/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/archives.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/argv_runner.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/client.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/docker_runner.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/hardening.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/images.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/loop.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/executor/runner.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/identity/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/identity/credentials.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/identity/enrol.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/identity/store.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/inventory/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/inventory/capabilities.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode/telemetry/__init__.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/SOURCES.txt +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/dependency_links.txt +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/entry_points.txt +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/requires.txt +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/flashnode.egg-info/top_level.txt +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/setup.cfg +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_agent.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_allowlist_drift.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_archives.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_argv_runner.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_checkpoint_relay.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_credentials.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_docker_runner.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_enrol.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_executor.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_hardening.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_hardening_platform.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_identity.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_images_allowlist.py +0 -0
- {flashnode-0.2.0 → flashnode-0.2.1}/tests/test_interfaces.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flashnode
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Open host agent for the FlashML fragmented-compute network: join, benchmark, execute sandboxed ML tasks, earn contribution credits.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/Zolli-Labs/flashnode
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""FlashNode: the open host agent of the FlashML system.
|
|
2
|
+
|
|
3
|
+
Installed by resource contributors to safely execute distributed ML tasks.
|
|
4
|
+
See README.md and docs/SYSTEM_OVERVIEW.md.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
8
|
+
|
|
9
|
+
# Read from installed metadata rather than hardcoding. A literal here is a
|
|
10
|
+
# SECOND source of truth for the version, and it drifted the moment it
|
|
11
|
+
# existed: 0.2.0 shipped to PyPI while this file still said 0.1.0, so
|
|
12
|
+
# `flashnode --help` reported 0.1.0 and — far worse — every agent registered
|
|
13
|
+
# with the coordinator as agent_version="0.1.0" regardless of what was
|
|
14
|
+
# actually installed (inventory/capabilities.py). Any version-based decision
|
|
15
|
+
# the coordinator makes would have been reading a constant.
|
|
16
|
+
try:
|
|
17
|
+
__version__ = _pkg_version("flashnode")
|
|
18
|
+
except PackageNotFoundError: # running from a source tree with no install
|
|
19
|
+
__version__ = "0.0.0+unknown"
|
|
20
|
+
|
|
21
|
+
__all__ = ["__version__"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flashnode
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Open host agent for the FlashML fragmented-compute network: join, benchmark, execute sandboxed ML tasks, earn contribution credits.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/Zolli-Labs/flashnode
|
|
@@ -4,10 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flashnode"
|
|
7
|
-
# 0.2.0
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
7
|
+
# 0.2.0 was the first published release; 0.1.0 never reached PyPI. 0.2.1 fixes
|
|
8
|
+
# a hardcoded __version__ in flashnode/__init__.py that 0.2.0 shipped as
|
|
9
|
+
# "0.1.0" — so every agent registered with the coordinator under the wrong
|
|
10
|
+
# agent_version. Released from the Zolli-Labs/flashml monorepo by pushing a
|
|
11
|
+
# `flashnode-vX.Y.Z` tag, and only AFTER the flashruntime floor below is on PyPI.
|
|
12
|
+
version = "0.2.1"
|
|
11
13
|
description = "Open host agent for the FlashML fragmented-compute network: join, benchmark, execute sandboxed ML tasks, earn contribution credits."
|
|
12
14
|
readme = "README.md"
|
|
13
15
|
license = { text = "Apache-2.0" }
|
|
@@ -108,3 +108,22 @@ def test_env_and_label_sandbox_capable_still_work_without_argv(monkeypatch):
|
|
|
108
108
|
node_meta = {"metadata": {"labels": {"flashml.dev/sandbox-capable": "true"}}}
|
|
109
109
|
reg = discover("node-1", kubernetes_node="", node_meta=node_meta, argv_capable=False)
|
|
110
110
|
assert reg.sandbox_capable is True
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def test_registration_reports_the_installed_version():
|
|
114
|
+
"""The coordinator's `agent_version` must be what is actually installed.
|
|
115
|
+
|
|
116
|
+
It was a hardcoded literal in flashnode/__init__.py, and it drifted the
|
|
117
|
+
first time it mattered: 0.2.0 shipped to PyPI while the literal still read
|
|
118
|
+
0.1.0, so every agent in the fleet would have registered as 0.1.0 no matter
|
|
119
|
+
what its owner had installed. Any version-based decision the coordinator
|
|
120
|
+
makes — refusing a too-old protocol, reporting upgrade coverage — would
|
|
121
|
+
have been reading a constant.
|
|
122
|
+
|
|
123
|
+
Compare against installed metadata rather than a literal here, or this
|
|
124
|
+
test becomes the third source of truth it exists to prevent.
|
|
125
|
+
"""
|
|
126
|
+
from importlib.metadata import version
|
|
127
|
+
|
|
128
|
+
reg = discover("n-test", kubernetes_node="", node_meta=None)
|
|
129
|
+
assert reg.agent_version == version("flashnode")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|