labnotes 0.0.135__tar.gz → 0.0.136__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.135 → labnotes-0.0.136}/PKG-INFO +1 -1
- labnotes-0.0.136/tests/conftest.py +76 -0
- labnotes-0.0.136/tests/e2e/conftest.py +28 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/.gitignore +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/CHANGELOG.md +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/MIGRATIONS.md +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/README.md +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/pyproject.toml +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/__main__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/cli.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/context.md +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/create_app.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/create_note.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/control_run.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/daemon_app.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/daemon_client.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/daemon_running.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/daemon_server.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/describe_status.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/ensure_daemon.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/exit_when_idle.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/finalize_lost_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/last_stderr.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/remote_start.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/run_daemon.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/run_logs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/serve_daemon.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/socket_path.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/stop_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/watch_daemon.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon/watch_status.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/daemon_command.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/data_html.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/experiments.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/format_started.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/format_value.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/get_state.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/grid_cell.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/init.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/is_non_negative_number.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/load_config.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/load_run.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/log.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/log_path.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/memory_interval.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/models.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/modes.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/note_path.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/output_html.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/parse_subset.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/pivot_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/read_config.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/read_path.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/retries.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/run_command.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/run_control.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/run_output.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/run_status.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/cgroup_memory.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/check_args.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/check_subset.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/container_cgroup.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/container_memory.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/docker_output.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/fill_dirs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/fill_experiment_env.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/flag_name.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/hold_folder.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/hook_dirs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/in_subset.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/invocation_hook.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/invocation_meta.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/new_param_run_id.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/param_run_name.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/read_experiment_config.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/record_memory.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/run_git.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runner/write_run_json.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/runs_view_command.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/save_note.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/server.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/set_state.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/state_path.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_memory.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/read_run_file.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/runs_columns.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/check_view_response.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/format_cell.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/group_cells.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/invocation_columns.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/invocation_rows.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/native_rows.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/run_screen.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/runs_view.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/view_column.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/tui/view_process.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/process_alive.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/utils/tree_usage.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/view/__init__.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/view/answer.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/view/build.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/view/respond.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/view/serve.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/testing-conventions.toml +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/tests/integration/conftest.py +0 -0
- {labnotes-0.0.135 → labnotes-0.0.136}/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.136
|
|
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>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import shlex
|
|
2
|
+
import shutil
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
from collections.abc import Iterator
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
BOTBOX_CONTAINER = """
|
|
11
|
+
import os
|
|
12
|
+
import subprocess
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
folder = Path(os.environ["LABNOTES_RUN"])
|
|
16
|
+
labels = folder / "botbox-labels.txt"
|
|
17
|
+
labels.write_text(os.environ["BOTBOX_LABELS"])
|
|
18
|
+
subprocess.run([
|
|
19
|
+
"docker", "run", "--rm", "--label-file", str(labels),
|
|
20
|
+
"--cidfile", str(folder / "container.cid"),
|
|
21
|
+
"python:3.12-slim", "python", "-c",
|
|
22
|
+
"held = b'x' * 200_000_000; print(len(held), flush=True); "
|
|
23
|
+
"import time; time.sleep(3)",
|
|
24
|
+
], check=True)
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
HOOK = """
|
|
28
|
+
import os
|
|
29
|
+
import sys
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
|
|
32
|
+
Path(sys.argv[1] + "-labels.txt").write_text(os.environ["BOTBOX_LABELS"])
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.fixture
|
|
37
|
+
def botbox_caller_labels() -> str:
|
|
38
|
+
return "team=research\npurpose=botbox-memory-proof"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@pytest.fixture
|
|
42
|
+
def botbox_memory_project(tmp_path: Path) -> Iterator[Path]:
|
|
43
|
+
if shutil.which("docker") is None:
|
|
44
|
+
pytest.skip("docker is unavailable")
|
|
45
|
+
try:
|
|
46
|
+
available = subprocess.run(
|
|
47
|
+
["docker", "info"], capture_output=True, timeout=3, check=False
|
|
48
|
+
)
|
|
49
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
50
|
+
pytest.skip("docker daemon is unavailable")
|
|
51
|
+
if available.returncode != 0:
|
|
52
|
+
pytest.skip("docker daemon is unavailable")
|
|
53
|
+
|
|
54
|
+
root = tmp_path / "botbox memory project"
|
|
55
|
+
(root / "exp").mkdir(parents=True)
|
|
56
|
+
(root / ".labnotes.toml").write_text("")
|
|
57
|
+
(root / "script.py").write_text(BOTBOX_CONTAINER)
|
|
58
|
+
(root / "hook.py").write_text(HOOK)
|
|
59
|
+
python = shlex.quote(sys.executable)
|
|
60
|
+
(root / "exp" / "experiment.toml").write_text(
|
|
61
|
+
f'command = "{python} script.py"\n'
|
|
62
|
+
f'setup = "{python} hook.py setup"\n'
|
|
63
|
+
f'teardown = "{python} hook.py teardown"\n'
|
|
64
|
+
"memory_interval = 0.2\n"
|
|
65
|
+
)
|
|
66
|
+
try:
|
|
67
|
+
yield root
|
|
68
|
+
finally:
|
|
69
|
+
# --rm handles normal exits; remove our container if a test times out.
|
|
70
|
+
for cidfile in (root / "exp" / "runs").rglob("container.cid"):
|
|
71
|
+
subprocess.run(
|
|
72
|
+
["docker", "rm", "--force", cidfile.read_text().strip()],
|
|
73
|
+
capture_output=True,
|
|
74
|
+
timeout=10,
|
|
75
|
+
check=False,
|
|
76
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
PACKAGE = Path(__file__).parents[2]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture
|
|
11
|
+
def uvx(tmp_path: Path) -> dict[str, str]:
|
|
12
|
+
# Install this checkout as the uv tool so uvx runs it offline.
|
|
13
|
+
env = {"UV_NO_CONFIG": "1", "UV_TOOL_DIR": str(tmp_path / "tools")}
|
|
14
|
+
constraints = tmp_path / "constraints.txt"
|
|
15
|
+
uv = ["uv", "--directory", str(PACKAGE)]
|
|
16
|
+
subprocess.run(
|
|
17
|
+
[*uv, "export", "-q", "--frozen", "--no-dev", "--no-emit-project"]
|
|
18
|
+
+ ["-o", str(constraints)],
|
|
19
|
+
check=True,
|
|
20
|
+
)
|
|
21
|
+
# Rebuild labnotes so uncommitted source changes are tested, too.
|
|
22
|
+
subprocess.run(
|
|
23
|
+
[*uv, "tool", "install", "-q", "--refresh-package", "labnotes"]
|
|
24
|
+
+ ["-c", str(constraints), "."],
|
|
25
|
+
check=True,
|
|
26
|
+
env={**os.environ, **env, "UV_TOOL_BIN_DIR": str(tmp_path / "bin")},
|
|
27
|
+
)
|
|
28
|
+
return {**env, "UV_OFFLINE": "1"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|