Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a testing utility for faking reading #2840

Merged
merged 9 commits into from
Jul 26, 2024

Conversation

mraspaud
Copy link
Member

This PR adds a testing utility to satpy for faking reading.

Useful for testing programs that use satpy for reading with actually needing to read anything.
Can be used like this:

        scene_dict = {channel: somedata}
        with fake_satpy_reading(scene_dict):
            scene = Scene(input_files, reader="dummy_reader")
            scene.load([channel])

and the scene will be loaded with the contents of scene_dict.

  • Closes #xxxx
  • Tests added
  • Fully documented
  • Add your name to AUTHORS.md if not there already

mraspaud and others added 2 commits June 26, 2024 16:35
Co-authored-by: Martin Raspaud <martin.raspaud@smhi.se>
Co-authored-by: Pouria Khalaj <pouria.khalaj@smhi.se>
@mraspaud mraspaud requested a review from djhoese as a code owner June 26, 2024 14:45
@mraspaud mraspaud self-assigned this Jun 26, 2024
@mraspaud mraspaud added the enhancement code enhancements, features, improvements label Jun 26, 2024
Copy link

codecov bot commented Jun 26, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 95.98%. Comparing base (1832175) to head (f9dba55).
Report is 41 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2840      +/-   ##
==========================================
+ Coverage   95.95%   95.98%   +0.03%     
==========================================
  Files         366      368       +2     
  Lines       53615    53798     +183     
==========================================
+ Hits        51446    51639     +193     
+ Misses       2169     2159      -10     
Flag Coverage Δ
behaviourtests 4.03% <0.00%> (-0.02%) ⬇️
unittests 96.08% <100.00%> (+0.03%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Member

@djhoese djhoese left a comment

Choose a reason for hiding this comment

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

Interesting. Makes sense. Some concerns:

  1. I realize this is for users and their applications, but should this be in satpy/tests/ instead?
  2. Could we have a new section in the documentation (may require a whole new page) regarding "Testing your Satpy code"?
  3. Users may want to debug their custom composites, both configs and actual execution of custom composite python code. Is there a way to allow for that? I suppose this would require mocking the lower-level Scene readers dictionary and distinguishing between the users scene_dict being reader datasets versus composite datasets. Maybe not worth it.

satpy/testing.py Outdated Show resolved Hide resolved
Co-authored-by: David Hoese <david.hoese@ssec.wisc.edu>
@mraspaud
Copy link
Member Author

  1. I'm following numpy here, as they have np.testing. I would also add that tests for me are rather internal/private, while testing is intended to be public api.

@djhoese
Copy link
Member

djhoese commented Jun 26, 2024

Sounds good.

@gerritholl
Copy link
Collaborator

gerritholl commented Jun 27, 2024

Users may want to debug their custom composites, both configs and actual execution of custom composite python code. Is there a way to allow for that? I suppose this would require mocking the lower-level Scene readers dictionary and distinguishing between the users scene_dict being reader datasets versus composite datasets. Maybe not worth it.

The final three tests at https://github.com/pytroll/satpy/blob/main/satpy/tests/modifier_tests/test_parallax.py test loading a composite via the Scene.load interface, involving a fake configuration file and mocking satpy.composites.config_loader.config_search_paths.

Maybe those tests could use this utility instead (not sure).

@coveralls
Copy link

coveralls commented Jul 19, 2024

Pull Request Test Coverage Report for Build 10058493408

Warning: This coverage report may be inaccurate.

This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

Details

  • 34 of 34 (100.0%) changed or added relevant lines in 2 files are covered.
  • 7 unchanged lines in 2 files lost coverage.
  • Overall coverage increased (+0.02%) to 96.086%

Files with Coverage Reduction New Missed Lines %
satpy/tests/reader_tests/test_ami_l1b.py 3 98.17%
satpy/readers/ami_l1b.py 4 97.32%
Totals Coverage Status
Change from base Build 10006768762: 0.02%
Covered Lines: 51868
Relevant Lines: 53981

💛 - Coveralls

@mraspaud
Copy link
Member Author


The ``satpy.testing`` modules provides tools for writing tests of applications that use Satpy.

- For faking reading, you can use :func:`~satpy.testing.fake_satpy_reading`
Copy link
Member

Choose a reason for hiding this comment

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

This isn't a hard requirement/change for this to be merged, but this wording of "faking reading" seems not as descriptive as I'd like. On one hand I would expect the high-level description to be something like "To allow Scene creation and loading fake datasets without reading files", but that's kind of long. My main point being that "For faking reading" doesn't seem to fully describe what is possible, or rather, why you'd use this functionality.

Copy link
Member Author

Choose a reason for hiding this comment

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

I like your wording, so I'll put it in here. The docstring of that function also has an example, so that part is quite clear I think.

@mraspaud mraspaud merged commit b8fdaf9 into pytroll:main Jul 26, 2024
18 checks passed
@mraspaud mraspaud deleted the add-testing-reader-utility branch July 26, 2024 07:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement code enhancements, features, improvements
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants