labnotes 0.2.32__tar.gz → 0.2.34__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.
- {labnotes-0.2.32 → labnotes-0.2.34}/PKG-INFO +1 -1
- labnotes-0.2.34/src/labnotes/runner/finalize_lost_runs.py +32 -0
- labnotes-0.2.34/src/labnotes/runner/mark_lost.py +24 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/read_experiment_config.py +7 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/write_run_json.py +2 -1
- labnotes-0.2.32/src/labnotes/runner/finalize_lost_runs.py +0 -33
- {labnotes-0.2.32 → labnotes-0.2.34}/.gitignore +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/CHANGELOG.md +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/MIGRATIONS.md +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/README.md +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/conftest.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/pyproject.toml +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/__main__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/cli.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/command_line_group.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/config_migration.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/context.md +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/copy_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/create_app.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/create_note.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/client.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/command.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/ensure.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/marker.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/server.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon/socket_path.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/daemon_command.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/data_html.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/experiment_definition.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/experiments.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/format_started.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/format_value.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/get_state.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/grid_cell.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/init.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/is_non_negative_number.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/latest_log.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/load_config.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/load_run.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/log.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/log_path.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/memory_interval.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/models.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/note_path.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/output_html.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/param_names.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/parse_param_value.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/parse_params.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/parse_subset.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/pivot_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/read_config.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/read_path.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/retries.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/run_columns.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/run_output.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/cgroup_memory.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/check_args.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/check_hook_placeholders.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/check_subset.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/claim_run.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/command_flags.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/container_cgroup.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/container_memory.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/continue_run.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/docker_output.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/fill_dirs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/fill_experiment_env.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/first_invocation.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/flag_name.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/group_args.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/hold_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/in_subset.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/invocation_hook.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/invocation_meta.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/override_flags.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/placeholders.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/project_snapshot.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/record_memory.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_git.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_locked.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/run_state.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/start_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/untracked_diff.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/runs_view_command.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/save_note.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/server.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/set_state.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/state_path.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/THIRD_PARTY_NOTICES +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/ansi_up.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/atomic-editor-editor-inline-preview.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-3VL5A6CI.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-DDFT2RE5.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-GRK3PUFM.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-HETKD2IB.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-JSBRDJBE.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-KGFOUVBD.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-LAFDP4SS.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-LFGFNL4F.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-LRGARZ6Y.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-LZVVMIXK.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-SVHN5VMN.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-YFJJZMCS.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-YONOI2RA.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/chunk-ZO3BUX3P.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-autocomplete.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-commands.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-lang-python.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-language.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-state.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-streamparser.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/codemirror-view.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/crelt.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/diff-match-patch.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/lezer-common.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/lezer-highlight.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/lezer-lr.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/lezer-markdown.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/lezer-python.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/marijn-find-cluster-break.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/style-mod.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/vendor/w3c-keyname.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/list_resumable_runs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_memory.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/read_run_file.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/runs_columns.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/check_view_response.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/format_cell.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/guard_view.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/load_view.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/native_rows.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/run_panel.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/runs_browser.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/runs_view.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/table_columns.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/table_rows.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/view_column.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/view_pane.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/view_process.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/tui/view_switcher.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/process_alive.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/utils/tree_usage.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/__init__.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/answer.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/build.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/changed.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/experiment.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/respond.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view/serve.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/view_specs.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/testing-conventions.toml +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/tests/conftest.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/tests/e2e/conftest.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/tests/integration/conftest.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/tests/perf/conftest.py +0 -0
- {labnotes-0.2.32 → labnotes-0.2.34}/uv.lock +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from labnotes.list_runs import UNFINISHED
|
|
4
|
+
from labnotes.models import LabnotesConfig
|
|
5
|
+
from labnotes.runner.claim_run import LOCK_FILE, claim_run
|
|
6
|
+
from labnotes.runner.mark_lost import mark_lost
|
|
7
|
+
from labnotes.tables.open_tables import open_tables
|
|
8
|
+
from labnotes.utils.process_alive import process_alive
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async def finalize_lost_runs(config: LabnotesConfig) -> None:
|
|
12
|
+
rows = await open_tables(config).query(
|
|
13
|
+
f"SELECT folder, run FROM runs WHERE {UNFINISHED}"
|
|
14
|
+
)
|
|
15
|
+
for row in rows:
|
|
16
|
+
folder = config.root / str(row["folder"])
|
|
17
|
+
if (folder / LOCK_FILE).exists():
|
|
18
|
+
lock = claim_run(folder)
|
|
19
|
+
if lock is None:
|
|
20
|
+
continue
|
|
21
|
+
try:
|
|
22
|
+
mark_lost(folder)
|
|
23
|
+
finally:
|
|
24
|
+
os.close(lock)
|
|
25
|
+
else:
|
|
26
|
+
run = json.loads(str(row["run"]))
|
|
27
|
+
pid, created = run.get("pid"), run.get("pid_created")
|
|
28
|
+
if isinstance(pid, int) and process_alive(
|
|
29
|
+
pid, created if isinstance(created, int | float) else None
|
|
30
|
+
):
|
|
31
|
+
continue
|
|
32
|
+
mark_lost(folder)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import time
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from labnotes.runner.write_run_json import write_run_json
|
|
6
|
+
from labnotes.tables.iso_time import iso_time
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def mark_lost(folder: Path) -> None:
|
|
10
|
+
try:
|
|
11
|
+
run = json.loads((folder / "run.json").read_text(encoding="utf-8"))
|
|
12
|
+
except (OSError, ValueError):
|
|
13
|
+
return
|
|
14
|
+
if (
|
|
15
|
+
not isinstance(run, dict)
|
|
16
|
+
or run.get("ended") is not None
|
|
17
|
+
or run.get("exit_code") is not None
|
|
18
|
+
):
|
|
19
|
+
return
|
|
20
|
+
lost = {"ended": iso_time(time.time()), "ended_by": "lost"}
|
|
21
|
+
run |= lost
|
|
22
|
+
if invocations := run.get("invocations"):
|
|
23
|
+
invocations[-1] |= lost
|
|
24
|
+
write_run_json(folder, run)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import re
|
|
2
3
|
import tomllib
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
from typing import Any
|
|
@@ -13,6 +14,7 @@ from labnotes.is_positive_int import is_positive_int
|
|
|
13
14
|
from labnotes.config_migration import MISSING_CONTINUES, REMOVED_MODE
|
|
14
15
|
from labnotes.retries import RETRY_SECONDS
|
|
15
16
|
|
|
17
|
+
SHELL_IDENTIFIER = re.compile(r"[A-Za-z_][A-Za-z0-9_]*\Z")
|
|
16
18
|
SETTINGS = {
|
|
17
19
|
"name",
|
|
18
20
|
"command",
|
|
@@ -103,6 +105,11 @@ def read_experiment_config(
|
|
|
103
105
|
for key, value in env.items():
|
|
104
106
|
if key.startswith("LABNOTES_"):
|
|
105
107
|
raise ValueError(f"{path}: env.{key} is reserved for labnotes")
|
|
108
|
+
if not SHELL_IDENTIFIER.match(key):
|
|
109
|
+
raise ValueError(
|
|
110
|
+
f"{path}: env.{key} must be a shell identifier"
|
|
111
|
+
" (letters, digits, underscore; not starting with a digit)"
|
|
112
|
+
)
|
|
106
113
|
if not isinstance(value, str):
|
|
107
114
|
raise ValueError(f"{path}: env.{key} must be a string")
|
|
108
115
|
if "continues" not in values:
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import os
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
def write_run_json(folder: Path, run: dict[str, object]) -> None:
|
|
6
|
-
partial = folder / "run.json.tmp"
|
|
7
|
+
partial = folder / f"run.json.{os.getpid()}.tmp"
|
|
7
8
|
partial.write_text(json.dumps(run, indent=2) + "\n", encoding="utf-8")
|
|
8
9
|
partial.replace(folder / "run.json")
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import time
|
|
3
|
-
|
|
4
|
-
from labnotes.list_runs import UNFINISHED
|
|
5
|
-
from labnotes.models import LabnotesConfig
|
|
6
|
-
from labnotes.runner.claim_run import LOCK_FILE
|
|
7
|
-
from labnotes.runner.run_locked import run_locked
|
|
8
|
-
from labnotes.runner.write_run_json import write_run_json
|
|
9
|
-
from labnotes.tables.iso_time import iso_time
|
|
10
|
-
from labnotes.tables.open_tables import open_tables
|
|
11
|
-
from labnotes.utils.process_alive import process_alive
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
async def finalize_lost_runs(config: LabnotesConfig) -> None:
|
|
15
|
-
rows = await open_tables(config).query(
|
|
16
|
-
f"SELECT folder, run FROM runs WHERE {UNFINISHED}"
|
|
17
|
-
)
|
|
18
|
-
for row in rows:
|
|
19
|
-
run = json.loads(str(row["run"]))
|
|
20
|
-
folder = config.root / str(row["folder"])
|
|
21
|
-
pid, created = run.get("pid"), run.get("pid_created")
|
|
22
|
-
if (folder / LOCK_FILE).exists():
|
|
23
|
-
if run_locked(folder):
|
|
24
|
-
continue
|
|
25
|
-
elif isinstance(pid, int) and process_alive(
|
|
26
|
-
pid, created if isinstance(created, int | float) else None
|
|
27
|
-
):
|
|
28
|
-
continue
|
|
29
|
-
lost = {"ended": iso_time(time.time()), "ended_by": "lost"}
|
|
30
|
-
run |= lost
|
|
31
|
-
if invocations := run.get("invocations"):
|
|
32
|
-
invocations[-1] |= lost
|
|
33
|
-
write_run_json(folder, run)
|
|
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
|
|
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
|
|
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
|
|
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
|