labnotes 0.0.133__tar.gz → 0.0.134__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.0.133 → labnotes-0.0.134}/PKG-INFO +1 -1
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/context.md +6 -1
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/execute_run.py +2 -0
- labnotes-0.0.134/src/labnotes/runner/run_git.py +22 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/.gitignore +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/CHANGELOG.md +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/MIGRATIONS.md +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/README.md +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/pyproject.toml +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/__main__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/cli.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/create_app.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/create_note.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/control_run.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/daemon_app.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/daemon_client.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/daemon_running.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/daemon_server.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/describe_status.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/ensure_daemon.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/exit_when_idle.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/finalize_lost_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/last_stderr.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/remote_start.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/run_daemon.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/run_logs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/serve_daemon.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/socket_path.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/stop_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/watch_daemon.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon/watch_status.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/daemon_command.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/data_html.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/experiments.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/format_started.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/format_value.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/get_state.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/grid_cell.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/init.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/is_non_negative_number.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/load_config.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/load_run.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/log.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/log_path.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/memory_interval.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/models.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/modes.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/note_path.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/output_html.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/parse_subset.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/pivot_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/read_config.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/read_path.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/retries.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/run_command.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/run_control.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/run_output.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/run_status.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/cgroup_memory.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/check_args.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/check_subset.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/container_cgroup.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/container_memory.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/docker_output.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/fill_dirs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/fill_experiment_env.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/flag_name.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/hold_folder.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/hook_dirs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/in_subset.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/invocation_hook.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/invocation_meta.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/new_param_run_id.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/param_run_name.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/read_experiment_config.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/record_memory.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runner/write_run_json.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/runs_view_command.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/save_note.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/server.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/set_state.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/state_path.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_memory.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/read_run_file.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/runs_columns.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/check_view_response.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/format_cell.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/group_cells.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/invocation_columns.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/invocation_rows.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/native_rows.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/run_screen.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/runs_view.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/view_column.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/tui/view_process.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/process_alive.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/utils/tree_usage.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/view/__init__.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/view/answer.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/view/build.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/view/respond.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/view/serve.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/testing-conventions.toml +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/tests/integration/conftest.py +0 -0
- {labnotes-0.0.133 → labnotes-0.0.134}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: labnotes
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.134
|
|
4
4
|
Summary: Browse experiment designs, notes, and run data from a folder.
|
|
5
5
|
Project-URL: Repository, https://github.com/thekevinscott/labnotes
|
|
6
6
|
Author-email: Kevin Scott <me@thekevinscott.com>
|
|
@@ -80,7 +80,7 @@ Both placeholders are shell-quoted.
|
|
|
80
80
|
Each param is appended as `--name value`, with the name as written (use
|
|
81
81
|
`source-language` for a `--source-language` flag), booleans as 0 or 1, and lists
|
|
82
82
|
and tables as JSON. labnotes writes `run.json` (params, `command`, created,
|
|
83
|
-
ended, exit code, `ended_by`, `signal`), `stdout.log` and `stderr.log` to the
|
|
83
|
+
ended, exit code, `ended_by`, `signal`, `git`), `stdout.log` and `stderr.log` to the
|
|
84
84
|
run folder. `command` is the shell command the run executed, with the placeholders
|
|
85
85
|
and the params filled in, written before the run starts, so a killed run has it
|
|
86
86
|
and a later edit to `experiment.toml` doesn't hide what a run did. `ended_by` is `"timeout"`, `"stop"` (labnotes stopped it),
|
|
@@ -88,6 +88,11 @@ and a later edit to `experiment.toml` doesn't hide what a run did. `ended_by` is
|
|
|
88
88
|
`"lost"` (its process died unseen; the daemon marks these when it starts, with
|
|
89
89
|
`ended` set and `exit_code` null) or null (the script exited itself). `signal` is the signal number read from the
|
|
90
90
|
exit code (negative, or 128 + N from the shell), else null.
|
|
91
|
+
`git` is `{"commit": "<full HEAD SHA>", "dirty": false}`, read from the command's
|
|
92
|
+
working directory before each run starts, including retries. `dirty` counts staged
|
|
93
|
+
and unstaged changes to tracked files only, ignoring untracked files. `git` is
|
|
94
|
+
null outside a Git repository, if Git is missing, or if lookup fails (including
|
|
95
|
+
a repository with no commits). Older records lack the key.
|
|
91
96
|
`meta` in `experiment.toml` (or `[experiment]` in `.labnotes.toml`) is a shell
|
|
92
97
|
command that prints one JSON object, such as the git commit. labnotes runs it
|
|
93
98
|
once from the root when `run` starts and copies it into every run's `run.json`
|
|
@@ -10,6 +10,7 @@ import psutil
|
|
|
10
10
|
from labnotes.log_path import LOG_ENV, RUN_ENV
|
|
11
11
|
from labnotes.runner.exit_signal import exit_signal
|
|
12
12
|
from labnotes.runner.record_memory import record_memory
|
|
13
|
+
from labnotes.runner.run_git import run_git
|
|
13
14
|
from labnotes.runner.shell_command import shell_command
|
|
14
15
|
from labnotes.runner.stop_then_kill import GRACE_SECONDS
|
|
15
16
|
from labnotes.runner.wait_for_tree import wait_for_tree
|
|
@@ -48,6 +49,7 @@ async def execute_run(
|
|
|
48
49
|
"error": None,
|
|
49
50
|
"ended_by": None,
|
|
50
51
|
"signal": None,
|
|
52
|
+
"git": await asyncio.to_thread(run_git, root),
|
|
51
53
|
}
|
|
52
54
|
if args:
|
|
53
55
|
run["args"] = list(args)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def run_git(root: Path) -> dict[str, str | bool] | None:
|
|
6
|
+
try:
|
|
7
|
+
commit = subprocess.check_output(
|
|
8
|
+
["git", "rev-parse", "HEAD"],
|
|
9
|
+
cwd=root,
|
|
10
|
+
stderr=subprocess.DEVNULL,
|
|
11
|
+
timeout=3,
|
|
12
|
+
)
|
|
13
|
+
status = subprocess.check_output(
|
|
14
|
+
["git", "status", "--porcelain", "--untracked-files=no"],
|
|
15
|
+
cwd=root,
|
|
16
|
+
stderr=subprocess.DEVNULL,
|
|
17
|
+
timeout=3,
|
|
18
|
+
)
|
|
19
|
+
return {"commit": commit.decode("ascii").strip(), "dirty": bool(status)}
|
|
20
|
+
except (OSError, subprocess.SubprocessError, UnicodeError):
|
|
21
|
+
# Git metadata is optional; a failed lookup must not prevent the run.
|
|
22
|
+
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|