Skip to content

Make finish_website app self-contained#2168

Open
James Frost (jfrost-mo) wants to merge 4 commits into
mainfrom
seperate_finish_website
Open

Make finish_website app self-contained#2168
James Frost (jfrost-mo) wants to merge 4 commits into
mainfrom
seperate_finish_website

Conversation

@jfrost-mo

@jfrost-mo James Frost (jfrost-mo) commented Jun 2, 2026

Copy link
Copy Markdown
Member

Also allows for more general diagnostic layouts, so you don't need a plots directory.

A command line interface is added to allow for use outside of a cylc workflow.

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.
  • Ensure rose-suite.conf.example has been updated if new diagnostic added.
  • Conda lock files have been updated if dependencies have changed.
  • 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 the cleanup Non-functional improvement label Jun 2, 2026
@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor
Total coverage: 91% (HTML report)
Name                                                              Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------------------------------------------
src/CSET/__init__.py                                                 93      2     12      0    98%
src/CSET/_common.py                                                 149      0     52      0   100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py             115     27     24      0    79%
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                                         47      0     16      0   100%
src/CSET/graph.py                                                    43      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                                    229      4     62      4    97%
src/CSET/operators/_stash_to_lfric.py                                 3      0      0      0   100%
src/CSET/operators/_utils.py                                        183      8     74      6    95%
src/CSET/operators/ageofair.py                                      141      7     64      5    94%
src/CSET/operators/aggregate.py                                      76      1     22      1    98%
src/CSET/operators/aviation.py                                       60      0     18      0   100%
src/CSET/operators/collapse.py                                      154     12     72      5    91%
src/CSET/operators/constraints.py                                   111      7     48      2    93%
src/CSET/operators/convection.py                                     37      4     10      2    87%
src/CSET/operators/ensembles.py                                      27      0     14      0   100%
src/CSET/operators/feature.py                                        41      0     10      0   100%
src/CSET/operators/filters.py                                        66      2     30      0    98%
src/CSET/operators/fluxes.py                                         41      0     10      0   100%
src/CSET/operators/humidity.py                                      139      0     56      0   100%
src/CSET/operators/imageprocessing.py                                56      0     16      0   100%
src/CSET/operators/mesoscale.py                                      17      0      2      0   100%
src/CSET/operators/misc.py                                          158      1     66      4    98%
src/CSET/operators/plot.py                                          929    169    318     59    78%
src/CSET/operators/power_spectrum.py                                 97      3     30      3    95%
src/CSET/operators/precipitation.py                                 136      0     72      0   100%
src/CSET/operators/pressure.py                                       41      0     12      0   100%
src/CSET/operators/read.py                                          409     38    178     14    89%
src/CSET/operators/regrid.py                                        122     18     64      1    83%
src/CSET/operators/scoreswrappers.py                                 47      6     12      3    85%
src/CSET/operators/temperature.py                                   121      0     32      0   100%
src/CSET/operators/transect.py                                       62      0     24      0   100%
src/CSET/operators/wind.py                                           45      3     10      2    91%
src/CSET/operators/write.py                                          15      0      6      0   100%
src/CSET/recipes/__init__.py                                        101      0     28      0   100%
---------------------------------------------------------------------------------------------------
TOTAL                                                              4359    314   1530    113    91%

Comment thread src/CSET/cset_workflow/app/finish_website/bin/finish_website.py Outdated
Comment thread src/CSET/cset_workflow/app/finish_website/file/html/script.js Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR refactors the finish_website workflow app to be usable more generally (outside a Cylc workflow) by making the website generation less dependent on a fixed plots/ layout and by adding a CLI for configuring inputs/outputs.

Changes:

  • Add an argparse-based CLI and update the Rose app command to pass explicit content/link paths.
  • Change website indexing/caching assumptions: write index.jsonl to the web root, use root-relative diagnostic paths, and stop renaming the plots directory for cache busting.
  • Update unit tests and front-end JS to match the new index.jsonl location and diagnostic path semantics.

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/workflow_utils/test_finish_website.py Updates tests for new CLI and new index/path behavior.
src/CSET/cset_workflow/app/finish_website/rose-app.conf Updates the Cylc/Rose command invocation to use the new CLI arguments.
src/CSET/cset_workflow/app/finish_website/file/html/script.js Fetches index.jsonl from web root and uses record paths directly.
src/CSET/cset_workflow/app/finish_website/file/html/index.html Removes the PLOTS_PATH global now that plot URLs are no longer rewritten.
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py Adds CLI parsing; adjusts skeleton install/index construction/cache busting for the new layout.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/workflow_utils/test_finish_website.py
Comment thread src/CSET/cset_workflow/app/finish_website/file/html/script.js Outdated
Comment thread tests/workflow_utils/test_finish_website.py
Also allows for more general diagnostic layouts, so you don't need a
plots directory.
This minimises bandwidth while ensuring we are up-to-date.

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.

looks fine to me, only a tiny comment to address, assume you have tested and all works as expected?

shutil.copy("tests/test_data/index.jsonl", web_dir)

class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
"""Serve files from the temporary directory."""

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.

should this comment be changed to

Suggested change
"""Serve files from the temporary directory."""
"""Serve files from the web directory."""

??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cleanup Non-functional improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants