labnotes 0.2.6__tar.gz → 0.2.7__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.
Files changed (216) hide show
  1. {labnotes-0.2.6 → labnotes-0.2.7}/PKG-INFO +1 -1
  2. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/cli.py +2 -0
  3. labnotes-0.2.7/src/labnotes/command_line_group.py +20 -0
  4. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/experiments.py +2 -0
  5. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/execute_run.py +6 -0
  6. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/first_invocation.py +2 -0
  7. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/run_experiment.py +2 -0
  8. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/start_experiment.py +2 -0
  9. {labnotes-0.2.6 → labnotes-0.2.7}/.gitignore +0 -0
  10. {labnotes-0.2.6 → labnotes-0.2.7}/CHANGELOG.md +0 -0
  11. {labnotes-0.2.6 → labnotes-0.2.7}/MIGRATIONS.md +0 -0
  12. {labnotes-0.2.6 → labnotes-0.2.7}/README.md +0 -0
  13. {labnotes-0.2.6 → labnotes-0.2.7}/pyproject.toml +0 -0
  14. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/__init__.py +0 -0
  15. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/__main__.py +0 -0
  16. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/asset_url.py +0 -0
  17. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/check_counts.py +0 -0
  18. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/compose_experiment.py +0 -0
  19. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/context.md +0 -0
  20. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/context_guide.py +0 -0
  21. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/copy_experiment.py +0 -0
  22. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/count_groups.py +0 -0
  23. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/count_runs.py +0 -0
  24. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/create_app.py +0 -0
  25. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/create_experiment.py +0 -0
  26. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/create_note.py +0 -0
  27. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/data_html.py +0 -0
  28. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/default_config_text.py +0 -0
  29. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/default_counts.py +0 -0
  30. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/drain_watch.py +0 -0
  31. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/experiment_definition.py +0 -0
  32. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/experiment_notes.py +0 -0
  33. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/experiment_runs.py +0 -0
  34. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/file_changes.py +0 -0
  35. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/format_duration.py +0 -0
  36. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/format_started.py +0 -0
  37. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/format_value.py +0 -0
  38. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/get_state.py +0 -0
  39. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/grid_cell.py +0 -0
  40. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/group_runs.py +0 -0
  41. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/init.py +0 -0
  42. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/invocation_started.py +0 -0
  43. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/is_non_negative_int.py +0 -0
  44. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/is_non_negative_number.py +0 -0
  45. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/is_positive_int.py +0 -0
  46. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/latest_log.py +0 -0
  47. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/list_experiments.py +0 -0
  48. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/list_runs.py +0 -0
  49. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/load_config.py +0 -0
  50. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/load_experiment.py +0 -0
  51. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/load_run.py +0 -0
  52. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/log.py +0 -0
  53. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/log_path.py +0 -0
  54. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/memory_interval.py +0 -0
  55. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/models.py +0 -0
  56. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/modes.py +0 -0
  57. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/nests_runs.py +0 -0
  58. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/note_path.py +0 -0
  59. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/notebook_kernel.py +0 -0
  60. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/output_html.py +0 -0
  61. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/parse_param_value.py +0 -0
  62. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/parse_params.py +0 -0
  63. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/parse_run_view.py +0 -0
  64. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/parse_subset.py +0 -0
  65. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/pivot_runs.py +0 -0
  66. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/print_rows.py +0 -0
  67. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/python_blocks.py +0 -0
  68. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/read_config.py +0 -0
  69. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/read_path.py +0 -0
  70. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/render_markdown.py +0 -0
  71. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/retries.py +0 -0
  72. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/run_output.py +0 -0
  73. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/__init__.py +0 -0
  74. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/cgroup_memory.py +0 -0
  75. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/check_args.py +0 -0
  76. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/check_hook_placeholders.py +0 -0
  77. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/check_subset.py +0 -0
  78. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/claim_run.py +0 -0
  79. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/command_flags.py +0 -0
  80. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/container_cgroup.py +0 -0
  81. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/container_memory.py +0 -0
  82. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/continue_run.py +0 -0
  83. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/describe_event.py +0 -0
  84. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/docker_output.py +0 -0
  85. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/exit_signal.py +0 -0
  86. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/fill_dirs.py +0 -0
  87. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/fill_experiment_env.py +0 -0
  88. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/finalize_lost_runs.py +0 -0
  89. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/flag_name.py +0 -0
  90. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/group_args.py +0 -0
  91. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/in_subset.py +0 -0
  92. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/invocation_hook.py +0 -0
  93. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/invocation_meta.py +0 -0
  94. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/new_param_run_id.py +0 -0
  95. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/new_run_id.py +0 -0
  96. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/new_stamped_run_id.py +0 -0
  97. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/override_flags.py +0 -0
  98. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/param_args.py +0 -0
  99. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/param_grid.py +0 -0
  100. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/param_run_name.py +0 -0
  101. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/placeholders.py +0 -0
  102. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/plan_runs.py +0 -0
  103. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/prepare_experiment.py +0 -0
  104. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/project_snapshot.py +0 -0
  105. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/read_experiment_config.py +0 -0
  106. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/record_memory.py +0 -0
  107. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/run_folder.py +0 -0
  108. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/run_git.py +0 -0
  109. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/run_headless.py +0 -0
  110. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/run_locked.py +0 -0
  111. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/runs_parent.py +0 -0
  112. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/shell_command.py +0 -0
  113. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/signal_tree.py +0 -0
  114. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/stop_then_kill.py +0 -0
  115. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/untracked_diff.py +0 -0
  116. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/wait_for_tree.py +0 -0
  117. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runner/write_run_json.py +0 -0
  118. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/runs_view_command.py +0 -0
  119. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/save_conflict_copy.py +0 -0
  120. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/save_note.py +0 -0
  121. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/saved_outputs.py +0 -0
  122. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/serve_app.py +0 -0
  123. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/server.py +0 -0
  124. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/set_state.py +0 -0
  125. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/shared_params.py +0 -0
  126. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/sort_href.py +0 -0
  127. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/sql_quote.py +0 -0
  128. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/state_path.py +0 -0
  129. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/elapsed.js +0 -0
  130. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/experiment.js +0 -0
  131. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/labnotes.css +0 -0
  132. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/local-time.js +0 -0
  133. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/new-note.js +0 -0
  134. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/note-edit.js +0 -0
  135. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/note-editor.js +0 -0
  136. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/row-link.js +0 -0
  137. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/run-cell.js +0 -0
  138. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/run-output.js +0 -0
  139. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/static/view-toggle.js +0 -0
  140. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/summarize_config.py +0 -0
  141. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/__init__.py +0 -0
  142. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/experiment_rows.py +0 -0
  143. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/experiment_run_ids.py +0 -0
  144. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/experiment_toml.py +0 -0
  145. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/experiments_ddl.py +0 -0
  146. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/file_prefix.py +0 -0
  147. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/file_text.py +0 -0
  148. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/iso_time.py +0 -0
  149. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/list_experiment_runs.py +0 -0
  150. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/list_resumable_runs.py +0 -0
  151. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/note_text.py +0 -0
  152. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/open_tables.py +0 -0
  153. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/path_glob.py +0 -0
  154. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/path_pattern.py +0 -0
  155. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_blocks.py +0 -0
  156. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_experiment.py +0 -0
  157. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_file.py +0 -0
  158. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_log.py +0 -0
  159. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_memory.py +0 -0
  160. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_run.py +0 -0
  161. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/read_run_file.py +0 -0
  162. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/runs_columns.py +0 -0
  163. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tables/summarize_experiments.py +0 -0
  164. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/base.html +0 -0
  165. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/editor_imports.html +0 -0
  166. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/experiment.html +0 -0
  167. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/index.html +0 -0
  168. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/note.html +0 -0
  169. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/templates/run.html +0 -0
  170. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/__init__.py +0 -0
  171. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/browse_app.py +0 -0
  172. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/browse_tui.py +0 -0
  173. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/check_view_response.py +0 -0
  174. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/config.py +0 -0
  175. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/dim.py +0 -0
  176. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/experiment_screen.py +0 -0
  177. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/experiments_screen.py +0 -0
  178. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/fill_table.py +0 -0
  179. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/format_cell.py +0 -0
  180. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/format_elapsed.py +0 -0
  181. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/group_cells.py +0 -0
  182. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/invocation_columns.py +0 -0
  183. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/invocation_rows.py +0 -0
  184. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/leave_prompt.py +0 -0
  185. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/log_block.py +0 -0
  186. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/log_blocks.py +0 -0
  187. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/native_rows.py +0 -0
  188. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/reload_on_change.py +0 -0
  189. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/run_app.py +0 -0
  190. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/run_cells.py +0 -0
  191. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/run_output.py +0 -0
  192. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/run_screen.py +0 -0
  193. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/run_tui.py +0 -0
  194. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/runs_table.py +0 -0
  195. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/runs_view.py +0 -0
  196. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/stopped_title.py +0 -0
  197. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/view_column.py +0 -0
  198. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/tui/view_process.py +0 -0
  199. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/__init__.py +0 -0
  200. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/format_bytes.py +0 -0
  201. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/process_alive.py +0 -0
  202. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/run_usage.py +0 -0
  203. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/tree_rss.py +0 -0
  204. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/utils/tree_usage.py +0 -0
  205. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/view/__init__.py +0 -0
  206. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/view/answer.py +0 -0
  207. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/view/build.py +0 -0
  208. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/view/respond.py +0 -0
  209. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/view/serve.py +0 -0
  210. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/wait_for_note.py +0 -0
  211. {labnotes-0.2.6 → labnotes-0.2.7}/src/labnotes/watch_rows.py +0 -0
  212. {labnotes-0.2.6 → labnotes-0.2.7}/testing-conventions.toml +0 -0
  213. {labnotes-0.2.6 → labnotes-0.2.7}/tests/conftest.py +0 -0
  214. {labnotes-0.2.6 → labnotes-0.2.7}/tests/e2e/conftest.py +0 -0
  215. {labnotes-0.2.6 → labnotes-0.2.7}/tests/integration/conftest.py +0 -0
  216. {labnotes-0.2.6 → labnotes-0.2.7}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: labnotes
3
- Version: 0.2.6
3
+ Version: 0.2.7
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>
@@ -2,6 +2,7 @@ from pathlib import Path
2
2
 
3
3
  import click
4
4
 
5
+ from labnotes.command_line_group import CommandLineGroup
5
6
  from labnotes.context_guide import context_guide
6
7
  from labnotes.experiments import experiments
7
8
  from labnotes.init import init
@@ -11,6 +12,7 @@ from labnotes.server import server
11
12
 
12
13
 
13
14
  @click.group(
15
+ cls=CommandLineGroup,
14
16
  invoke_without_command=True,
15
17
  help="Manage experiments in a folder. `labnotes context` prints a guide for"
16
18
  " coding agents.",
@@ -0,0 +1,20 @@
1
+ import shlex
2
+ from typing import Any
3
+
4
+ import click
5
+
6
+ COMMAND_LINE = "labnotes.command_line"
7
+
8
+
9
+ class CommandLineGroup(click.Group):
10
+ def make_context(
11
+ self,
12
+ info_name: str | None,
13
+ args: list[str],
14
+ parent: click.Context | None = None,
15
+ **extra: Any,
16
+ ) -> click.Context:
17
+ command_line = shlex.join(["labnotes", *args])
18
+ ctx = super().make_context(info_name, args, parent, **extra)
19
+ ctx.meta[COMMAND_LINE] = command_line
20
+ return ctx
@@ -4,6 +4,7 @@ from pathlib import Path
4
4
 
5
5
  import click
6
6
 
7
+ from labnotes.command_line_group import COMMAND_LINE
7
8
  from labnotes.create_experiment import create_experiment
8
9
  from labnotes.runner.start_experiment import start_experiment
9
10
  from labnotes.utils.format_bytes import format_bytes
@@ -163,6 +164,7 @@ def experiments(
163
164
  passthrough or None,
164
165
  setup,
165
166
  teardown,
167
+ ctx.meta.get(COMMAND_LINE),
166
168
  )
167
169
  try:
168
170
  if sys.stdout.isatty() and sys.stderr.isatty():
@@ -5,6 +5,7 @@ import os
5
5
  import time
6
6
  from collections.abc import Callable, Sequence
7
7
  from datetime import UTC, datetime
8
+ from importlib.metadata import version
8
9
  from pathlib import Path
9
10
 
10
11
  import psutil
@@ -43,6 +44,7 @@ async def execute_run(
43
44
  environment: dict[str, str] | None = None,
44
45
  git_info: dict[str, str | bool] | None = None,
45
46
  continues: bool = False,
47
+ command_line: str | None = None,
46
48
  ) -> dict[str, object]:
47
49
  resolved = shell_command(command, folder, params, args)
48
50
  git = git_info if git_info is not None else await asyncio.to_thread(run_git, root)
@@ -56,6 +58,8 @@ async def execute_run(
56
58
  "ended_by": None,
57
59
  "signal": None,
58
60
  "git": git,
61
+ "labnotes_version": version("labnotes"),
62
+ "labnotes_command": command_line,
59
63
  }
60
64
  if args:
61
65
  run["args"] = list(args)
@@ -76,6 +80,8 @@ async def execute_run(
76
80
  "error": None,
77
81
  "git": None if git is None else git["commit"],
78
82
  "args": list(args),
83
+ "labnotes_version": run["labnotes_version"],
84
+ "labnotes_command": command_line,
79
85
  **logs,
80
86
  }
81
87
  record = folder / "run.json"
@@ -8,6 +8,8 @@ def first_invocation(run: dict[str, object]) -> dict[str, object]:
8
8
  "error": run.get("error"),
9
9
  "git": git.get("commit") if isinstance(git, dict) else None,
10
10
  "args": run.get("args", []),
11
+ "labnotes_version": run.get("labnotes_version"),
12
+ "labnotes_command": run.get("labnotes_command"),
11
13
  "stdout": "stdout.log",
12
14
  "stderr": "stderr.log",
13
15
  }
