experimaestro 1.7.0rc2__tar.gz → 1.7.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.
Potentially problematic release.
This version of experimaestro might be problematic. Click here for more details.
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/PKG-INFO +1 -2
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/pyproject.toml +5 -6
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/commandline.py +3 -7
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/connectors/__init__.py +5 -2
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/connectors/local.py +9 -5
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/connectors/ssh.py +1 -1
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/experiments/cli.py +13 -10
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launcherfinder/registry.py +5 -1
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launchers/slurm/base.py +47 -9
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/notifications.py +1 -3
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/base.py +4 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/dynamic_outputs.py +1 -1
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scriptbuilder.py +3 -1
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/sphinx/__init__.py +7 -17
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/bin/sbatch +16 -2
- experimaestro-1.7.1/src/experimaestro/tests/launchers/bin/srun +5 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/common.py +5 -1
- experimaestro-1.7.0rc2/src/experimaestro/notifications.proto +0 -17
- experimaestro-1.7.0rc2/src/experimaestro/notifications_pb2.py +0 -39
- experimaestro-1.7.0rc2/src/experimaestro/streaming_state.py +0 -124
- experimaestro-1.7.0rc2/src/experimaestro/tests/state_streamer.proto +0 -9
- experimaestro-1.7.0rc2/src/experimaestro/tests/state_streamer_pb2.py +0 -38
- experimaestro-1.7.0rc2/src/experimaestro/tests/test_state_streamer.py +0 -18
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/LICENSE +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/README.md +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/__main__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/annotations.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/checkers.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/cli/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/cli/filter.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/cli/jobs.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/click.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/compat.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/arguments.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/context.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/objects.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/objects.pyi +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/serialization.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/serializers.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/types.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/core/utils.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/exceptions.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/experiments/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/experiments/configuration.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/generators.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/huggingface.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/ipc.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launcherfinder/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launcherfinder/base.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launcherfinder/parser.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launcherfinder/specs.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launchers/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launchers/direct.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launchers/oar.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/launchers/slurm/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/locking.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mkdocs/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mkdocs/annotations.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mkdocs/base.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mkdocs/metaloader.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mkdocs/style.css +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/mypy.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/py.typed +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/rpyc.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/run.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/dependencies.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/services.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/workspace.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/016b4a6cdced82ab3aa1.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/0c35d18bf06992036b69.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/1815e00441357e01619e.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/219aa9140e099e6c72ed.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/2463b90d9a316e4e5294.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/2582b0e4bcf85eceead0.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/3a4004a46a653d4b2166.woff +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/3baa5b8f3469222b822d.woff +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/4d73cb90e394b34b7670.woff +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/4ef4218c522f1eb6b5b1.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/50701fbb8177c2dde530.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/5d681e2edae8c60630db.woff +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/6f420cf17cc0d7676fad.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/878f31251d960bd6266f.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/89999bdf5d835c012025.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/914997e1bdfc990d0897.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/b041b1fa4fe241b23445.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/b6879d41b0852f01ed5b.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/c210719e60948b211a12.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/c380809fd3677d7d6903.woff2 +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/d75e3fd1eb12e9bd6655.ttf +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/f882956fd323fd322f31.woff +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/favicon.ico +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/index.css +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/index.css.map +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/index.html +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/index.js +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/index.js.map +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/login.html +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/server/data/manifest.json +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/settings.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/taskglobals.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/conftest.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/connectors/test_local.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/connectors/utils.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/definitions_types.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/bin/sacct +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/bin/test.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/config_slurm/launchers.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/test_local.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/restart.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/restart_main.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/task_tokens.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/tasks/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/tasks/all.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/tasks/foreign.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_checkers.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_dependencies.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_findlauncher.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_forward.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_identifier.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_instance.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_objects.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_outputs.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_param.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_progress.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_serializers.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_snippets.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_ssh.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_tags.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_tasks.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_tokens.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_types.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/test_validation.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/token_reschedule.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tests/utils.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tokens.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tools/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tools/diff.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tools/documentation.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/tools/jobs.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/typingutils.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/__init__.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/asyncio.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/jobs.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/jupyter.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/resources.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/utils/settings.py +0 -0
- {experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/xpmutils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: experimaestro
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.1
|
|
4
4
|
Summary: "Experimaestro is a computer science experiment manager"
|
|
5
5
|
License: GPL-3
|
|
6
6
|
Keywords: experiment manager
|
|
@@ -34,7 +34,6 @@ Requires-Dist: huggingface-hub (>0.17)
|
|
|
34
34
|
Requires-Dist: humanfriendly (>=10,<11)
|
|
35
35
|
Requires-Dist: marshmallow (>=3.20,<4.0)
|
|
36
36
|
Requires-Dist: omegaconf (>=2.3,<3.0)
|
|
37
|
-
Requires-Dist: protobuf (>5)
|
|
38
37
|
Requires-Dist: psutil (>=7)
|
|
39
38
|
Requires-Dist: pyparsing (>=3.1,<4.0)
|
|
40
39
|
Requires-Dist: pytools (>=2023.1.1,<2024.0.0)
|
|
@@ -20,7 +20,7 @@ include = [
|
|
|
20
20
|
"src/experimaestro/mkdocs/style.css",
|
|
21
21
|
{ path="src/experimaestro/server/data/*", format=['sdist', 'wheel']}
|
|
22
22
|
]
|
|
23
|
-
version = "1.7.
|
|
23
|
+
version = "1.7.1"
|
|
24
24
|
repository = "https://github.com/experimaestro/experimaestro-python"
|
|
25
25
|
documentation = "https://experimaestro-python.readthedocs.io/"
|
|
26
26
|
|
|
@@ -64,7 +64,6 @@ watchdog = "^2"
|
|
|
64
64
|
marshmallow = "^3.20"
|
|
65
65
|
decorator = "^5"
|
|
66
66
|
rpyc = ">=5,<7"
|
|
67
|
-
protobuf = ">5"
|
|
68
67
|
|
|
69
68
|
[tool.poetry.group.ssh]
|
|
70
69
|
optional = true
|
|
@@ -123,7 +122,7 @@ warn_unused_ignores = true
|
|
|
123
122
|
|
|
124
123
|
[tool.commitizen]
|
|
125
124
|
name = "cz_conventional_commits"
|
|
126
|
-
version = "1.7.
|
|
127
|
-
changelog_start_rev = "0.
|
|
128
|
-
tag_format = "v$
|
|
129
|
-
update_changelog_on_bump = true
|
|
125
|
+
version = "1.7.1"
|
|
126
|
+
changelog_start_rev = "v1.0.0"
|
|
127
|
+
tag_format = "v$major.$minor.$patch$prerelease"
|
|
128
|
+
# update_changelog_on_bump = true
|
|
@@ -276,12 +276,6 @@ class CommandLineJob(Job):
|
|
|
276
276
|
|
|
277
277
|
scriptbuilder = self.launcher.scriptbuilder()
|
|
278
278
|
self.path.mkdir(parents=True, exist_ok=True)
|
|
279
|
-
donepath = self.donepath
|
|
280
|
-
|
|
281
|
-
# Check again if done (now that we have locked)
|
|
282
|
-
if not overwrite and donepath.is_file():
|
|
283
|
-
logger.info("Job %s is already done", self)
|
|
284
|
-
return JobState.DONE
|
|
285
279
|
|
|
286
280
|
# Now we can write the script
|
|
287
281
|
scriptbuilder.lockfiles.append(self.lockpath)
|
|
@@ -293,15 +287,17 @@ class CommandLineJob(Job):
|
|
|
293
287
|
if self._process:
|
|
294
288
|
return self._process
|
|
295
289
|
|
|
290
|
+
# Prepare the files to be run
|
|
296
291
|
scriptPath = self.prepare()
|
|
297
292
|
|
|
293
|
+
# OK, now starts the process
|
|
298
294
|
logger.info("Starting job %s", self.jobpath)
|
|
299
295
|
processbuilder = self.launcher.processbuilder()
|
|
300
296
|
processbuilder.environ = self.environ
|
|
301
297
|
processbuilder.command.append(self.launcher.connector.resolve(scriptPath))
|
|
302
298
|
processbuilder.stderr = Redirect.file(self.stderr)
|
|
303
299
|
processbuilder.stdout = Redirect.file(self.stdout)
|
|
304
|
-
self._process = processbuilder.start()
|
|
300
|
+
self._process = processbuilder.start(True)
|
|
305
301
|
|
|
306
302
|
with self.pidpath.open("w") as fp:
|
|
307
303
|
json.dump(self._process.tospec(), fp)
|
|
@@ -154,8 +154,11 @@ class ProcessBuilder:
|
|
|
154
154
|
self.environ: Mapping[str, str] = {}
|
|
155
155
|
self.command = []
|
|
156
156
|
|
|
157
|
-
def start(self) -> Process:
|
|
158
|
-
"""Start the process
|
|
157
|
+
def start(self, task_mode: bool = False) -> Process:
|
|
158
|
+
"""Start the process
|
|
159
|
+
|
|
160
|
+
:param task_mode: True if the process is a job script
|
|
161
|
+
"""
|
|
159
162
|
raise NotImplementedError("Method not implemented in %s" % self.__class__)
|
|
160
163
|
|
|
161
164
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""All classes related to localhost management
|
|
2
|
-
"""
|
|
1
|
+
"""All classes related to localhost management"""
|
|
3
2
|
|
|
4
3
|
import subprocess
|
|
5
4
|
from typing import Optional
|
|
@@ -107,8 +106,11 @@ def getstream(redirect: Redirect, write: bool):
|
|
|
107
106
|
|
|
108
107
|
|
|
109
108
|
class LocalProcessBuilder(ProcessBuilder):
|
|
110
|
-
def start(self):
|
|
111
|
-
"""Start the process
|
|
109
|
+
def start(self, task_mode=False):
|
|
110
|
+
"""Start the process
|
|
111
|
+
|
|
112
|
+
:param task_mode: just ignored
|
|
113
|
+
"""
|
|
112
114
|
stdin = getstream(self.stdin, False)
|
|
113
115
|
stdout = getstream(self.stdout, True)
|
|
114
116
|
stderr = getstream(self.stderr, True)
|
|
@@ -199,7 +201,9 @@ class LocalConnector(Connector):
|
|
|
199
201
|
return LocalProcessBuilder()
|
|
200
202
|
|
|
201
203
|
def resolve(self, path: Path, basepath: Path = None) -> str:
|
|
202
|
-
assert isinstance(path, PosixPath) or isinstance(
|
|
204
|
+
assert isinstance(path, PosixPath) or isinstance(
|
|
205
|
+
path, WindowsPath
|
|
206
|
+
), f"Unrecognized path {type(path)}"
|
|
203
207
|
if not basepath:
|
|
204
208
|
return str(path.absolute())
|
|
205
209
|
try:
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import imp
|
|
2
1
|
import importlib
|
|
3
2
|
import inspect
|
|
4
3
|
import json
|
|
@@ -68,6 +67,12 @@ class ConfigurationLoader:
|
|
|
68
67
|
|
|
69
68
|
with yaml_file.open("rt") as fp:
|
|
70
69
|
_data = yaml.full_load(fp)
|
|
70
|
+
|
|
71
|
+
if "file" in _data:
|
|
72
|
+
path = Path(_data["file"])
|
|
73
|
+
if not path.is_absolute():
|
|
74
|
+
_data["file"] = str((yaml_file.parent / path).resolve())
|
|
75
|
+
|
|
71
76
|
if parent := _data.get("parent", None):
|
|
72
77
|
self.load(yaml_file.parent / parent)
|
|
73
78
|
|
|
@@ -193,7 +198,7 @@ def experiments_cli( # noqa: C901
|
|
|
193
198
|
), "Module name and experiment file are mutually exclusive options"
|
|
194
199
|
xp_file = Path(xp_file)
|
|
195
200
|
if not python_path:
|
|
196
|
-
python_path.append(xp_file.parent)
|
|
201
|
+
python_path.append(xp_file.parent.absolute())
|
|
197
202
|
logging.info(
|
|
198
203
|
"Using python path: %s", ", ".join(str(s) for s in python_path)
|
|
199
204
|
)
|
|
@@ -220,14 +225,12 @@ def experiments_cli( # noqa: C901
|
|
|
220
225
|
if not xp_file.exists() and xp_file.suffix != ".py":
|
|
221
226
|
xp_file = xp_file.with_suffix(".py")
|
|
222
227
|
xp_file: Path = Path(yaml_file).parent / xp_file
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
(".py", "r", imp.PY_SOURCE),
|
|
230
|
-
)
|
|
228
|
+
module_name = xp_file.with_suffix("").name
|
|
229
|
+
spec = importlib.util.spec_from_file_location(
|
|
230
|
+
module_name, str(xp_file.absolute())
|
|
231
|
+
)
|
|
232
|
+
mod = importlib.util.module_from_spec(spec)
|
|
233
|
+
spec.loader.exec_module(mod)
|
|
231
234
|
else:
|
|
232
235
|
# Module
|
|
233
236
|
try:
|
|
@@ -8,7 +8,6 @@ import typing
|
|
|
8
8
|
from omegaconf import DictConfig, OmegaConf, SCMode
|
|
9
9
|
import pkg_resources
|
|
10
10
|
from experimaestro.utils import logger
|
|
11
|
-
|
|
12
11
|
from .base import ConnectorConfiguration, TokenConfiguration
|
|
13
12
|
from .specs import HostRequirement
|
|
14
13
|
|
|
@@ -158,9 +157,14 @@ class LauncherRegistry:
|
|
|
158
157
|
specs.append(spec)
|
|
159
158
|
|
|
160
159
|
# Use launcher function
|
|
160
|
+
from experimaestro.launchers import Launcher
|
|
161
|
+
|
|
161
162
|
if self.find_launcher_fn is not None:
|
|
162
163
|
for spec in specs:
|
|
163
164
|
if launcher := self.find_launcher_fn(spec, tags):
|
|
165
|
+
assert isinstance(
|
|
166
|
+
launcher, Launcher
|
|
167
|
+
), "f{self.find_launcher_fn} did not return a Launcher but {type(launcher)}"
|
|
164
168
|
return launcher
|
|
165
169
|
|
|
166
170
|
return None
|
|
@@ -11,6 +11,7 @@ from typing import (
|
|
|
11
11
|
)
|
|
12
12
|
from experimaestro.connectors.local import LocalConnector
|
|
13
13
|
import re
|
|
14
|
+
from shlex import quote as shquote
|
|
14
15
|
from contextlib import contextmanager
|
|
15
16
|
from dataclasses import dataclass
|
|
16
17
|
from experimaestro.launcherfinder.registry import (
|
|
@@ -235,15 +236,15 @@ class SlurmProcessBuilder(ProcessBuilder):
|
|
|
235
236
|
super().__init__()
|
|
236
237
|
self.launcher = launcher
|
|
237
238
|
|
|
238
|
-
def start(self) -> BatchSlurmProcess:
|
|
239
|
+
def start(self, task_mode: bool = False) -> BatchSlurmProcess:
|
|
239
240
|
"""Start the process"""
|
|
240
241
|
builder = self.launcher.connector.processbuilder()
|
|
241
|
-
builder.workingDirectory = self.workingDirectory
|
|
242
242
|
builder.environ = self.launcher.launcherenv
|
|
243
243
|
builder.detach = False
|
|
244
244
|
|
|
245
245
|
if not self.detach:
|
|
246
246
|
# Simplest case: we wait for the output
|
|
247
|
+
builder.workingDirectory = self.workingDirectory
|
|
247
248
|
builder.command = [f"{self.launcher.binpath}/srun"]
|
|
248
249
|
builder.command.extend(self.launcher.options.args())
|
|
249
250
|
builder.command.extend(self.command)
|
|
@@ -255,11 +256,17 @@ class SlurmProcessBuilder(ProcessBuilder):
|
|
|
255
256
|
return builder.start()
|
|
256
257
|
|
|
257
258
|
builder.command = [f"{self.launcher.binpath}/sbatch", "--parsable"]
|
|
258
|
-
builder.command.extend(self.launcher.options.args())
|
|
259
259
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
260
|
+
if not task_mode:
|
|
261
|
+
# Use command line parameters when not running a task
|
|
262
|
+
builder.command.extend(self.launcher.options.args())
|
|
263
|
+
|
|
264
|
+
if self.workingDirectory:
|
|
265
|
+
workdir = self.launcher.connector.resolve(self.workingDirectory)
|
|
266
|
+
builder.command.append(f"--chdir={workdir}")
|
|
267
|
+
addstream(builder.command, "-e", self.stderr)
|
|
268
|
+
addstream(builder.command, "-o", self.stdout)
|
|
269
|
+
addstream(builder.command, "-i", self.stdin)
|
|
263
270
|
|
|
264
271
|
builder.command.extend(self.command)
|
|
265
272
|
logger.info(
|
|
@@ -427,12 +434,43 @@ class SlurmLauncher(Launcher):
|
|
|
427
434
|
|
|
428
435
|
We assume *nix, but should be changed to PythonScriptBuilder when working
|
|
429
436
|
"""
|
|
430
|
-
|
|
431
|
-
builder.processtype = "slurm"
|
|
432
|
-
return builder
|
|
437
|
+
return SlurmScriptBuilder(self)
|
|
433
438
|
|
|
434
439
|
def processbuilder(self) -> SlurmProcessBuilder:
|
|
435
440
|
"""Returns the process builder for this launcher
|
|
436
441
|
|
|
437
442
|
By default, returns the associated connector builder"""
|
|
438
443
|
return SlurmProcessBuilder(self)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
class SlurmScriptBuilder(PythonScriptBuilder):
|
|
447
|
+
def __init__(self, launcher: SlurmLauncher, pythonpath=None):
|
|
448
|
+
super().__init__(pythonpath)
|
|
449
|
+
self.launcher = launcher
|
|
450
|
+
self.processtype = "slurm"
|
|
451
|
+
|
|
452
|
+
def write(self, job):
|
|
453
|
+
py_path = super().write(job)
|
|
454
|
+
main_path = py_path.parent
|
|
455
|
+
|
|
456
|
+
def relpath(path: Path):
|
|
457
|
+
return shquote(self.launcher.connector.resolve(path, main_path))
|
|
458
|
+
|
|
459
|
+
# Writes the sbatch shell script containing all the options
|
|
460
|
+
sh_path = job.jobpath / ("%s.sh" % job.name)
|
|
461
|
+
with sh_path.open("wt") as out:
|
|
462
|
+
out.write("""#!/bin/sh\n\n""")
|
|
463
|
+
|
|
464
|
+
workdir = self.launcher.connector.resolve(main_path)
|
|
465
|
+
out.write(f"#SBATCH --chdir={shquote(workdir)}\n")
|
|
466
|
+
out.write(f"""#SBATCH --error={relpath(job.stderr)}\n""")
|
|
467
|
+
out.write(f"""#SBATCH --output={relpath(job.stdout)}\n""")
|
|
468
|
+
|
|
469
|
+
for arg in self.launcher.options.args():
|
|
470
|
+
out.write(f"""#SBATCH {arg}\n""")
|
|
471
|
+
|
|
472
|
+
# We finish by the call to srun
|
|
473
|
+
out.write(f"""\nsrun ./{relpath(py_path)}\n\n""")
|
|
474
|
+
|
|
475
|
+
self.launcher.connector.setExecutable(sh_path, True)
|
|
476
|
+
return sh_path
|
|
@@ -12,16 +12,15 @@ from tqdm.auto import tqdm as std_tqdm
|
|
|
12
12
|
|
|
13
13
|
from .utils import logger
|
|
14
14
|
from experimaestro.taskglobals import Env as TaskEnv
|
|
15
|
-
from experimaestro.notifications_pb2 import LevelInformation
|
|
16
15
|
|
|
17
16
|
# --- Progress and other notifications
|
|
18
17
|
|
|
19
18
|
T = TypeVar("T")
|
|
20
19
|
|
|
20
|
+
|
|
21
21
|
@dataclass
|
|
22
22
|
class LevelInformation:
|
|
23
23
|
level: int
|
|
24
|
-
|
|
25
24
|
desc: Optional[str]
|
|
26
25
|
progress: float
|
|
27
26
|
|
|
@@ -214,7 +213,6 @@ class Reporter(threading.Thread):
|
|
|
214
213
|
|
|
215
214
|
self.cv.notify_all()
|
|
216
215
|
|
|
217
|
-
#: The reporter instance
|
|
218
216
|
INSTANCE: ClassVar[Optional["Reporter"]] = None
|
|
219
217
|
|
|
220
218
|
@staticmethod
|
|
@@ -740,6 +740,7 @@ class Scheduler:
|
|
|
740
740
|
code = await process.aio_code()
|
|
741
741
|
logger.debug("Got return code %s for %s", code, job)
|
|
742
742
|
|
|
743
|
+
# Check the file if there is no return code
|
|
743
744
|
if code is None:
|
|
744
745
|
# Case where we cannot retrieve the code right away
|
|
745
746
|
if job.donepath.is_file():
|
|
@@ -916,6 +917,7 @@ class experiment:
|
|
|
916
917
|
|
|
917
918
|
async def awaitcompletion():
|
|
918
919
|
assert self.central is not None
|
|
920
|
+
logger.debug("Waiting to exit scheduler...")
|
|
919
921
|
async with self.central.exitCondition:
|
|
920
922
|
while True:
|
|
921
923
|
if self.exitMode:
|
|
@@ -1011,6 +1013,7 @@ class experiment:
|
|
|
1011
1013
|
return self
|
|
1012
1014
|
|
|
1013
1015
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
1016
|
+
logger.debug("Exiting scheduler context")
|
|
1014
1017
|
# If no exception and normal run mode, remove old "jobs"
|
|
1015
1018
|
if self.workspace.run_mode == RunMode.NORMAL:
|
|
1016
1019
|
if exc_type is None and self.jobsbakpath.is_dir():
|
|
@@ -1051,6 +1054,7 @@ class experiment:
|
|
|
1051
1054
|
# Put back old experiment as current one
|
|
1052
1055
|
experiment.CURRENT = self.old_experiment
|
|
1053
1056
|
if self.server:
|
|
1057
|
+
logger.info("Stopping web server")
|
|
1054
1058
|
self.server.stop()
|
|
1055
1059
|
|
|
1056
1060
|
async def update_task_output_count(self, delta: int):
|
{experimaestro-1.7.0rc2 → experimaestro-1.7.1}/src/experimaestro/scheduler/dynamic_outputs.py
RENAMED
|
@@ -135,7 +135,7 @@ class TaskOutputsWorker(threading.Thread):
|
|
|
135
135
|
"""This worker process dynamic output queue for one experiment"""
|
|
136
136
|
|
|
137
137
|
def __init__(self, xp: experiment):
|
|
138
|
-
super().__init__(name="task outputs worker")
|
|
138
|
+
super().__init__(name="task outputs worker", daemon=True)
|
|
139
139
|
self.queue = queue.Queue()
|
|
140
140
|
self.xp = xp
|
|
141
141
|
|
|
@@ -51,6 +51,8 @@ class PythonScriptBuilder:
|
|
|
51
51
|
self.lockfiles: List[Path] = []
|
|
52
52
|
self.notificationURL: Optional[str] = None
|
|
53
53
|
self.command: Optional[AbstractCommand] = None
|
|
54
|
+
|
|
55
|
+
# This is used to serialize the full process identifier on disk
|
|
54
56
|
self.processtype = "local"
|
|
55
57
|
|
|
56
58
|
def write(self, job: CommandLineJob):
|
|
@@ -63,7 +65,7 @@ class PythonScriptBuilder:
|
|
|
63
65
|
job {CommandLineJob} -- [description]
|
|
64
66
|
|
|
65
67
|
Returns:
|
|
66
|
-
|
|
68
|
+
str -- The script path on disk
|
|
67
69
|
"""
|
|
68
70
|
assert isinstance(
|
|
69
71
|
job, CommandLineJob
|
|
@@ -10,19 +10,13 @@ from docutils import nodes
|
|
|
10
10
|
from sphinx.application import Sphinx
|
|
11
11
|
from sphinx import addnodes
|
|
12
12
|
from sphinx.ext.autodoc import ClassDocumenter, Documenter, restify
|
|
13
|
-
from sphinx.locale import _
|
|
13
|
+
from sphinx.locale import _
|
|
14
14
|
from sphinx.util import inspect, logging
|
|
15
|
-
from sphinx.domains.python import
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
PyObject,
|
|
19
|
-
directives,
|
|
20
|
-
desc_signature,
|
|
21
|
-
_parse_annotation,
|
|
22
|
-
)
|
|
15
|
+
from sphinx.domains.python import PyClasslike, PyAttribute, directives
|
|
16
|
+
from sphinx.domains.python import PyObject # noqa: F401
|
|
17
|
+
from sphinx.addnodes import desc_signature
|
|
23
18
|
from sphinx.util.typing import OptionSpec
|
|
24
19
|
from docutils.statemachine import StringList
|
|
25
|
-
import logging
|
|
26
20
|
import re
|
|
27
21
|
|
|
28
22
|
from experimaestro import Config, Task
|
|
@@ -97,9 +91,6 @@ class ConfigDocumenter(ClassDocumenter):
|
|
|
97
91
|
can_document = inspect.isclass(member) and issubclass(member, Config)
|
|
98
92
|
return can_document
|
|
99
93
|
|
|
100
|
-
def add_directive_header(self, sig: str) -> None:
|
|
101
|
-
super().add_directive_header(sig)
|
|
102
|
-
|
|
103
94
|
def get_object_members(self, want_all: bool): # -> Tuple[bool, ObjectMembers]:
|
|
104
95
|
r = super().get_object_members(want_all)
|
|
105
96
|
return r
|
|
@@ -157,7 +148,7 @@ class ConfigDocumenter(ClassDocumenter):
|
|
|
157
148
|
|
|
158
149
|
# Our specific code
|
|
159
150
|
if issubclass(self.object, Task):
|
|
160
|
-
self.add_line(
|
|
151
|
+
self.add_line(" :task:", sourcename)
|
|
161
152
|
|
|
162
153
|
# add inheritance info, if wanted
|
|
163
154
|
if not self.doc_as_attr and self.options.show_inheritance:
|
|
@@ -196,7 +187,6 @@ class ConfigDocumenter(ClassDocumenter):
|
|
|
196
187
|
def add_content(
|
|
197
188
|
self, more_content: Optional[StringList], no_docstring: bool = False
|
|
198
189
|
) -> None:
|
|
199
|
-
|
|
200
190
|
xpminfo = getxpminfo(self.object)
|
|
201
191
|
source_name = self.get_sourcename()
|
|
202
192
|
|
|
@@ -214,9 +204,9 @@ class ConfigDocumenter(ClassDocumenter):
|
|
|
214
204
|
source_name,
|
|
215
205
|
)
|
|
216
206
|
if argument.generator:
|
|
217
|
-
self.add_line(
|
|
207
|
+
self.add_line(" :generated:", source_name)
|
|
218
208
|
elif argument.constant:
|
|
219
|
-
self.add_line(
|
|
209
|
+
self.add_line(" :constant:", source_name)
|
|
220
210
|
|
|
221
211
|
# self.add_line("", source_name)
|
|
222
212
|
if argument.help:
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# slurm test suite
|
|
4
4
|
|
|
5
|
+
pwd 1>&2
|
|
6
|
+
CURDIR="$(realpath "$(dirname "$0")"/..)"
|
|
7
|
+
|
|
5
8
|
# Where we store the jobs
|
|
6
|
-
XPM_SLURM_DIR="$
|
|
9
|
+
XPM_SLURM_DIR="${CURDIR}/slurm"
|
|
7
10
|
if ! test -d "$XPM_SLURM_DIR"; then
|
|
8
11
|
echo "Directory $XPM_SLURM_DIR does not exist" 1>&2
|
|
9
12
|
exit 1
|
|
@@ -51,8 +54,19 @@ while true; do
|
|
|
51
54
|
esac
|
|
52
55
|
done
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
chdir=$(pwd)
|
|
58
|
+
while IFS= read -r line; do
|
|
59
|
+
case "$line" in
|
|
60
|
+
"#SBATCH --output="*)stdout=${line#*#SBATCH --output=};;
|
|
61
|
+
"#SBATCH --error="*) stderr=${line#*#SBATCH --error=};;
|
|
62
|
+
"#SBATCH --chdir="*) chdir=${line#*#SBATCH --chdir=};;
|
|
63
|
+
esac
|
|
64
|
+
done < "$1"
|
|
65
|
+
|
|
66
|
+
cd "$chdir"
|
|
67
|
+
echo "Starting $@ ${args[@]} > $stdout 2> $stderr" >&2
|
|
55
68
|
(
|
|
69
|
+
export PATH="${CURDIR}/bin:$PATH"
|
|
56
70
|
eval "$@" "${args[@]}"
|
|
57
71
|
echo $? > "$XPM_SLURM_DIR/jobs/$$.status"
|
|
58
72
|
) > $stdout 2> $stderr &
|
|
@@ -80,10 +80,14 @@ def takeback(launcher, datapath, txp1, txp2):
|
|
|
80
80
|
waiting = datapath / "waiting"
|
|
81
81
|
|
|
82
82
|
with txp1:
|
|
83
|
-
WaitUntilTouched
|
|
83
|
+
task: WaitUntilTouched = WaitUntilTouched(
|
|
84
|
+
touching=touching, waiting=waiting
|
|
85
|
+
).submit(launcher=launcher)
|
|
84
86
|
|
|
85
87
|
logger.debug("Waiting for task to create 'touching' file")
|
|
86
88
|
while not touching.is_file():
|
|
89
|
+
if task.__xpm__.job.state.finished():
|
|
90
|
+
raise Exception("Job has finished... too early")
|
|
87
91
|
time.sleep(0.01)
|
|
88
92
|
|
|
89
93
|
with txp2:
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
import "google/protobuf/any.proto";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
message Envelope {
|
|
6
|
-
google.protobuf.Any payload = 1;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
message LevelInformation {
|
|
10
|
-
int32 level = 1;
|
|
11
|
-
|
|
12
|
-
optional string desc = 2; // Optional in proto3 is handled by default unless you want to use 'optional'
|
|
13
|
-
float progress = 3;
|
|
14
|
-
|
|
15
|
-
float previous_progress = 4;
|
|
16
|
-
string previous_desc = 5;
|
|
17
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
-
# source: src/experimaestro/notifications.proto
|
|
5
|
-
# Protobuf Python Version: 5.29.3
|
|
6
|
-
"""Generated protocol buffer code."""
|
|
7
|
-
from google.protobuf import descriptor as _descriptor
|
|
8
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
-
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
-
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
-
from google.protobuf.internal import builder as _builder
|
|
12
|
-
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
-
_runtime_version.Domain.PUBLIC,
|
|
14
|
-
5,
|
|
15
|
-
29,
|
|
16
|
-
3,
|
|
17
|
-
'',
|
|
18
|
-
'src/experimaestro/notifications.proto'
|
|
19
|
-
)
|
|
20
|
-
# @@protoc_insertion_point(imports)
|
|
21
|
-
|
|
22
|
-
_sym_db = _symbol_database.Default()
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%src/experimaestro/notifications.proto\x1a\x19google/protobuf/any.proto\"1\n\x08\x45nvelope\x12%\n\x07payload\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"\x81\x01\n\x10LevelInformation\x12\r\n\x05level\x18\x01 \x01(\x05\x12\x11\n\x04\x64\x65sc\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08progress\x18\x03 \x01(\x02\x12\x19\n\x11previous_progress\x18\x04 \x01(\x02\x12\x15\n\rprevious_desc\x18\x05 \x01(\tB\x07\n\x05_descb\x06proto3')
|
|
29
|
-
|
|
30
|
-
_globals = globals()
|
|
31
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
32
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'src.experimaestro.notifications_pb2', _globals)
|
|
33
|
-
if not _descriptor._USE_C_DESCRIPTORS:
|
|
34
|
-
DESCRIPTOR._loaded_options = None
|
|
35
|
-
_globals['_ENVELOPE']._serialized_start=68
|
|
36
|
-
_globals['_ENVELOPE']._serialized_end=117
|
|
37
|
-
_globals['_LEVELINFORMATION']._serialized_start=120
|
|
38
|
-
_globals['_LEVELINFORMATION']._serialized_end=249
|
|
39
|
-
# @@protoc_insertion_point(module_scope)
|