labnotes 0.2.31__tar.gz → 0.2.33__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.31 → labnotes-0.2.33}/PKG-INFO +1 -1
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/init.py +2 -0
- labnotes-0.2.33/src/labnotes/runner/finalize_lost_runs.py +32 -0
- labnotes-0.2.33/src/labnotes/runner/mark_lost.py +24 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/write_run_json.py +2 -1
- labnotes-0.2.31/src/labnotes/runner/finalize_lost_runs.py +0 -33
- {labnotes-0.2.31 → labnotes-0.2.33}/.gitignore +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/CHANGELOG.md +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/MIGRATIONS.md +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/README.md +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/conftest.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/pyproject.toml +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/__main__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/cli.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/command_line_group.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/config_migration.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/context.md +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/copy_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/create_app.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/create_note.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/client.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/command.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/ensure.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/marker.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/server.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon/socket_path.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/daemon_command.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/data_html.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/experiment_definition.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/experiments.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/format_started.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/format_value.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/get_state.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/grid_cell.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/is_non_negative_number.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/latest_log.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/load_config.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/load_run.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/log.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/log_path.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/memory_interval.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/models.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/note_path.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/output_html.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/param_names.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/parse_param_value.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/parse_params.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/parse_subset.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/pivot_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/read_config.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/read_path.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/retries.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/run_columns.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/run_output.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/cgroup_memory.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/check_args.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/check_hook_placeholders.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/check_subset.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/claim_run.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/command_flags.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/container_cgroup.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/container_memory.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/continue_run.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/docker_output.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/fill_dirs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/fill_experiment_env.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/first_invocation.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/flag_name.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/group_args.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/hold_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/in_subset.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/invocation_hook.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/invocation_meta.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/override_flags.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/placeholders.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/project_snapshot.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/read_experiment_config.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/record_memory.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_git.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_locked.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/run_state.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/start_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/untracked_diff.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/runs_view_command.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/save_note.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/server.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/set_state.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/state_path.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/THIRD_PARTY_NOTICES +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/ansi_up.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/atomic-editor-editor-inline-preview.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-3VL5A6CI.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-DDFT2RE5.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-GRK3PUFM.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-HETKD2IB.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-JSBRDJBE.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-KGFOUVBD.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-LAFDP4SS.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-LFGFNL4F.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-LRGARZ6Y.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-LZVVMIXK.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-SVHN5VMN.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-YFJJZMCS.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-YONOI2RA.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/chunk-ZO3BUX3P.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-autocomplete.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-commands.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-lang-python.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-language.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-state.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-streamparser.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/codemirror-view.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/crelt.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/diff-match-patch.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/lezer-common.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/lezer-highlight.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/lezer-lr.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/lezer-markdown.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/lezer-python.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/marijn-find-cluster-break.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/style-mod.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/vendor/w3c-keyname.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/list_resumable_runs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_memory.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/read_run_file.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/runs_columns.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/check_view_response.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/format_cell.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/guard_view.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/load_view.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/native_rows.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/run_panel.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/runs_browser.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/runs_view.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/table_columns.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/table_rows.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/view_column.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/view_pane.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/view_process.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/tui/view_switcher.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/process_alive.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/utils/tree_usage.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/__init__.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/answer.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/build.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/changed.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/experiment.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/respond.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view/serve.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/view_specs.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/testing-conventions.toml +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/tests/conftest.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/tests/e2e/conftest.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/tests/integration/conftest.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/tests/perf/conftest.py +0 -0
- {labnotes-0.2.31 → labnotes-0.2.33}/uv.lock +0 -0
|
@@ -15,4 +15,6 @@ def init() -> None:
|
|
|
15
15
|
file.write(default_config_text(single=single))
|
|
16
16
|
except FileExistsError as error:
|
|
17
17
|
raise click.ClickException(f"{path} already exists.") from error
|
|
18
|
+
except OSError as error:
|
|
19
|
+
raise click.ClickException(f"Cannot write {path}: {error.strerror}") from error
|
|
18
20
|
click.echo(f"Wrote {path}")
|
|
@@ -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,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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|