Skip to content

Fix handling of SCORES_CATEGORICAL_POD_ENTRIES and disable by default in example configuration - #2401

Merged
James Warner (jwarner8) merged 2 commits into
mainfrom
2400_fix_default_for_SCORES_CATEGORICAL_POD
Aug 20, 2026
Merged

Fix handling of SCORES_CATEGORICAL_POD_ENTRIES and disable by default in example configuration#2401
James Warner (jwarner8) merged 2 commits into
mainfrom
2400_fix_default_for_SCORES_CATEGORICAL_POD

Conversation

@jfrost-mo

Copy link
Copy Markdown
Member

The current default value of an empty string cannot be parsed by the loader and thus crashes the parbake process. Additionally diagnostics should be turned off by default in the example configuration. This does however show the need to have more automated testing of the workflow.

Invalid entries in SCORES_CATEGORICAL_POD_ENTRIES are logged then skipped, preventing the loader from crashing.

Fixes #2400.

Contribution checklist

Aim to have all relevant checks ticked off before merging. See the developer's guide for more detail.

  • Documentation has been updated to reflect change.
  • New code has tests, and affected old tests have been updated.
  • All tests and CI checks pass.
  • Ensured the pull request title is descriptive.
  • Attributed any Generative AI, such as GitHub Copilot, used in this PR.
  • Marked the PR as ready to review.

@jfrost-mo James Frost (jfrost-mo) added bug Something isn't working small Small issue that should be quick to resolve labels Aug 20, 2026
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor
Total coverage: 93% (HTML report)
Name                                                              Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------------------------------------------
src/CSET/__init__.py                                                105      0     14      0   100%
src/CSET/_common.py                                                 156      0     54      0   100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py             117     28     26      0    78%
src/CSET/cset_workflow/app/fetch_nimrod/bin/fetch_nimrod.py          81      8     28     11    83%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py      79      2      8      2    95%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py            29      0      8      0   100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py              25      0      4      0   100%
src/CSET/cset_workflow/lib/python/jinja_utils.py                     17      0      6      0   100%
src/CSET/extract_workflow.py                                        103      1     26      1    98%
src/CSET/graph.py                                                    44      0     14      0   100%
src/CSET/operators/__init__.py                                       89      0     26      0   100%
src/CSET/operators/_atmospheric_constants.py                          9      0      0      0   100%
src/CSET/operators/_colormaps.py                                    249      3     72      4    98%
src/CSET/operators/_stash_to_lfric.py                                 3      0      0      0   100%
src/CSET/operators/_utils.py                                        190      8     72      6    95%
src/CSET/operators/ageofair.py                                      142      7     64      5    94%
src/CSET/operators/aggregate.py                                      77      1     22      1    98%
src/CSET/operators/aviation.py                                       61      0     18      0   100%
src/CSET/operators/collapse.py                                      155      8     72      3    93%
src/CSET/operators/constraints.py                                   113      7     50      3    93%
src/CSET/operators/convection.py                                     38      4     10      2    88%
src/CSET/operators/ensembles.py                                      27      0     14      0   100%
src/CSET/operators/feature.py                                        44      0     10      0   100%
src/CSET/operators/filters.py                                        67      2     30      0    98%
src/CSET/operators/fluxes.py                                         41      0     10      0   100%
src/CSET/operators/humidity.py                                      135      0     52      0   100%
src/CSET/operators/imageprocessing.py                                57      0     16      0   100%
src/CSET/operators/mesoscale.py                                      18      0      2      0   100%
src/CSET/operators/misc.py                                          172      1     72      3    98%
src/CSET/operators/plot.py                                         1117    155    412     71    83%
src/CSET/operators/power_spectrum.py                                 98      3     30      3    95%
src/CSET/operators/precipitation.py                                 204      2     92      2    99%
src/CSET/operators/pressure.py                                       41      0     12      0   100%
src/CSET/operators/read.py                                          432     21    184     16    94%
src/CSET/operators/regrid.py                                        147      1     70      3    98%
src/CSET/operators/scoreswrappers.py                                208     16     58      6    91%
src/CSET/operators/temperature.py                                   121      0     32      0   100%
src/CSET/operators/transect.py                                       63      0     24      0   100%
src/CSET/operators/wind.py                                           46      3     10      2    91%
src/CSET/operators/write.py                                          15      0      6      0   100%
src/CSET/recipes/__init__.py                                        104      0     28      0   100%
src/CSET/sample_data/__init__.py                                      0      0      0      0   100%
---------------------------------------------------------------------------------------------------
TOTAL                                                              5039    281   1758    144    93%

The current value of an empty string cannot be parsed by the loader and
thus crashes the parbake process. Additionally diagnostics should be
turned off by default in the example configuration. This does however
show the need to have more automated testing of the workflow.

Fixes #2400
Invalid entries are logged then skipped, preventing the loader from
crashing.
@jfrost-mo
James Frost (jfrost-mo) force-pushed the 2400_fix_default_for_SCORES_CATEGORICAL_POD branch from 1237d91 to 9244a8e Compare August 20, 2026 10:03

@jwarner8 James Warner (jwarner8) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, I caught this in a separate branch but good to get on main asap...

@jwarner8
James Warner (jwarner8) merged commit ab5ed5a into main Aug 20, 2026
9 checks passed
@jwarner8
James Warner (jwarner8) deleted the 2400_fix_default_for_SCORES_CATEGORICAL_POD branch August 20, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working small Small issue that should be quick to resolve

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Parbaking crashes trying to parse SCORES_CATEGORICAL_POD_ENTRIES

2 participants