@@ -53,6 +53,7 @@ async def run_experiment(
53
53
  args: list[str] | None = None,
54
54
  environment: dict[str, str] | None = None,
55
55
  snapshot: ProjectSnapshot | None = None,
56
+ command_line: str | None = None,
56
57
  ) -> list[dict[str, object]]:
57
58
  command_root = snapshot.root if snapshot is not None else config.root
58
59
  inherited = dict(os.environ) if environment is None else environment
@@ -323,6 +324,7 @@ async def run_experiment(
323
324
  else None
324
325
  ),
325
326
  continues=experiment.continues,
327
+ command_line=command_line,
326
328
  )
327
329
  del running[run], trees[run]
328
330
  report({"event": "ended", "run": run, **result})
@@ -17,6 +17,7 @@ def start_experiment(
17
17
  args: list[str] | None,
18
18
  setup: str | None,
19
19
  teardown: str | None,
20
+ command_line: str | None = None,
20
21
  ) -> Start:
21
22
  async def start(report: Report, listen: Listen) -> list[dict[str, object]]:
22
23
  experiment, limit = await prepare_experiment(
@@ -35,6 +36,7 @@ def start_experiment(
35
36
  only=only,
36
37
  args=args,
37
38
  snapshot=snapshot,
39
+ command_line=command_line,
38
40
  )
39
41
 
40
42
  return start
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes