Skip to content

Conversation

@augustebaum
Copy link
Contributor

@augustebaum augustebaum commented Jan 10, 2025

New methods have been added to Project:

# The default is to act on the latest version
project.set_note(key, message, version=-1)

project.get_note(key, message, version=-1)

project.delete_note(key, message, version=-1)

To this end,

  • Item now has an additional attribute, note, which is a str | None
  • ItemRepository has similar methods

The note related methods fail with a KeyError when the key-version combination does not exist, but:

  • get_note returns None if the note is None (no error)
  • delete_note never errors if the key-version combination exists (even if the note is already None, it will be set to None again)

set_note fails with a TypeError if key or message is not a string.

Addresses part of #1041

@augustebaum augustebaum changed the title note commands backend feat: Implement note-related methods Jan 10, 2025
@augustebaum augustebaum force-pushed the note-commands-backend branch from 0acc7c6 to 81d9ce6 Compare January 10, 2025 15:06
@github-actions
Copy link
Contributor

Documentation preview @ 81d9ce6

@github-actions
Copy link
Contributor

github-actions bot commented Jan 10, 2025

Coverage

Coverage Report for backend
FileStmtsMissCoverMissing
venv/lib/python3.12/site-packages/skore
   __init__.py120100% 
   __main__.py8180%19
   exceptions.py30100% 
venv/lib/python3.12/site-packages/skore/cli
   __init__.py50100% 
   cli.py33385%104, 111, 117
   color_format.py43390%35–>40, 41–43
   launch_dashboard.py261539%36–57
   quickstart_command.py14750%37–51
venv/lib/python3.12/site-packages/skore/item
   __init__.py21191%46
   cross_validation_item.py1371093%27–42, 373
   item.py421369%91, 94, 98–118
   item_repository.py61591%12–13, 209–210, 231
   media_item.py70494%15–18
   numpy_array_item.py25193%15
   pandas_dataframe_item.py34195%15
   pandas_series_item.py34195%15
   polars_dataframe_item.py32194%15
   polars_series_item.py27194%15
   primitive_item.py27292%13–15
   sklearn_base_estimator_item.py33195%15
   skrub_table_report_item.py10186%11
venv/lib/python3.12/site-packages/skore/persistence
   __init__.py00100% 
   abstract_storage.py22195%130
   disk_cache_storage.py33195%44
   in_memory_storage.py200100% 
venv/lib/python3.12/site-packages/skore/project
   __init__.py30100% 
   create.py52888%116–122, 132–133, 140–141
   load.py23389%43–45
   open.py140100% 
   project.py63393%109, 143, 147
venv/lib/python3.12/site-packages/skore/sklearn
   __init__.py40100% 
   _base.py141298%168–>173, 184–185
   find_ml_task.py35195%41–>49, 50
   types.py20100% 
venv/lib/python3.12/site-packages/skore/sklearn/_estimator
   __init__.py100100% 
   metrics_accessor.py198298%131, 267
   report.py109098%160–>166, 168–>170
   utils.py11110%1–19
venv/lib/python3.12/site-packages/skore/sklearn/_plot
   __init__.py40100% 
   precision_recall_curve.py126297%200–>203, 313–314
   prediction_error.py75099%289–>297
   roc_curve.py95394%156, 167–>170, 223–224
   utils.py770100% 
venv/lib/python3.12/site-packages/skore/sklearn/cross_validation
   __init__.py20100% 
   cross_validation_helpers.py47490%104–>136, 123–126
   cross_validation_reporter.py35195%177
venv/lib/python3.12/site-packages/skore/sklearn/cross_validation/plots
   __init__.py00100% 
   compare_scores_plot.py29192%10, 45–>48
   timing_plot.py29194%10
venv/lib/python3.12/site-packages/skore/sklearn/train_test_split
   __init__.py00100% 
   train_test_split.py36294%16–17
venv/lib/python3.12/site-packages/skore/sklearn/train_test_split/warning
   __init__.py80100% 
   high_class_imbalance_too_few_examples_warning.py17378%16–18, 80
   high_class_imbalance_warning.py18288%16–18
   random_state_unset_warning.py11187%15
   shuffle_true_warning.py9091%44–>exit
   stratify_is_set_warning.py11187%15
   time_based_column_warning.py22189%17, 69–>exit
   train_test_split_warning.py5180%21
venv/lib/python3.12/site-packages/skore/ui
   __init__.py00100% 
   app.py25571%24, 53–58
   dependencies.py7186%12
   project_routes.py500100% 
venv/lib/python3.12/site-packages/skore/utils
   __init__.py00100% 
   _accessor.py70100% 
   _logger.py21484%14–18
   _show_versions.py310100% 
venv/lib/python3.12/site-packages/skore/view
   __init__.py00100% 
   view.py50100% 
   view_repository.py16283%8–9
TOTAL225513893% 

Tests Skipped Failures Errors Time
408 3 💤 0 ❌ 0 🔥 46.418s ⏱️

@augustebaum augustebaum marked this pull request as ready for review January 10, 2025 16:16
@thomass-dev thomass-dev self-requested a review January 10, 2025 16:28
@augustebaum augustebaum force-pushed the note-commands-backend branch from 81d9ce6 to 1fe38e2 Compare January 13, 2025 15:12
Copy link
Collaborator

@thomass-dev thomass-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your work.

There is 2 important comments, about the user API and the type checking in <set|get|delete>_notes.
The other comments are about documentation and typing, which can be applied to all item files.

@thomass-dev
Copy link
Collaborator

thomass-dev commented Jan 14, 2025

@MarieS-WiMLDS fyi, this PR can be considered as a breaking-change because it will intend to get a new field in our persistence.

When calling get_note and delete_note on older skore projects, a meaningless error for the user will be raised:
*** KeyError: 'note'.

Copy link
Collaborator

@thomass-dev thomass-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(i don't know why my last request changes is not taken into account by GH)

@augustebaum augustebaum force-pushed the note-commands-backend branch from cbd9291 to 8da0ba8 Compare January 14, 2025 11:28
@thomass-dev thomass-dev merged commit c791e7f into main Jan 14, 2025
14 of 18 checks passed
@thomass-dev thomass-dev deleted the note-commands-backend branch January 14, 2025 11:41
@rouk1 rouk1 mentioned this pull request Jan 15, 2025
4 tasks
waridrox pushed a commit to waridrox/skore that referenced this pull request Apr 15, 2025
New methods have been added to `Project`:

```python
# The default is to act on the latest version
project.set_note(key, message, version=-1)

project.get_note(key, message, version=-1)

project.delete_note(key, message, version=-1)
```

To this end,
- `Item` now has an additional attribute, `note`, which is a `str |
None`
- `ItemRepository` has similar methods

The note related methods fail with a KeyError when the key-version
combination does not exist, but:
- `get_note` returns `None` if the note is `None` (no error)
- `delete_note` never errors if the key-version combination exists (even
if the note is already `None`, it will be set to `None` again)

`set_note` fails with a TypeError if `key` or `message` is not a string.

Addresses part of probabl-ai#1041
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants