From 421d09592248f2e9411fa1803159dac929fb5aea Mon Sep 17 00:00:00 2001 From: Gabriel M Date: Fri, 7 Jul 2023 11:30:57 -0600 Subject: [PATCH 01/68] adding templates for issues --- .../issue_templates/Algorithim_development.md | 26 +++++++++++++++++++ .github/issue_templates/Bug_reporting.md | 25 ++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 .github/issue_templates/Algorithim_development.md create mode 100644 .github/issue_templates/Bug_reporting.md diff --git a/.github/issue_templates/Algorithim_development.md b/.github/issue_templates/Algorithim_development.md new file mode 100644 index 000000000..7b6005c5c --- /dev/null +++ b/.github/issue_templates/Algorithim_development.md @@ -0,0 +1,26 @@ +### Algorithm Description: + +### Requirements: + +> **Specify: (optional)** + +### Algorithm Code Info: Data/Input/Output + +> **Specify details:** + +### Code: + +```python +# Code +``` + +### Requirements/ Dependencies: + +- [ ] + 1. Yes +- [ ] + 2. No + +### If yes, specify: + +### Other Notes: diff --git a/.github/issue_templates/Bug_reporting.md b/.github/issue_templates/Bug_reporting.md new file mode 100644 index 000000000..2794fbb32 --- /dev/null +++ b/.github/issue_templates/Bug_reporting.md @@ -0,0 +1,25 @@ + Where did it occur? + +### Steps to reproduce the issue + + 1. + 2. + 3. + +### Code Snippet: + +```python +# Code +``` + +### Expected behavior (What should happen) + +### Actual behavior (What does happen) + +### Additional notes + +### Did you try to fix the issue? (Yes/No) + +- [ ] Yes +- [ ] No +- [ ] I tried but I couldn't fix it From 47d62d900ef7c906d18a00b34ac78c62833a239e Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 7 Jul 2023 15:47:36 -0600 Subject: [PATCH 02/68] Initial commit of style guide --- style_guide/README.md | 203 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 style_guide/README.md diff --git a/style_guide/README.md b/style_guide/README.md new file mode 100644 index 000000000..19e4dc2ef --- /dev/null +++ b/style_guide/README.md @@ -0,0 +1,203 @@ +`imap_processing` Style Guide +============================= + +This document serves as a style guide for all `imap_processing` software +development. Any potential contribution to the `imap_processing` repository +should be checked against this guide, and any violation of the guide should be +fixed before the code is committed to the `main` or `dev` branches. + + +git & GitHub Workflow +--------------------- + +The best method for contributing software to the `imap_processing` repository is +a workflow that involves forking the repository, developing changes on "feature" +branches, and opening pull requests through GitHub. + +The following diagram depicts this workflow: + +![workflow](https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089) + +As such, all feature branches should be branched off of and merged back into the +`dev` branch. + +### Contributing new features + +1. Create a personal fork of the `imap_processing` repository by visiting the + repository main `IMAP-Science-Operations-Center` `imap_processing` + [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) + and clicking the `Fork` button near the top-right of the page. Follow the + various steps to create a fork under your GitHub account. +2. Make a local copy of your personal fork by cloning the repository, using the + URL found by clicking the green "clone" button. +3. Ensure that the personal fork is pointing to the `upstream` `imap_processing` + repository: + + git remote add upstream + +4. Retrieve the `upstream` `dev` branch: + + git fetch upstream + git checkout -b dev upstream/dev + +5. Create a feature branch off of the `dev` branch to develop changes on. + Branch names should be short but descriptive (e.g. + `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). + Consistent use of hyphens is encouraged. + + git checkout -b + +6. Make changes to the branch using the nominal `git add`/`git commit` cycle: + + git add + git commit -m 'Explaination of the changes' + +7. Push the feature branch to your personal fork's GitHub repository: + + git push origin + +8. On the `IMAP-Science-Operations-Center` `imap_processing` + [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) + create a new pull request. Click on the "compare across forks" link to + enable the pull request to use your fork. Set the "base repository" to + `IMAP-Science-Operations-Center` and "base" to `dev`. Set the "head + repository" to the `imap_processing` repository under your personal fork + and "compare" to your feature branch. If the feature branch is still under + development, you can click the "Convert to draft" button under the + "Reviewers" section, or add a "[WIP]" at the beginning of the pull request + title to signify that the pull request is not ready to be merged. + +9. Assign at least one reviewer to the pull request. They will review your + pull request and either accept the request or ask for additional changes. + If additional changes are needed, iterate through steps (6) and (7) until + you and the reviewer(s) are satisfied. + +10. Once the pull request has been accepted, you can merge the pull request and + delete the feature branch. + + +### Making hotfixes + +As shown in the diagram above, sometimes hotfixes need to be directly to the +`main` branch. The workflow for this scenario is as follows: + +1. Assuming steps (1) through (3) in the previous section are already completed, + create a new branch named `hotfix-` off of the `main` branch, + and commit any necessary changes following the nominal `git add`/`git commit` + cycle. +2. Push the hotfix branch to your personal fork, and open two separate pull + requests: one that merges the hotfix branch into the + `IMAP-Science-Operations-Center` `imap_processing` `main` branch, and one + that merges the hotfix branch into the `IMAP-Science-Operations-Center` + `imap_processing` `dev` branch. +3. For each of these pull requests, proceed with the nominal review & merge + process described in steps (9) and (10) in the previous section. + + +### Keeping your fork updated + +You can keep your personal fork up-to-date with the +`IMAP-Science-Operations-Cetner` `imap_processing` repository by fetching and +pulling the `upstream` remote: + + git checkout dev + git fetch upstream dev + git pull upstream/dev + +### Collaborating on someone else's fork + +To contribute to a branch on another person's personal fork, add a new `remote` +that points to their fork, and use the nominal workflow for contributing: + + git remote add + git fetch + git checkout -b / + # Make some changes via add/commit cycle + git push + +Versioning +---------- + +Any changes pushed to the `main` branch should be tagged with a version number. +The version number convention is `x.y.z`, where + + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. + + +Security +-------- + +The following items should never be committed in the `imap_processing` source +code or GitHub issues/pull requests: + +- Account credentials of any kind (e.g. database usernames/passwords, AWS +credentials, etc.) +- Internal directory structures or filepaths +- Machine names +- Proprietary data + +If `imap_processing` code needs access to this information, it should be stored +in a configuration file that is not part of the repository. + +Additionally, developers of this project should be mindful of application +security risks, and should adhere to the +[OWASP Top 10](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf) +as much as possible. + + +Python Coding +------------- + +`jwql` code shall adhere to the [PEP8](https://www.python.org/dev/peps/pep-0008/) +conventions save for the following exceptions: + + - Lines of code need not be restricted to 79 characters. However, it is +encouraged to break up excessively long lines into several lines if it benefits +the overall readability of the code + + Additionally, the code shall adhere to the following special guidelines: + + - Function and class definitions should be placed in alphabetical order in the +module + - It is encouraged to annotate variables and functions using the +[`typing`](https://docs.python.org/3/library/typing.html) library (see +[PEP 483](https://www.python.org/dev/peps/pep-0483/), +[PEP 484](https://www.python.org/dev/peps/pep-0484/), and +[PEP 526](https://www.python.org/dev/peps/pep-0526/)). + + +Documentation +------------- + +`imap_processing` code shall adhere to the [PEP257](https://www.python.org/dev/peps/pep-0008/) +and [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. + +The following are further recommendations: + +- Each module should have at minimum a description, `Authors`, and `Use` +sections. +- Each function/method should have at minimum a description, `Parameters` (if +necessary), and `Returns` (if necessary) sections. + + +Logging +------- + +TBD + +Naming Conventions +------------------ + +TBD + +Tools and Library Recommendations +--------------------------------- + +TBD + +Releases +-------- + +TBD From 8cef76a849528db78c07a84ef48f03285d80b0c0 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 7 Jul 2023 16:04:46 -0600 Subject: [PATCH 03/68] Reordered some sections, added some recommended tools/libraries --- style_guide/README.md | 92 +++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 19e4dc2ef..12b18c1e6 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -23,6 +23,10 @@ As such, all feature branches should be branched off of and merged back into the ### Contributing new features +*Note: The steps shaded in gray need only to be done once.* + +
+ 1. Create a personal fork of the `imap_processing` repository by visiting the repository main `IMAP-Science-Operations-Center` `imap_processing` [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) @@ -40,23 +44,25 @@ As such, all feature branches should be branched off of and merged back into the git fetch upstream git checkout -b dev upstream/dev -5. Create a feature branch off of the `dev` branch to develop changes on. +
+ +6. Create a feature branch off of the `dev` branch to develop changes on. Branch names should be short but descriptive (e.g. `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). Consistent use of hyphens is encouraged. git checkout -b -6. Make changes to the branch using the nominal `git add`/`git commit` cycle: +7. Make changes to the branch using the nominal `git add`/`git commit` cycle: git add git commit -m 'Explaination of the changes' -7. Push the feature branch to your personal fork's GitHub repository: +8. Push the feature branch to your personal fork's GitHub repository: git push origin -8. On the `IMAP-Science-Operations-Center` `imap_processing` +9. On the `IMAP-Science-Operations-Center` `imap_processing` [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) create a new pull request. Click on the "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to @@ -67,12 +73,12 @@ As such, all feature branches should be branched off of and merged back into the "Reviewers" section, or add a "[WIP]" at the beginning of the pull request title to signify that the pull request is not ready to be merged. -9. Assign at least one reviewer to the pull request. They will review your - pull request and either accept the request or ask for additional changes. - If additional changes are needed, iterate through steps (6) and (7) until - you and the reviewer(s) are satisfied. +10. Assign at least one reviewer to the pull request. They will review your + pull request and either accept the request or ask for additional changes. + If additional changes are needed, iterate through steps (6) and (7) until + you and the reviewer(s) are satisfied. -10. Once the pull request has been accepted, you can merge the pull request and +11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. @@ -115,42 +121,10 @@ that points to their fork, and use the nominal workflow for contributing: # Make some changes via add/commit cycle git push -Versioning ----------- - -Any changes pushed to the `main` branch should be tagged with a version number. -The version number convention is `x.y.z`, where - - x = The main version number. Increase when making incompatible API changes. - y = The feature number. Increase when change contains a new feature with or without bug fixes. - z = The hotfix number. Increase when change only contains bug fixes. - - -Security --------- - -The following items should never be committed in the `imap_processing` source -code or GitHub issues/pull requests: - -- Account credentials of any kind (e.g. database usernames/passwords, AWS -credentials, etc.) -- Internal directory structures or filepaths -- Machine names -- Proprietary data - -If `imap_processing` code needs access to this information, it should be stored -in a configuration file that is not part of the repository. - -Additionally, developers of this project should be mindful of application -security risks, and should adhere to the -[OWASP Top 10](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf) -as much as possible. - - Python Coding ------------- -`jwql` code shall adhere to the [PEP8](https://www.python.org/dev/peps/pep-0008/) +`imap_processing` code shall adhere to the [PEP8](https://www.python.org/dev/peps/pep-0008/) conventions save for the following exceptions: - Lines of code need not be restricted to 79 characters. However, it is @@ -181,11 +155,36 @@ sections. - Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) sections. +Versioning +---------- -Logging -------- +Any changes pushed to the `main` branch should be tagged with a version number. +The version number convention is `x.y.z`, where -TBD + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. + + +Security +-------- + +The following items should never be committed in the `imap_processing` source +code or GitHub issues/pull requests: + +- Account credentials of any kind (e.g. database usernames/passwords, AWS +credentials, etc.) +- Internal directory structures or filepaths +- Machine names +- Proprietary data + +If `imap_processing` code needs access to this information, it should be stored +in a configuration file that is not part of the repository. + +Additionally, developers of this project should be mindful of application +security risks, and should adhere to the +[OWASP Top 10](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf) +as much as possible. Naming Conventions ------------------ @@ -195,7 +194,8 @@ TBD Tools and Library Recommendations --------------------------------- -TBD +- `spicepy` for using SPICE kernels +- `space-packet-parser` to unpack CCSDS packets Releases -------- From 1371063b2c12d2550772914319086e9d2ebce615 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 7 Jul 2023 16:17:03 -0600 Subject: [PATCH 04/68] Some clarifications on the git workflow --- style_guide/README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 12b18c1e6..dbcb1a11d 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -14,18 +14,17 @@ The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the repository, developing changes on "feature" branches, and opening pull requests through GitHub. -The following diagram depicts this workflow: +The following diagram depicts this workflow (credit to +[Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow): -![workflow](https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089) +git and GitHub Workflow As such, all feature branches should be branched off of and merged back into the `dev` branch. ### Contributing new features -*Note: The steps shaded in gray need only to be done once.* - -
+*Note: Steps (1) through (4) only to be done once.* 1. Create a personal fork of the `imap_processing` repository by visiting the repository main `IMAP-Science-Operations-Center` `imap_processing` @@ -44,8 +43,6 @@ As such, all feature branches should be branched off of and merged back into the git fetch upstream git checkout -b dev upstream/dev -
- 6. Create a feature branch off of the `dev` branch to develop changes on. Branch names should be short but descriptive (e.g. `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). From 6976940b52d54992916166975a456c4cd2d16ee7 Mon Sep 17 00:00:00 2001 From: Greg Lucas Date: Mon, 26 Jun 2023 16:18:43 -0600 Subject: [PATCH 05/68] DOC: Start of sphinx documentation This adds the basics to start building our docs and organizing the sphinx page structure. --- .github/workflows/docs.yml | 56 ++ .gitignore | 3 + docs/Makefile | 20 + docs/README.md | 29 + docs/make.bat | 35 ++ docs/source/.nojekyll | 0 .../_static/imap-mark-hor-multicolor-dark.png | Bin 0 -> 26817 bytes docs/source/conf.py | 73 +++ docs/source/development/index.rst | 35 ++ docs/source/index.rst | 44 ++ docs/source/reference/index.rst | 26 + docs/source/reference/swe.rst | 16 + imap_processing/__init__.py | 1 + poetry.lock | 563 +++++++++++++++++- pyproject.toml | 8 +- 15 files changed, 896 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/Makefile create mode 100644 docs/README.md create mode 100644 docs/make.bat create mode 100644 docs/source/.nojekyll create mode 100644 docs/source/_static/imap-mark-hor-multicolor-dark.png create mode 100644 docs/source/conf.py create mode 100644 docs/source/development/index.rst create mode 100644 docs/source/index.rst create mode 100644 docs/source/reference/index.rst create mode 100644 docs/source/reference/swe.rst diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..7e79888d3 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: "Documentation Build" +concurrency: + group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }} + cancel-in-progress: true +on: +- pull_request +- release + +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[doc] + + - name: Build documentation + run: | + make -C docs html + + - uses: actions/upload-artifact@v2 + with: + name: DocumentationHTML + path: docs/build/html/ + + # Publish built docs to gh-pages branch + - name: Commit documentation changes + # push docs only when a GitHub Release is made + if: github.event_name == 'release' && github.event.action == 'published' + run: | + git clone https://github.com/IMAP-Science-Operations-Center/imap_processing.git --branch gh-pages --single-branch gh-pages + cp -r docs/build/html/* gh-pages/ + cd gh-pages + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add . + git commit -m "Update documentation" -a || true + # The above command will fail if no changes were present, so we ignore that. + + - name: Publish docs + # push docs only when a GitHub Release is made + if: github.event_name == 'release' && github.event.action == 'published' + + uses: ad-m/github-push-action@master + with: + branch: gh-pages + directory: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 2dc53ca34..678557de5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Documentation ignore +docs/source/reference/generated + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 000000000..d0c3cbf10 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..d4d89981e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,29 @@ +# Documentation + +## Building documentation + +1. Install the documentation dependencies +2. Build the html documents under the `docs` directory + +Using poetry: + +```bash +# Install the optional documentation dependencies +poetry install --extras "doc" +# Make the html documentation +cd docs/source +poetry run sphinx-build . build +# View the documentation +open build/html/index.html +``` + +Using pip: + +```bash +# Install the optional documentation dependencies +pip install .[doc] +# Make the html documentation +make -C docs html +# View the documentation +open docs/build/html/index.html +``` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 000000000..6247f7e23 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/.nojekyll b/docs/source/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/source/_static/imap-mark-hor-multicolor-dark.png b/docs/source/_static/imap-mark-hor-multicolor-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..022d8f56680cc20771cc370161a3348f310dc363 GIT binary patch literal 26817 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 literal 0 HcmV?d00001 diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 000000000..c9a1c36e7 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,73 @@ +""" +Configuration file for the Sphinx documentation builder. + +This file only contains a selection of the most common options. For a full +list see the documentation: +https://www.sphinx-doc.org/en/master/usage/configuration.html +""" + +# -- Path setup -------------------------------------------------------------- + +import sys + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use resolve() to make it absolute, like shown here. +# +from pathlib import Path + +import imap_processing + +sys.path.insert(0, Path("../../imap_processing").resolve()) + +# -- Project information ----------------------------------------------------- + +project = "imap_processing" +copyright = "2023, Regents of the University of Colorado" +author = "IMAP Science Operations Center" + +# The full version, including alpha/beta/rc tags +release = imap_processing.__version__ + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.githubpages", # Helpful for publishing to gh-pages + "sphinx.ext.napoleon", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "pydata_sphinx_theme" + +html_logo = "_static/imap-mark-hor-multicolor-dark.png" + +html_theme_options = { + "github_url": "https://github.com/IMAP-Science-Operations-Center/imap_processing", +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# Autosummary +autosummary_generate = True diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst new file mode 100644 index 000000000..4b53ee11c --- /dev/null +++ b/docs/source/development/index.rst @@ -0,0 +1,35 @@ +.. _development: + +Development +=========== + +To contribute to imap_processing, you can fork the GitHub repository, +add your code, and make a pull request. If you are adding additional functionality, +you should also include a test with your enhancement. + +imap_processing is designed to be run in a containerized environment, so +the dependencies will be locked in after a release and the data products will +be versioned appropriately to correspond with the code that produced them. + +A typical development workflow might look like the following: + +.. code:: bash + + # Install the development dependencies + pip install .[dev] + + # Install the pre-commit hooks + pre-commit install + + # Update the code on a feature branch + git checkout -b my-cool-feature + + # Run the tests + pytest + + # Commit the changes and push to your remote repository + git add my-file + git commit + git push -u origin my-cool-feature + + # Go to GitHub and open a pull request! diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 000000000..87113e5c3 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,44 @@ + +IMAP Processing Documentation +============================= + +The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project +aimed at studying the interstellar medium and investigating the acceleration +mechanisms of particles within our galaxy. IMAP utilizes cutting-edge +technology and advanced instrumentation to gather valuable data and expand +our understanding of space. + +The IMAP project's Git repository serves as a centralized hub for collaboration +among researchers, scientists, and developers involved in the project. +It provides a platform for version control, code sharing, issue tracking, +and documentation, fostering a collaborative environment for advancing +the goals of the IMAP mission. + +Through the Git repository, contributors can access project resources, +explore the codebase, propose enhancements or bug fixes, and participate +in discussions with other team members. This collaborative approach promotes +efficient development and fosters innovation in the pursuit of interstellar +mapping and particle acceleration research. + +Join the IMAP Git repository to be part of an exciting scientific endeavor, +contribute your expertise, and help unlock the mysteries of the interstellar +medium and particle acceleration in our galaxy. Together, we can advance our +knowledge of the cosmos and pave the way for future discoveries in space +exploration. + +The [IMAP Website](https://imap.princeton.edu/) contains information about the +entire mission, including the science goals, the spacecraft, and the instruments. +The Science Operations Center (SOC) is responsible for the data processing on the +IMAP mission and being developed at +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/). + +The explicit code interfaces and structure are described in the :ref:`api`. + +.. toctree:: + :maxdepth: 1 + + reference/index + development/index + +If you make use of any imap_processing code, please consider citing it in your research. +TODO: Add a Zenodo DOI badge here. diff --git a/docs/source/reference/index.rst b/docs/source/reference/index.rst new file mode 100644 index 000000000..ea2476c60 --- /dev/null +++ b/docs/source/reference/index.rst @@ -0,0 +1,26 @@ +.. _api: + +API reference +============= + +.. currentmodule:: imap_processing + +This page gives an overview of the routines within the imap_processing package. +The package is organized by instrument, meaning each instrument is its own +module and has submodules for each processing step. + +Instruments +----------- + +.. toctree:: + :maxdepth: 1 + + swe + + +Utility functions can be found in modules within the top package level. + +.. autosummary:: + :toctree: generated/ + + decom diff --git a/docs/source/reference/swe.rst b/docs/source/reference/swe.rst new file mode 100644 index 000000000..500d40b7a --- /dev/null +++ b/docs/source/reference/swe.rst @@ -0,0 +1,16 @@ +.. _swe: + +SWE (Solar Wind Electrons) +========================== + +.. currentmodule:: imap_processing.swe + +This is the SWE Instrument module, which contains the code for processing +data from the SWE instrument. + +The L0 code to decommutate the CCSDS packet data can be found below. + +.. autosummary:: + :toctree: generated/ + + decom_swe diff --git a/imap_processing/__init__.py b/imap_processing/__init__.py index e69de29bb..3dc1f76bc 100644 --- a/imap_processing/__init__.py +++ b/imap_processing/__init__.py @@ -0,0 +1 @@ +__version__ = "0.1.0" diff --git a/poetry.lock b/poetry.lock index 364ec380b..eef7ff2d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,32 @@ # This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +[[package]] +name = "accessible-pygments" +version = "0.0.4" +description = "A collection of accessible pygments styles" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "accessible-pygments-0.0.4.tar.gz", hash = "sha256:e7b57a9b15958e9601c7e9eb07a440c813283545a20973f2574a5f453d0e953e"}, + {file = "accessible_pygments-0.0.4-py2.py3-none-any.whl", hash = "sha256:416c6d8c1ea1c5ad8701903a20fcedf953c6e720d64f33dc47bfb2d3f2fa4e8d"}, +] + +[package.dependencies] +pygments = ">=1.5" + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +category = "main" +optional = true +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + [[package]] name = "atomicwrites" version = "1.4.1" @@ -30,6 +57,37 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +category = "main" +optional = true +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "bitstring" version = "4.0.2" @@ -92,6 +150,18 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = true +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + [[package]] name = "cfgv" version = "3.3.1" @@ -104,16 +174,101 @@ files = [ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + [[package]] name = "click" -version = "8.1.3" +version = "8.1.4" description = "Composable command line interface toolkit" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.4-py3-none-any.whl", hash = "sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3"}, + {file = "click-8.1.4.tar.gz", hash = "sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37"}, ] [package.dependencies] @@ -143,6 +298,18 @@ files = [ {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, ] +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + [[package]] name = "filelock" version = "3.12.2" @@ -174,6 +341,50 @@ files = [ [package.extras] license = ["ukkonen"] +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = true +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -186,6 +397,84 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -239,14 +528,14 @@ files = [ [[package]] name = "platformdirs" -version = "3.7.0" +version = "3.8.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "platformdirs-3.7.0-py3-none-any.whl", hash = "sha256:cfd065ba43133ff103ab3bd10aecb095c2a0035fcd1f07217c9376900d94ba07"}, - {file = "platformdirs-3.7.0.tar.gz", hash = "sha256:87fbf6473e87c078d536980ba970a472422e94f17b752cfad17024c18876d481"}, + {file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"}, + {file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"}, ] [package.extras] @@ -300,6 +589,48 @@ files = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +[[package]] +name = "pydata-sphinx-theme" +version = "0.13.3" +description = "Bootstrap-based Sphinx theme from the PyData community" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pydata_sphinx_theme-0.13.3-py3-none-any.whl", hash = "sha256:bf41ca6c1c6216e929e28834e404bfc90e080b51915bbe7563b5e6fda70354f0"}, + {file = "pydata_sphinx_theme-0.13.3.tar.gz", hash = "sha256:827f16b065c4fd97e847c11c108bf632b7f2ff53a3bca3272f63f3f3ff782ecc"}, +] + +[package.dependencies] +accessible-pygments = "*" +Babel = "*" +beautifulsoup4 = "*" +docutils = "!=0.17.0" +packaging = "*" +pygments = ">=2.7" +sphinx = ">=4.2" +typing-extensions = "*" + +[package.extras] +dev = ["nox", "pre-commit", "pydata-sphinx-theme[doc,test]", "pyyaml"] +doc = ["ablog (>=0.11.0rc2)", "colorama", "ipyleaflet", "jupyter_sphinx", "linkify-it-py", "matplotlib", "myst-nb", "nbsphinx", "numpy", "numpydoc", "pandas", "plotly", "rich", "sphinx-copybutton", "sphinx-design", "sphinx-favicon (>=1.0.1)", "sphinx-sitemap", "sphinx-togglebutton", "sphinxcontrib-youtube", "sphinxext-rediraffe", "xarray"] +test = ["codecov", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "pytest" version = "6.2.5" @@ -375,6 +706,28 @@ files = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "ruff" version = "0.0.253" @@ -419,6 +772,30 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-g testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "soupsieve" +version = "2.4.1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] + [[package]] name = "space-packet-parser" version = "4.0.2" @@ -434,6 +811,137 @@ files = [ [package.dependencies] bitstring = ">=3.0.0,<5" +[[package]] +name = "sphinx" +version = "7.0.1" +description = "Python documentation generator" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "Sphinx-7.0.1.tar.gz", hash = "sha256:61e025f788c5977d9412587e733733a289e2b9fdc2fef8868ddfbfc4ccfe881d"}, + {file = "sphinx-7.0.1-py3-none-any.whl", hash = "sha256:60c5e04756c1709a98845ed27a2eed7a556af3993afb66e77fec48189f742616"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.21" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.13" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = true +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = true +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = true +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = true +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + [[package]] name = "toml" version = "0.10.2" @@ -460,16 +968,34 @@ files = [ [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "2.0.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, ] +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "virtualenv" version = "20.23.1" @@ -491,11 +1017,28 @@ platformdirs = ">=3.5.1,<4" docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] +[[package]] +name = "zipp" +version = "3.16.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "zipp-3.16.0-py3-none-any.whl", hash = "sha256:5dadc3ad0a1f825fe42ce1bce0f2fc5a13af2e6b2d386af5b0ff295bc0a287d3"}, + {file = "zipp-3.16.0.tar.gz", hash = "sha256:1876cb065531855bbe83b6c489dcf69ecc28f1068d8e95959fe8bbc77774c941"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + [extras] dev = ["black", "pre-commit", "ruff"] +doc = ["pydata-sphinx-theme", "sphinx"] test = ["pytest"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "ce9fbe8fd0fe8bf0145ae82170bd10693fa15f2e964ad88ab1793e7c0ebef3c8" +content-hash = "69fe2f268770a713f0f60756e1700018caf7da4223c144b7d630772d144cbe6b" diff --git a/pyproject.toml b/pyproject.toml index 5ee7c5aed..ed95907b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,15 +31,17 @@ classifiers = [ python = ">=3.9,<3.12" space_packet_parser = ">=4.0.2,<5" - - +# Optional dependencies black = {version="^23.1.0", optional=true} pre-commit = {version="^3.3.3,<4", optional=true} -ruff = {version="^0.0.253", optional=true} +pydata-sphinx-theme = {version="*", optional=true} pytest = {version=">=6.2.5,<7", optional=true} +ruff = {version="^0.0.253", optional=true} +sphinx = {version="*", optional=true} [tool.poetry.extras] dev = ["black", "pre-commit", "ruff"] +doc = ["sphinx", "pydata-sphinx-theme"] test = ["pytest"] [project.urls] From ccef051c8df49f8f6c062a46bf4e35c49ed507ca Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 10 Jul 2023 10:30:11 -0600 Subject: [PATCH 06/68] Fixed some broken links; addressed some review comments --- style_guide/README.md | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index dbcb1a11d..f9ef864b2 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -15,9 +15,9 @@ a workflow that involves forking the repository, developing changes on "feature" branches, and opening pull requests through GitHub. The following diagram depicts this workflow (credit to -[Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow): +[Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)): -git and GitHub Workflow +git and GitHub Workflow As such, all feature branches should be branched off of and merged back into the `dev` branch. @@ -36,7 +36,8 @@ As such, all feature branches should be branched off of and merged back into the 3. Ensure that the personal fork is pointing to the `upstream` `imap_processing` repository: - git remote add upstream + git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS + git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH 4. Retrieve the `upstream` `dev` branch: @@ -81,8 +82,8 @@ As such, all feature branches should be branched off of and merged back into the ### Making hotfixes -As shown in the diagram above, sometimes hotfixes need to be directly to the -`main` branch. The workflow for this scenario is as follows: +As shown in the diagram above, sometimes hotfixes need to be made directly to +the `main` branch. The workflow for this scenario is as follows: 1. Assuming steps (1) through (3) in the previous section are already completed, create a new branch named `hotfix-` off of the `main` branch, @@ -121,34 +122,29 @@ that points to their fork, and use the nominal workflow for contributing: Python Coding ------------- -`imap_processing` code shall adhere to the [PEP8](https://www.python.org/dev/peps/pep-0008/) +`imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) conventions save for the following exceptions: - - Lines of code need not be restricted to 79 characters. However, it is -encouraged to break up excessively long lines into several lines if it benefits -the overall readability of the code + - Lines of code need to be restricted to 88 characters to adhere to the `black` +code formatter. - Additionally, the code shall adhere to the following special guidelines: +Additionally, the code shall adhere to the following special guidelines: - Function and class definitions should be placed in alphabetical order in the module - It is encouraged to annotate variables and functions using the -[`typing`](https://docs.python.org/3/library/typing.html) library (see -[PEP 483](https://www.python.org/dev/peps/pep-0483/), -[PEP 484](https://www.python.org/dev/peps/pep-0484/), and -[PEP 526](https://www.python.org/dev/peps/pep-0526/)). +[`typing`](https://docs.python.org/3/library/typing.html) library. -Documentation -------------- +API Documentation +----------------- -`imap_processing` code shall adhere to the [PEP257](https://www.python.org/dev/peps/pep-0008/) +`imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) and [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. The following are further recommendations: -- Each module should have at minimum a description, `Authors`, and `Use` -sections. +- Each module should have at minimum a description and a `Use` section. - Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) sections. @@ -178,10 +174,6 @@ credentials, etc.) If `imap_processing` code needs access to this information, it should be stored in a configuration file that is not part of the repository. -Additionally, developers of this project should be mindful of application -security risks, and should adhere to the -[OWASP Top 10](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf) -as much as possible. Naming Conventions ------------------ @@ -191,7 +183,7 @@ TBD Tools and Library Recommendations --------------------------------- -- `spicepy` for using SPICE kernels +- `spiceypy` for using SPICE kernels - `space-packet-parser` to unpack CCSDS packets Releases From 64585b1a5904d1fad409b46449b7728db9310b25 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 10 Jul 2023 10:46:27 -0600 Subject: [PATCH 07/68] Added poetry section, added tl;dr section, more consistent use of markdown formatting throughout --- style_guide/README.md | 46 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index f9ef864b2..330b16602 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -7,8 +7,24 @@ should be checked against this guide, and any violation of the guide should be fixed before the code is committed to the `main` or `dev` branches. -git & GitHub Workflow ---------------------- +## tl;dr + +The following is a short version of this style guide to be used as a quick +reference. Further details about each of these are provided in the guide. + +1. Use a [forking workflow](#git-&-github-workflow) for git/GitHub contributions. +2. Update the [`poetry` environment](#poetry-environment) when dependencies + change. +3. Use PEP8 for [python coding](#python-coding), with a few exceptions. +4. Use PEP257 and `numpydocs` for [docstring conventions](#api-documentation), + with a few exceptions. +5. Use nominal semantic versioning for [version numbers](#versioning). +6. Be mindful of committing credentials and other [sensitive information](#security). +7. Use specific [tools and libraries](#tools-and-library-recommendations) when + able to. + + +## git & GitHub Workflow The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the repository, developing changes on "feature" @@ -119,8 +135,12 @@ that points to their fork, and use the nominal workflow for contributing: # Make some changes via add/commit cycle git push -Python Coding -------------- +## Poetry Environment + +TBD + +## Python Coding + `imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) conventions save for the following exceptions: @@ -136,8 +156,7 @@ module [`typing`](https://docs.python.org/3/library/typing.html) library. -API Documentation ------------------ +## API Documentation `imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) and [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. @@ -148,8 +167,7 @@ The following are further recommendations: - Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) sections. -Versioning ----------- +## Versioning Any changes pushed to the `main` branch should be tagged with a version number. The version number convention is `x.y.z`, where @@ -159,8 +177,7 @@ The version number convention is `x.y.z`, where z = The hotfix number. Increase when change only contains bug fixes. -Security --------- +## Security The following items should never be committed in the `imap_processing` source code or GitHub issues/pull requests: @@ -175,18 +192,15 @@ If `imap_processing` code needs access to this information, it should be stored in a configuration file that is not part of the repository. -Naming Conventions ------------------- +## Naming Conventions TBD -Tools and Library Recommendations ---------------------------------- +## Tools and Library Recommendations - `spiceypy` for using SPICE kernels - `space-packet-parser` to unpack CCSDS packets -Releases --------- +## Releases TBD From ed73bf960dce01bffc5eb1f952cfcc756ff62de4 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Tue, 11 Jul 2023 11:28:31 -0600 Subject: [PATCH 08/68] Added release workflow section, reformatted to use 120 characters instead of 80, added instructions for installing pre-commit hooks --- style_guide/README.md | 240 +++++++++++++++++++++++------------------- 1 file changed, 132 insertions(+), 108 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 330b16602..ec02524f0 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -1,124 +1,111 @@ `imap_processing` Style Guide ============================= -This document serves as a style guide for all `imap_processing` software -development. Any potential contribution to the `imap_processing` repository -should be checked against this guide, and any violation of the guide should be -fixed before the code is committed to the `main` or `dev` branches. +This document serves as a style guide for all `imap_processing` software development. Any potential contribution to the +`imap_processing` repository should be checked against this guide, and any violation of the guide should be fixed before +the code is committed to the `main` or `dev` branches. ## tl;dr -The following is a short version of this style guide to be used as a quick -reference. Further details about each of these are provided in the guide. +The following is a short version of this style guide to be used as a quick reference. Further details about each of +these items are provided below in the guide. 1. Use a [forking workflow](#git-&-github-workflow) for git/GitHub contributions. -2. Update the [`poetry` environment](#poetry-environment) when dependencies - change. -3. Use PEP8 for [python coding](#python-coding), with a few exceptions. -4. Use PEP257 and `numpydocs` for [docstring conventions](#api-documentation), - with a few exceptions. -5. Use nominal semantic versioning for [version numbers](#versioning). -6. Be mindful of committing credentials and other [sensitive information](#security). -7. Use specific [tools and libraries](#tools-and-library-recommendations) when - able to. +2. Use `PEP8` for [python coding conventions](#python-coding), with a few exceptions. +3. Use `PEP257` and `numpydocs` for [docstring conventions](#api-documentation), with a few exceptions. +4. Update the [`poetry` environment](#poetry-environment) when dependencies change. +5. Be mindful of committing credentials and other [sensitive information](#security). +6. Follow agreed-upon [naming conventions](#naming-conventions) where applicable. +7. Use specific [tools and libraries](#tools-and-library-recommendations) where applicable. +8. Use nominal semantic versioning for [version numbers](#versioning). +9. Follow a specific [release workflow](#release-workflow) when making releases. ## git & GitHub Workflow -The best method for contributing software to the `imap_processing` repository is -a workflow that involves forking the repository, developing changes on "feature" -branches, and opening pull requests through GitHub. +The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the +repository, developing changes on "feature" branches, and opening pull requests through GitHub. The following diagram depicts this workflow (credit to [Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)): -git and GitHub Workflow +git and GitHub Workflow -As such, all feature branches should be branched off of and merged back into the -`dev` branch. +As such, all feature branches should be branched off of and merged back into the `dev` branch. ### Contributing new features -*Note: Steps (1) through (4) only to be done once.* +Before contributing, it is generally encouraged to +[open a GitHub issue](https://github.com/IMAP-Science-Operations-Center/imap_processing/issues/new) +that describes the feature to be implemented, or the problem that is trying to be solved. This allows the contributor +and the team as a whole to keep track of how the feature relates to the project and track its progress. Any +contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. -1. Create a personal fork of the `imap_processing` repository by visiting the - repository main `IMAP-Science-Operations-Center` `imap_processing` - [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) - and clicking the `Fork` button near the top-right of the page. Follow the - various steps to create a fork under your GitHub account. -2. Make a local copy of your personal fork by cloning the repository, using the - URL found by clicking the green "clone" button. -3. Ensure that the personal fork is pointing to the `upstream` `imap_processing` - repository: +*Note: Steps (1) through (5) only to be completed once.* + +1. Create a personal fork of the `imap_processing` repository by visiting the main `IMAP-Science-Operations-Center` + `imap_processing` [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) and clicking the + `Fork` button near the top-right of the page. Follow the various steps to create a fork under your GitHub account. +2. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" + button: + + git clone https://github.com//imap_processing.git # for HTTPS + git clone git@github.com:/imap_processing.git # for SSH + +3. Ensure that the personal fork is pointing to the `upstream` `imap_processing` repository: git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH -4. Retrieve the `upstream` `dev` branch: +4. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools + [`black`](https://black.readthedocs.io/en/stable/) and [`ruff`](https://beta.ruff.rs/docs/) on your code changes + before commits: + + pip install .[dev] + pre-commit install + +5. Retrieve the `upstream` `dev` branch: git fetch upstream git checkout -b dev upstream/dev -6. Create a feature branch off of the `dev` branch to develop changes on. - Branch names should be short but descriptive (e.g. - `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). - Consistent use of hyphens is encouraged. +6. Create a feature branch off of the `dev` branch to develop changes on. Branch names should be short but descriptive + (e.g. `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). Consistent use of hyphens is + encouraged. git checkout -b -7. Make changes to the branch using the nominal `git add`/`git commit` cycle: +7. Make changes to the branch using the nominal `git add`/`git commit` cycle. git add git commit -m 'Explaination of the changes' + With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by `black` and/or + `ruff` and try committing your changes again. + 8. Push the feature branch to your personal fork's GitHub repository: git push origin 9. On the `IMAP-Science-Operations-Center` `imap_processing` - [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) - create a new pull request. Click on the "compare across forks" link to - enable the pull request to use your fork. Set the "base repository" to - `IMAP-Science-Operations-Center` and "base" to `dev`. Set the "head - repository" to the `imap_processing` repository under your personal fork - and "compare" to your feature branch. If the feature branch is still under - development, you can click the "Convert to draft" button under the - "Reviewers" section, or add a "[WIP]" at the beginning of the pull request - title to signify that the pull request is not ready to be merged. - -10. Assign at least one reviewer to the pull request. They will review your - pull request and either accept the request or ask for additional changes. - If additional changes are needed, iterate through steps (6) and (7) until - you and the reviewer(s) are satisfied. - -11. Once the pull request has been accepted, you can merge the pull request and - delete the feature branch. - - -### Making hotfixes - -As shown in the diagram above, sometimes hotfixes need to be made directly to -the `main` branch. The workflow for this scenario is as follows: + [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) create a new pull request. Click on + the "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to + `IMAP-Science-Operations-Center` and "base" to `dev`. Set the "head repository" to the `imap_processing` repository + under your personal fork and "compare" to your feature branch. If the feature branch is still under development, you + can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the beginning of the pull + request title to signify that the pull request is not ready to be merged. -1. Assuming steps (1) through (3) in the previous section are already completed, - create a new branch named `hotfix-` off of the `main` branch, - and commit any necessary changes following the nominal `git add`/`git commit` - cycle. -2. Push the hotfix branch to your personal fork, and open two separate pull - requests: one that merges the hotfix branch into the - `IMAP-Science-Operations-Center` `imap_processing` `main` branch, and one - that merges the hotfix branch into the `IMAP-Science-Operations-Center` - `imap_processing` `dev` branch. -3. For each of these pull requests, proceed with the nominal review & merge - process described in steps (9) and (10) in the previous section. +10. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for + significant changes. They will review your pull request and either accept the request or ask for additional changes. + If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. +11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. ### Keeping your fork updated -You can keep your personal fork up-to-date with the -`IMAP-Science-Operations-Cetner` `imap_processing` repository by fetching and -pulling the `upstream` remote: +You can keep your personal fork up-to-date with the `IMAP-Science-Operations-Center` `imap_processing` repository by +fetching and pulling the `upstream` remote: git checkout dev git fetch upstream dev @@ -126,8 +113,8 @@ pulling the `upstream` remote: ### Collaborating on someone else's fork -To contribute to a branch on another person's personal fork, add a new `remote` -that points to their fork, and use the nominal workflow for contributing: +To contribute to a branch on another person's personal fork, add a new `remote` that points to their fork, and use the +nominal workflow for contributing: git remote add git fetch @@ -135,72 +122,109 @@ that points to their fork, and use the nominal workflow for contributing: # Make some changes via add/commit cycle git push -## Poetry Environment - -TBD ## Python Coding +`imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) conventions save for the following +exceptions: -`imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) -conventions save for the following exceptions: - - - Lines of code need to be restricted to 88 characters to adhere to the `black` -code formatter. - -Additionally, the code shall adhere to the following special guidelines: - - - Function and class definitions should be placed in alphabetical order in the -module + - Lines of code need to be restricted to 88 characters to adhere to the `black` code formatter. + - Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use `temperature` instead of `temp`, `filename` + instead of `fn`). + - Function and class definitions should be placed in alphabetical order in the module. - It is encouraged to annotate variables and functions using the -[`typing`](https://docs.python.org/3/library/typing.html) library. + [`typing`](https://docs.python.org/3/library/typing.html) library. ## API Documentation -`imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) -and [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. +`imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) and +[numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. The following are further recommendations: - Each module should have at minimum a description and a `Use` section. -- Each function/method should have at minimum a description, `Parameters` (if -necessary), and `Returns` (if necessary) sections. +- Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) + sections. -## Versioning -Any changes pushed to the `main` branch should be tagged with a version number. -The version number convention is `x.y.z`, where +## Poetry Environment - x = The main version number. Increase when making incompatible API changes. - y = The feature number. Increase when change contains a new feature with or without bug fixes. - z = The hotfix number. Increase when change only contains bug fixes. +TBD ## Security -The following items should never be committed in the `imap_processing` source -code or GitHub issues/pull requests: +The following items should never be committed in the `imap_processing` source code or GitHub issues/pull requests: -- Account credentials of any kind (e.g. database usernames/passwords, AWS -credentials, etc.) +- Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) - Internal directory structures or filepaths - Machine names - Proprietary data -If `imap_processing` code needs access to this information, it should be stored -in a configuration file that is not part of the repository. +If `imap_processing` code needs access to this information, it should be stored in a configuration file that is not part +of the repository. ## Naming Conventions TBD + ## Tools and Library Recommendations +- `black` for checking python code formatting +- `pytest` for unit testing +- `ruff` for checking docstring formatting - `spiceypy` for using SPICE kernels - `space-packet-parser` to unpack CCSDS packets -## Releases -TBD +## Versioning + +Any changes pushed to the `main` branch should be tagged with a version number. The version number convention is +`x.y.z`, where + + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. + + +## Release Workflow + +Any changes merged or pushed to the `main` branch should follow a specific release workflow which follows the diagram +shown in the [git & GitHub Workflow](#git-&-github-workflow) section. This includes both 'nominal releases' (i.e. new +features being merged into `main`) and 'hotfixes' (i.e. bug fixes made directly to `main`). These workflows are +described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-&-github-workflow) section +are already completed. + +### Nominal releases + +1. Make sure the `dev` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature + branches using the nominal [git/GitHub workflow](#git-&-github-workflow)). +2. Create a new 'release' branch off of `dev`. The name of the branch should match the version number to be used for + the release, which should follow the [versioning](#versioning) conventions. +3. Make any release-specific commits to the new release branch using the nominal `git add`/`git commit` cycle. This may + include commits that add release notes, or update version numbers in various configurations. +4. Push the release branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`). +5. In GitHub, create two pull requests: one that merges the release branch into `main`, and one that merges the release + branch into `dev`. Proceed with the nominal review & merge process described in steps (10) and (11) in the +6. proceed with the nominal review & merge process described in steps (10) and (11) in the + [git/GitHub workflow](#git-&-github-workflow) section. +7. Once the changes are merged into the `main` branch, create a + [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) for the merge commit and + assign the appropriate version number. + +### Making hotfixes + +1. Create a new branch named `hotfix-` off of the `main` branch, and commit any necessary changes following + the nominal `git add`/`git commit` cycle. +2. Push the hotfix branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`), and + open two separate pull requests: one that merges the hotfix branch into the `main` branch, and one that merges the + hotfix branch into the `dev` branch. +3. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in + the previous section. +4. Once the changes are merged into the `main` branch, create a + [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) or a + [new tag](https://github.com/IMAP-Science-Operations-Center/imap_processing/tags) for the merge commit and assign the + appropriate [version number](#versioning). From 54b58ac0ac8421d956ed98b5ffa493ebc1f82c4c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 20:12:42 +0000 Subject: [PATCH 09/68] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 22.12.0 → 23.3.0](https://github.com/psf/black/compare/22.12.0...23.3.0) - [github.com/charliermarsh/ruff-pre-commit: v0.0.245 → v0.0.275](https://github.com/charliermarsh/ruff-pre-commit/compare/v0.0.245...v0.0.275) - [github.com/python-poetry/poetry: 1.4.0 → 1.5.0](https://github.com/python-poetry/poetry/compare/1.4.0...1.5.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 933ba03eb..32c917abf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,8 +16,8 @@ repos: rev: 23.3.0 hooks: - id: black - - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: 'v0.0.276' + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: 'v0.0.277' hooks: - id: ruff args: [--fix] From 7cdb5783db00ed6938613db4fd269f48ddda4ce2 Mon Sep 17 00:00:00 2001 From: Maxine Hartnett Date: Tue, 11 Jul 2023 11:46:22 -0600 Subject: [PATCH 10/68] Added section on updating poetry environments --- style_guide/README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/style_guide/README.md b/style_guide/README.md index ec02524f0..21791e11d 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -150,7 +150,25 @@ The following are further recommendations: ## Poetry Environment -TBD +Poetry is used for dependency management within this project. To update dependencies, you can either update +`pyproject.toml` manually, or use `poetry add `. + +If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use +[caret notation](https://python-poetry.org/docs/dependency-specification/#caret-requirements) to allow for minor version +updates. For example, if you have tested the code using numpy version `1.24.2`, the best way to specify the dependency +is to allow for updates to the left most version number: + + numpy = "^1.24"` + +This will allow for patches for security reasons without upgrading to `1.25` or beyond. Use your best judgement for when +packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely +required. + +The `poetry.lock` file contains the existing dependencies for the project. These are the dependencies that you should +install to ensure you're getting the accepted versions for every package. If the `poetry.lock` file is not up-to-date, +there is an automatic process within the repo to update `poetry.lock` to match `pyproject.toml`. To resolve any +dependency issues before the pre-commit hook, users should run `poetry lock` and resolve any dependency problems ahead +of time. The `poetry.lock` file should be part of the files committed in this case. ## Security From 6dcb24b305d234089c1187b6f0fbcf5ef84c72d0 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Tue, 11 Jul 2023 13:33:42 -0600 Subject: [PATCH 11/68] Added checklist for contributors and reviewers of PRs --- style_guide/README.md | 73 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 21791e11d..70d10ab4c 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -11,7 +11,7 @@ the code is committed to the `main` or `dev` branches. The following is a short version of this style guide to be used as a quick reference. Further details about each of these items are provided below in the guide. -1. Use a [forking workflow](#git-&-github-workflow) for git/GitHub contributions. +1. Use a [forking workflow](#git-&-github-workflow) for git/GitHub contributions. 2. Use `PEP8` for [python coding conventions](#python-coding), with a few exceptions. 3. Use `PEP257` and `numpydocs` for [docstring conventions](#api-documentation), with a few exceptions. 4. Update the [`poetry` environment](#poetry-environment) when dependencies change. @@ -30,7 +30,7 @@ repository, developing changes on "feature" branches, and opening pull requests The following diagram depicts this workflow (credit to [Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)): -git and GitHub Workflow +git and GitHub Workflow As such, all feature branches should be branched off of and merged back into the `dev` branch. @@ -186,7 +186,7 @@ of the repository. ## Naming Conventions -TBD +*To be determined* ## Tools and Library Recommendations @@ -211,15 +211,15 @@ Any changes pushed to the `main` branch should be tagged with a version number. ## Release Workflow Any changes merged or pushed to the `main` branch should follow a specific release workflow which follows the diagram -shown in the [git & GitHub Workflow](#git-&-github-workflow) section. This includes both 'nominal releases' (i.e. new +shown in the [git & GitHub Workflow](#git-&-github-workflow) section. This includes both 'nominal releases' (i.e. new features being merged into `main`) and 'hotfixes' (i.e. bug fixes made directly to `main`). These workflows are -described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-&-github-workflow) section +described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-&-github-workflow) section are already completed. ### Nominal releases 1. Make sure the `dev` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature - branches using the nominal [git/GitHub workflow](#git-&-github-workflow)). + branches using the nominal [git/GitHub workflow](#git-&-github-workflow)). 2. Create a new 'release' branch off of `dev`. The name of the branch should match the version number to be used for the release, which should follow the [versioning](#versioning) conventions. 3. Make any release-specific commits to the new release branch using the nominal `git add`/`git commit` cycle. This may @@ -228,7 +228,7 @@ are already completed. 5. In GitHub, create two pull requests: one that merges the release branch into `main`, and one that merges the release branch into `dev`. Proceed with the nominal review & merge process described in steps (10) and (11) in the 6. proceed with the nominal review & merge process described in steps (10) and (11) in the - [git/GitHub workflow](#git-&-github-workflow) section. + [git/GitHub workflow](#git-&-github-workflow) section. 7. Once the changes are merged into the `main` branch, create a [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) for the merge commit and assign the appropriate version number. @@ -246,3 +246,62 @@ are already completed. [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) or a [new tag](https://github.com/IMAP-Science-Operations-Center/imap_processing/tags) for the merge commit and assign the appropriate [version number](#versioning). + + +## Checklist for Contributors and Reviewers of Pull Requests + +The following is a guide to be used for contributors and reviewers of `imap_processing` pull requests. Note that this is +only a guide; it should not be treated as a fully comprehensive, foolproof list that must be used in all situations, and +parts of it are subjective. + +If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are +acceptable and the PR can be reviewed and merged. + +### Checklist for Contributors + +#### Pertaining to the code: + +- Does the code conform to this style guide? +- Is any of the code functionality not already available via native or third-party python libraries? +- Does the code execute successfully? + - Do all the tests pass in the existing test suite? + - Does the newly added functionality run without errors? +- Is the code documented and commented sufficiently such that it is easy to read and follow? + - Are docstrings included for all new modules, classes, and functions? + - Are in-line comments included to provide necessary context? +- Have all debugging/print statements been removed? +- Does the code contain sufficient exception handling? +- Does the code contain no deprecation warnings? +- Does the code include all necessary unit tests? + +#### Pertaining to the pull request: + +- Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. +- Does the PR have a concise, descriptive title? +- Does the PR link to and close the relevant issue? +- Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +- Is the PR merging into `upstream/dev` from `/` (in most cases)? +- Are you listed as an assignee to the PR? +- Does the PR have proper labels? +- Do all the automated checks pass? + + +### Checklist for Reviewers + +##### Pertaining to the pull request: + +- Does the PR have a concise, descriptive title? +- Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +- Is the PR merging into `upstream/dev` from `/` (in most cases)? +- Does the PR have at least one assignee? +- Does the PR have proper labels? +- Is the PR no longer a work in progress? +- Do all the automated checks pass? + +#### Pertaining to the code: + +- Does the code conform to this style guide? +- Is the code documented and commented sufficiently such that it is easy to read and follow? +- Does the code contain sufficient exception handling? +- Does the code contain no sensitive data or information? +- Does the code contain any necessary unit tests? \ No newline at end of file From 35210dc07eba9547c54e77bde1b583732efc7586 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Tue, 11 Jul 2023 15:49:24 -0600 Subject: [PATCH 12/68] Added all-contributors section and badge --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..3326d3fae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![All Contributors](https://img.shields.io/github/all-contributors/IMAP-Science-Operations-Center/imap_processing?color=ee8449&style=flat-square)](#contributors) + # IMAP (Interstellar Mapping and Acceleration Probe) The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. @@ -10,4 +12,16 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) + +## Contributors + + + + + + + + + + From d4480e9adf9879a904920b6834b4573c0cd6f23f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 21:57:25 +0000 Subject: [PATCH 13/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..a5425d605 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Matthew Bourque
Matthew Bourque

💻
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From 1cdae3aad12672240ebe19251ffcfb0cb8ff1c48 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 21:57:27 +0000 Subject: [PATCH 14/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..0d8916dcb --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,26 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "bourque", + "name": "Matthew Bourque", + "avatar_url": "https://avatars.githubusercontent.com/u/2250769?v=4", + "profile": "https://github.com/bourque", + "contributions": [ + "code" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From 2cf10d4ad7035216320847c3620e5efbecdc7e7c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:27:03 +0000 Subject: [PATCH 15/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..da2dca790 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Greg Lucas
Greg Lucas

💻 🐛 🔣 📖 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From b598479a0d09ba40def5183856a4b5addce8fed8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:27:04 +0000 Subject: [PATCH 16/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..6c4ec3fb7 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,32 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "greglucas", + "name": "Greg Lucas", + "avatar_url": "https://avatars.githubusercontent.com/u/12417828?v=4", + "profile": "http://greglucas.github.io", + "contributions": [ + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From a08e5dd28f2cf222e795b72bc4f4e5f8d9714ad6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:27:09 +0000 Subject: [PATCH 17/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..dd0ec919f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Tenzin Choedon
Tenzin Choedon

💻 🐛 🔣 📖 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From 5fecfcbb24ed6bf1c7f5eda078ad0cbf1f69df1f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:27:21 +0000 Subject: [PATCH 18/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..e09476951 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,32 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "tech3371", + "name": "Tenzin Choedon", + "avatar_url": "https://avatars.githubusercontent.com/u/36522642?v=4", + "profile": "https://github.com/tech3371", + "contributions": [ + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From ce6c35ab5e5afe80ca09779191156058573293ce Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:37:01 +0000 Subject: [PATCH 19/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..672f042bb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Laura Sandoval
Laura Sandoval

💻 🐛 🔣 📖 💡 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From 6e8699340f71ddbfe56b8fbd153ba235c61cfcbc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:37:02 +0000 Subject: [PATCH 20/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..74216f8af --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,33 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "laspsandoval", + "name": "Laura Sandoval", + "avatar_url": "https://avatars.githubusercontent.com/u/46567335?v=4", + "profile": "https://github.com/laspsandoval", + "contributions": [ + "code", + "bug", + "data", + "doc", + "example", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From 6e56c49977862ed16588d763f28168b7afd9acd9 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:41:04 +0000 Subject: [PATCH 21/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..e7502bcf8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Maxine Hartnett
Maxine Hartnett

💻 🐛 🔣 📖 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From a55a9d97abcfad6ff8a8bf3907ec436ee897e47a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:41:07 +0000 Subject: [PATCH 22/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..17525cf78 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,32 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "maxinelasp", + "name": "Maxine Hartnett", + "avatar_url": "https://avatars.githubusercontent.com/u/117409426?v=4", + "profile": "https://github.com/maxinelasp", + "contributions": [ + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From c632b52767dae941fc4193358771743674585684 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:43:56 +0000 Subject: [PATCH 23/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..9d9c5542e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Sean Hoyt
Sean Hoyt

💻 🐛 🔣 📖 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From cf145107dbc20d5fd37566a27932b85de9df263e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:43:57 +0000 Subject: [PATCH 24/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..06fe883a4 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,32 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "sdhoyt", + "name": "Sean Hoyt", + "avatar_url": "https://avatars.githubusercontent.com/u/7146374?v=4", + "profile": "https://github.com/sdhoyt", + "contributions": [ + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From 351408315c372e92aae027f18bb15076ad6695b7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:47:02 +0000 Subject: [PATCH 25/68] docs: update README.md [skip ci] --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9633a82e5..a627f5f32 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # IMAP (Interstellar Mapping and Acceleration Probe) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -10,4 +13,25 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) # Credits -[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) \ No newline at end of file +[LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + +
Gabriel M.
Gabriel M.

💻 🐛 🔣 📖 🤔 🚇 🚧
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From 554ee024b0c15d32cb8b3e315c478e12c5525c45 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:47:02 +0000 Subject: [PATCH 26/68] docs: create .all-contributorsrc [skip ci] --- .all-contributorsrc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..96b33a1ef --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,32 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitType": "docs", + "commitConvention": "angular", + "contributors": [ + { + "login": "GFMoraga", + "name": "Gabriel M.", + "avatar_url": "https://avatars.githubusercontent.com/u/104743000?v=4", + "profile": "https://github.com/GFMoraga", + "contributions": [ + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true, + "repoType": "github", + "repoHost": "https://github.com", + "projectName": "imap_processing", + "projectOwner": "IMAP-Science-Operations-Center" +} From 8548e67f5ec668db9364488ee965f68131a5ccfd Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:52:00 +0000 Subject: [PATCH 27/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5425d605..e58953a4e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - +
Matthew Bourque
Matthew Bourque

💻
Matthew Bourque
Matthew Bourque

💻 🐛 🔣 📖 🤔 🚇 🚧
From 04eea5055b5ec5cf941969972a3780591bdec32b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:52:28 +0000 Subject: [PATCH 28/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0d8916dcb..65778db49 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -13,7 +13,13 @@ "avatar_url": "https://avatars.githubusercontent.com/u/2250769?v=4", "profile": "https://github.com/bourque", "contributions": [ - "code" + "code", + "bug", + "data", + "doc", + "ideas", + "infra", + "maintenance" ] } ], From ffed9857daf46057379e546bda470bd614f70685 Mon Sep 17 00:00:00 2001 From: Gabriel M Date: Wed, 12 Jul 2023 11:15:24 -0600 Subject: [PATCH 29/68] Updates on templates + new file. Thanks @greglucas @tech3371 @maxinelasp for review comments --- .../issue_templates/Algorithim_development.md | 20 +++++++++++-------- .github/issue_templates/Bug_reporting.md | 10 ++++------ .github/issue_templates/General_issue.md | 17 ++++++++++++++++ .gitignore | 1 + 4 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 .github/issue_templates/General_issue.md diff --git a/.github/issue_templates/Algorithim_development.md b/.github/issue_templates/Algorithim_development.md index 7b6005c5c..23baffc05 100644 --- a/.github/issue_templates/Algorithim_development.md +++ b/.github/issue_templates/Algorithim_development.md @@ -4,9 +4,16 @@ > **Specify: (optional)** -### Algorithm Code Info: Data/Input/Output +### Algorithm Code Information: +> Input data: +> > **Specify details:** +> +> Algorithim steps/psuedocode: +> > **Specify details:** +> +> Output data: +> > **Specify details:** -> **Specify details:** ### Code: @@ -14,13 +21,10 @@ # Code ``` -### Requirements/ Dependencies: +#### Specify if any dependicies were added -- [ ] - 1. Yes -- [ ] - 2. No -### If yes, specify: ### Other Notes: + +### Related Issues/PRs: diff --git a/.github/issue_templates/Bug_reporting.md b/.github/issue_templates/Bug_reporting.md index 2794fbb32..6068a9c43 100644 --- a/.github/issue_templates/Bug_reporting.md +++ b/.github/issue_templates/Bug_reporting.md @@ -1,4 +1,4 @@ - Where did it occur? +## Description of the issue ### Steps to reproduce the issue @@ -16,10 +16,8 @@ ### Actual behavior (What does happen) -### Additional notes +#### Additional notes -### Did you try to fix the issue? (Yes/No) +### Affected areas (code, data, or process) -- [ ] Yes -- [ ] No -- [ ] I tried but I couldn't fix it +### Suggested fix? diff --git a/.github/issue_templates/General_issue.md b/.github/issue_templates/General_issue.md new file mode 100644 index 000000000..c306a49f9 --- /dev/null +++ b/.github/issue_templates/General_issue.md @@ -0,0 +1,17 @@ +### Topic: + +### Description: + +### Requirements + +> **Specify: (optional)** + +### Code Snippet (optional): + + ```python + # Code + ``` + +### Related (optional): + +### Follow-up comments: \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2dc53ca34..5ee9a36ad 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,4 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. .idea/ +.DS_Store From bd524e4bd3b6b3fc7dba5ea3395ef21fe9f71c07 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:32:01 +0000 Subject: [PATCH 30/68] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .github/issue_templates/Algorithim_development.md | 4 ++-- .github/issue_templates/Bug_reporting.md | 6 +++--- .github/issue_templates/General_issue.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/issue_templates/Algorithim_development.md b/.github/issue_templates/Algorithim_development.md index 23baffc05..44ac4300a 100644 --- a/.github/issue_templates/Algorithim_development.md +++ b/.github/issue_templates/Algorithim_development.md @@ -7,10 +7,10 @@ ### Algorithm Code Information: > Input data: > > **Specify details:** -> +> > Algorithim steps/psuedocode: > > **Specify details:** -> +> > Output data: > > **Specify details:** diff --git a/.github/issue_templates/Bug_reporting.md b/.github/issue_templates/Bug_reporting.md index 6068a9c43..d2156d95e 100644 --- a/.github/issue_templates/Bug_reporting.md +++ b/.github/issue_templates/Bug_reporting.md @@ -1,9 +1,9 @@ -## Description of the issue +## Description of the issue ### Steps to reproduce the issue - 1. - 2. + 1. + 2. 3. ### Code Snippet: diff --git a/.github/issue_templates/General_issue.md b/.github/issue_templates/General_issue.md index c306a49f9..7b344795a 100644 --- a/.github/issue_templates/General_issue.md +++ b/.github/issue_templates/General_issue.md @@ -7,7 +7,7 @@ > **Specify: (optional)** ### Code Snippet (optional): - + ```python # Code ``` From 7b508e6a920847c3b0320137ba47072336065181 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:53:39 +0000 Subject: [PATCH 31/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7502bcf8..0f9fb53bd 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - +
Maxine Hartnett
Maxine Hartnett

💻 🐛 🔣 📖 🤔 🚇 🚧
Maxine Hartnett
Maxine Hartnett

💻 🐛 🔣 📖 🤔 🚇 🚧 👀
From 534337c7ad40bc5711c68fa946e0f9e26e4a24c6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:53:40 +0000 Subject: [PATCH 32/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 17525cf78..ac58f52ab 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -19,7 +19,8 @@ "doc", "ideas", "infra", - "maintenance" + "maintenance", + "review" ] } ], From d806536e72e912f2c9678e0d5aaed8fe90931dca Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Wed, 12 Jul 2023 14:09:22 -0600 Subject: [PATCH 33/68] Changes from review comments. Thank you @maxinelasp, @greglucas, @tech3371, and @sdhoyt! --- style_guide/README.md | 44 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 70d10ab4c..9da71b386 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -11,9 +11,10 @@ the code is committed to the `main` or `dev` branches. The following is a short version of this style guide to be used as a quick reference. Further details about each of these items are provided below in the guide. -1. Use a [forking workflow](#git-&-github-workflow) for git/GitHub contributions. -2. Use `PEP8` for [python coding conventions](#python-coding), with a few exceptions. -3. Use `PEP257` and `numpydocs` for [docstring conventions](#api-documentation), with a few exceptions. +1. Use a [forking workflow](#git-and-github-workflow) for git/GitHub contributions. +2. Use `PEP8` for [python coding conventions](#python-coding) (with a few exceptions). +3. Use `PEP257` and `numpydocs` for [docstring conventions](#api-documentation) (with a few exceptions), and update the + documentation builds where applicable. 4. Update the [`poetry` environment](#poetry-environment) when dependencies change. 5. Be mindful of committing credentials and other [sensitive information](#security). 6. Follow agreed-upon [naming conventions](#naming-conventions) where applicable. @@ -22,7 +23,7 @@ these items are provided below in the guide. 9. Follow a specific [release workflow](#release-workflow) when making releases. -## git & GitHub Workflow +## git and GitHub Workflow The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the repository, developing changes on "feature" branches, and opening pull requests through GitHub. @@ -37,9 +38,9 @@ As such, all feature branches should be branched off of and merged back into the ### Contributing new features Before contributing, it is generally encouraged to -[open a GitHub issue](https://github.com/IMAP-Science-Operations-Center/imap_processing/issues/new) -that describes the feature to be implemented, or the problem that is trying to be solved. This allows the contributor -and the team as a whole to keep track of how the feature relates to the project and track its progress. Any +[open a GitHub issue](https://github.com/IMAP-Science-Operations-Center/imap_processing/issues/new), if one does not +already exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the +contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. *Note: Steps (1) through (5) only to be completed once.* @@ -147,6 +148,9 @@ The following are further recommendations: - Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) sections. +When a new module is added to the repository, make sure to add the module to the appropriate `docs/source/*.rst` file, +so that the API documentation can be part of the automated documentation build. + ## Poetry Environment @@ -156,7 +160,7 @@ Poetry is used for dependency management within this project. To update dependen If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use [caret notation](https://python-poetry.org/docs/dependency-specification/#caret-requirements) to allow for minor version updates. For example, if you have tested the code using numpy version `1.24.2`, the best way to specify the dependency -is to allow for updates to the left most version number: +is to allow for updates to the right most version number: numpy = "^1.24"` @@ -192,6 +196,7 @@ of the repository. ## Tools and Library Recommendations - `black` for checking python code formatting +- `poetry` for dependency management and virtual environments - `pytest` for unit testing - `ruff` for checking docstring formatting - `spiceypy` for using SPICE kernels @@ -211,37 +216,39 @@ Any changes pushed to the `main` branch should be tagged with a version number. ## Release Workflow Any changes merged or pushed to the `main` branch should follow a specific release workflow which follows the diagram -shown in the [git & GitHub Workflow](#git-&-github-workflow) section. This includes both 'nominal releases' (i.e. new +shown in the [git & GitHub Workflow](#git-and-github-workflow) section. This includes both 'nominal releases' (i.e. new features being merged into `main`) and 'hotfixes' (i.e. bug fixes made directly to `main`). These workflows are -described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-&-github-workflow) section +described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-and-github-workflow) section are already completed. ### Nominal releases 1. Make sure the `dev` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature - branches using the nominal [git/GitHub workflow](#git-&-github-workflow)). + branches using the nominal [git/GitHub workflow](#git-and-github-workflow)). 2. Create a new 'release' branch off of `dev`. The name of the branch should match the version number to be used for the release, which should follow the [versioning](#versioning) conventions. 3. Make any release-specific commits to the new release branch using the nominal `git add`/`git commit` cycle. This may include commits that add release notes, or update version numbers in various configurations. 4. Push the release branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`). 5. In GitHub, create two pull requests: one that merges the release branch into `main`, and one that merges the release - branch into `dev`. Proceed with the nominal review & merge process described in steps (10) and (11) in the -6. proceed with the nominal review & merge process described in steps (10) and (11) in the - [git/GitHub workflow](#git-&-github-workflow) section. -7. Once the changes are merged into the `main` branch, create a + branch into `dev`. Proceed with the nominal review & merge process described in steps (10) and (11) in the + [git/GitHub workflow](#git-and-github-workflow) section. +6. Once the changes are merged into the `main` branch, create a [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) for the merge commit and assign the appropriate version number. ### Making hotfixes +*Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal `dev` branch +workflow; for example, if a bug fix is very time critical.* + 1. Create a new branch named `hotfix-` off of the `main` branch, and commit any necessary changes following the nominal `git add`/`git commit` cycle. 2. Push the hotfix branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`), and open two separate pull requests: one that merges the hotfix branch into the `main` branch, and one that merges the hotfix branch into the `dev` branch. 3. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in - the previous section. + the [git/GitHub workflow](#git-and-github-workflow) section. 4. Once the changes are merged into the `main` branch, create a [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) or a [new tag](https://github.com/IMAP-Science-Operations-Center/imap_processing/tags) for the merge commit and assign the @@ -269,10 +276,12 @@ acceptable and the PR can be reviewed and merged. - Is the code documented and commented sufficiently such that it is easy to read and follow? - Are docstrings included for all new modules, classes, and functions? - Are in-line comments included to provide necessary context? + - Are any documentation files in other locations updated? - Have all debugging/print statements been removed? - Does the code contain sufficient exception handling? - Does the code contain no deprecation warnings? - Does the code include all necessary unit tests? +- Are any new dependencies correctly added to the `pyproject.toml` file? #### Pertaining to the pull request: @@ -304,4 +313,5 @@ acceptable and the PR can be reviewed and merged. - Is the code documented and commented sufficiently such that it is easy to read and follow? - Does the code contain sufficient exception handling? - Does the code contain no sensitive data or information? -- Does the code contain any necessary unit tests? \ No newline at end of file +- Does the code contain any necessary unit tests? +- If there are new dependencies, are they all necessary? Are they correctly added to the `pyproject.toml` file? From 8010dcde5c2c8ba6ed7c8b21340723e830a1dc81 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 20:14:19 +0000 Subject: [PATCH 34/68] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- style_guide/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/style_guide/README.md b/style_guide/README.md index 9da71b386..aa3e26e1a 100644 --- a/style_guide/README.md +++ b/style_guide/README.md @@ -40,7 +40,7 @@ As such, all feature branches should be branched off of and merged back into the Before contributing, it is generally encouraged to [open a GitHub issue](https://github.com/IMAP-Science-Operations-Center/imap_processing/issues/new), if one does not already exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the -contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any +contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. *Note: Steps (1) through (5) only to be completed once.* @@ -161,12 +161,12 @@ If you do add dependencies, please make sure you define the version numbers mind [caret notation](https://python-poetry.org/docs/dependency-specification/#caret-requirements) to allow for minor version updates. For example, if you have tested the code using numpy version `1.24.2`, the best way to specify the dependency is to allow for updates to the right most version number: - + numpy = "^1.24"` This will allow for patches for security reasons without upgrading to `1.25` or beyond. Use your best judgement for when packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely -required. +required. The `poetry.lock` file contains the existing dependencies for the project. These are the dependencies that you should install to ensure you're getting the accepted versions for every package. If the `poetry.lock` file is not up-to-date, From dcf7e068682c09bd415c7402694c4ed466508833 Mon Sep 17 00:00:00 2001 From: Greg Lucas Date: Mon, 17 Jul 2023 15:02:43 -0600 Subject: [PATCH 35/68] BLD: Update Poetry lock file for Poetry v1.5.0 --- .pre-commit-config.yaml | 1 + poetry.lock | 139 ++++++++++++---------------------------- 2 files changed, 42 insertions(+), 98 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 32c917abf..56f0a3727 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,3 +26,4 @@ repos: hooks: - id: poetry-check - id: poetry-lock + args: [--no-update] diff --git a/poetry.lock b/poetry.lock index eef7ff2d2..63786f98c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. [[package]] name = "accessible-pygments" version = "0.0.4" description = "A collection of accessible pygments styles" -category = "main" optional = true python-versions = "*" files = [ @@ -19,7 +18,6 @@ pygments = ">=1.5" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -31,7 +29,6 @@ files = [ name = "atomicwrites" version = "1.4.1" description = "Atomic file writes." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -42,7 +39,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -61,7 +57,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -73,7 +68,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = true python-versions = ">=3.6.0" files = [ @@ -92,7 +86,6 @@ lxml = ["lxml"] name = "bitstring" version = "4.0.2" description = "Simple construction, analysis and modification of binary data." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -102,37 +95,33 @@ files = [ [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -154,7 +143,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -166,7 +154,6 @@ files = [ name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -178,7 +165,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -261,14 +247,13 @@ files = [ [[package]] name = "click" -version = "8.1.4" +version = "8.1.5" description = "Composable command line interface toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "click-8.1.4-py3-none-any.whl", hash = "sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3"}, - {file = "click-8.1.4.tar.gz", hash = "sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37"}, + {file = "click-8.1.5-py3-none-any.whl", hash = "sha256:e576aa487d679441d7d30abb87e1b43d24fc53bffb8758443b1a9e1cee504548"}, + {file = "click-8.1.5.tar.gz", hash = "sha256:4be4b1af8d665c6d942909916d31a213a106800c47d0eeba73d34da3cbc11367"}, ] [package.dependencies] @@ -278,7 +263,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -288,21 +272,19 @@ files = [ [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" -category = "main" optional = true python-versions = "*" files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -314,7 +296,6 @@ files = [ name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -330,7 +311,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -345,7 +325,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -357,7 +336,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -369,7 +347,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -389,7 +366,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -401,7 +377,6 @@ files = [ name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -419,7 +394,6 @@ i18n = ["Babel (>=2.7)"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -479,7 +453,6 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -491,7 +464,6 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "main" optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -506,7 +478,6 @@ setuptools = "*" name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -518,7 +489,6 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -528,14 +498,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.8.1" +version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"}, - {file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"}, + {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, + {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, ] [package.extras] @@ -546,7 +515,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -562,7 +530,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "3.3.3" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -581,7 +548,6 @@ virtualenv = ">=20.10.0" name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -593,7 +559,6 @@ files = [ name = "pydata-sphinx-theme" version = "0.13.3" description = "Bootstrap-based Sphinx theme from the PyData community" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -620,7 +585,6 @@ test = ["codecov", "pytest", "pytest-cov", "pytest-regressions"] name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -635,7 +599,6 @@ plugins = ["importlib-metadata"] name = "pytest" version = "6.2.5" description = "pytest: simple powerful testing with Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -660,7 +623,6 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -710,7 +672,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -732,7 +693,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "ruff" version = "0.0.253" description = "An extremely fast Python linter, written in Rust." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -759,7 +719,6 @@ files = [ name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -776,7 +735,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = true python-versions = "*" files = [ @@ -788,7 +746,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -800,7 +757,6 @@ files = [ name = "space-packet-parser" version = "4.0.2" description = "A CCSDS telemetry packet decoding library based on the XTCE packet format description standard." -category = "main" optional = false python-versions = ">=3.8,<3.12" files = [ @@ -815,7 +771,6 @@ bitstring = ">=3.0.0,<5" name = "sphinx" version = "7.0.1" description = "Python documentation generator" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -851,7 +806,6 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -867,7 +821,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -883,7 +836,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -899,7 +851,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -914,7 +865,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -930,7 +880,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -946,7 +895,6 @@ test = ["pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -958,7 +906,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -970,7 +917,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -982,7 +928,6 @@ files = [ name = "urllib3" version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -998,14 +943,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.23.1" +version = "20.24.0" description = "Virtual Python Environment builder" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, - {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, + {file = "virtualenv-20.24.0-py3-none-any.whl", hash = "sha256:18d1b37fc75cc2670625702d76849a91ebd383768b4e91382a8d51be3246049e"}, + {file = "virtualenv-20.24.0.tar.gz", hash = "sha256:e2a7cef9da880d693b933db7654367754f14e20650dc60e8ee7385571f8593a3"}, ] [package.dependencies] @@ -1019,19 +963,18 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "zipp" -version = "3.16.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "zipp-3.16.0-py3-none-any.whl", hash = "sha256:5dadc3ad0a1f825fe42ce1bce0f2fc5a13af2e6b2d386af5b0ff295bc0a287d3"}, - {file = "zipp-3.16.0.tar.gz", hash = "sha256:1876cb065531855bbe83b6c489dcf69ecc28f1068d8e95959fe8bbc77774c941"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] dev = ["black", "pre-commit", "ruff"] From 88bdcfb8422a54de08526908394461ed427df788 Mon Sep 17 00:00:00 2001 From: Sean Hoyt Date: Tue, 18 Jul 2023 14:54:53 -0600 Subject: [PATCH 36/68] added yaml --- .readthedocs.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 000000000..902eeefad --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,18 @@ +version: 2 + +build: + os: "ubuntu-22.04" + tools: + python: "3.10" + +sphinx: + configuration: docs/source/conf.py + +python: + install: + - method: pip + path: . + extra_requirements: + - doc + + From ba59f2a42f7aee5f4aa0fdcf1a0e81855250d9bd Mon Sep 17 00:00:00 2001 From: Greg Lucas Date: Mon, 17 Jul 2023 15:02:43 -0600 Subject: [PATCH 37/68] BLD: Update Poetry lock file for Poetry v1.5.0 --- .pre-commit-config.yaml | 1 + poetry.lock | 139 ++++++++++++---------------------------- 2 files changed, 42 insertions(+), 98 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 32c917abf..56f0a3727 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,3 +26,4 @@ repos: hooks: - id: poetry-check - id: poetry-lock + args: [--no-update] diff --git a/poetry.lock b/poetry.lock index eef7ff2d2..63786f98c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. [[package]] name = "accessible-pygments" version = "0.0.4" description = "A collection of accessible pygments styles" -category = "main" optional = true python-versions = "*" files = [ @@ -19,7 +18,6 @@ pygments = ">=1.5" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -31,7 +29,6 @@ files = [ name = "atomicwrites" version = "1.4.1" description = "Atomic file writes." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -42,7 +39,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -61,7 +57,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -73,7 +68,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = true python-versions = ">=3.6.0" files = [ @@ -92,7 +86,6 @@ lxml = ["lxml"] name = "bitstring" version = "4.0.2" description = "Simple construction, analysis and modification of binary data." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -102,37 +95,33 @@ files = [ [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -154,7 +143,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -166,7 +154,6 @@ files = [ name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -178,7 +165,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -261,14 +247,13 @@ files = [ [[package]] name = "click" -version = "8.1.4" +version = "8.1.5" description = "Composable command line interface toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "click-8.1.4-py3-none-any.whl", hash = "sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3"}, - {file = "click-8.1.4.tar.gz", hash = "sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37"}, + {file = "click-8.1.5-py3-none-any.whl", hash = "sha256:e576aa487d679441d7d30abb87e1b43d24fc53bffb8758443b1a9e1cee504548"}, + {file = "click-8.1.5.tar.gz", hash = "sha256:4be4b1af8d665c6d942909916d31a213a106800c47d0eeba73d34da3cbc11367"}, ] [package.dependencies] @@ -278,7 +263,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -288,21 +272,19 @@ files = [ [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" -category = "main" optional = true python-versions = "*" files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -314,7 +296,6 @@ files = [ name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -330,7 +311,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -345,7 +325,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -357,7 +336,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -369,7 +347,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -389,7 +366,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -401,7 +377,6 @@ files = [ name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -419,7 +394,6 @@ i18n = ["Babel (>=2.7)"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -479,7 +453,6 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -491,7 +464,6 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "main" optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -506,7 +478,6 @@ setuptools = "*" name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -518,7 +489,6 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -528,14 +498,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.8.1" +version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"}, - {file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"}, + {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, + {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, ] [package.extras] @@ -546,7 +515,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -562,7 +530,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "3.3.3" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -581,7 +548,6 @@ virtualenv = ">=20.10.0" name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -593,7 +559,6 @@ files = [ name = "pydata-sphinx-theme" version = "0.13.3" description = "Bootstrap-based Sphinx theme from the PyData community" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -620,7 +585,6 @@ test = ["codecov", "pytest", "pytest-cov", "pytest-regressions"] name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -635,7 +599,6 @@ plugins = ["importlib-metadata"] name = "pytest" version = "6.2.5" description = "pytest: simple powerful testing with Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -660,7 +623,6 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -710,7 +672,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -732,7 +693,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "ruff" version = "0.0.253" description = "An extremely fast Python linter, written in Rust." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -759,7 +719,6 @@ files = [ name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -776,7 +735,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = true python-versions = "*" files = [ @@ -788,7 +746,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -800,7 +757,6 @@ files = [ name = "space-packet-parser" version = "4.0.2" description = "A CCSDS telemetry packet decoding library based on the XTCE packet format description standard." -category = "main" optional = false python-versions = ">=3.8,<3.12" files = [ @@ -815,7 +771,6 @@ bitstring = ">=3.0.0,<5" name = "sphinx" version = "7.0.1" description = "Python documentation generator" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -851,7 +806,6 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -867,7 +821,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -883,7 +836,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -899,7 +851,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -914,7 +865,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -930,7 +880,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -946,7 +895,6 @@ test = ["pytest"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -958,7 +906,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -970,7 +917,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -982,7 +928,6 @@ files = [ name = "urllib3" version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -998,14 +943,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.23.1" +version = "20.24.0" description = "Virtual Python Environment builder" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, - {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, + {file = "virtualenv-20.24.0-py3-none-any.whl", hash = "sha256:18d1b37fc75cc2670625702d76849a91ebd383768b4e91382a8d51be3246049e"}, + {file = "virtualenv-20.24.0.tar.gz", hash = "sha256:e2a7cef9da880d693b933db7654367754f14e20650dc60e8ee7385571f8593a3"}, ] [package.dependencies] @@ -1019,19 +963,18 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "zipp" -version = "3.16.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "zipp-3.16.0-py3-none-any.whl", hash = "sha256:5dadc3ad0a1f825fe42ce1bce0f2fc5a13af2e6b2d386af5b0ff295bc0a287d3"}, - {file = "zipp-3.16.0.tar.gz", hash = "sha256:1876cb065531855bbe83b6c489dcf69ecc28f1068d8e95959fe8bbc77774c941"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] dev = ["black", "pre-commit", "ruff"] From 3b6ee461a4beca9ef9e363caa649b0f206038617 Mon Sep 17 00:00:00 2001 From: Maxine Hartnett Date: Tue, 25 Jul 2023 14:47:56 -0600 Subject: [PATCH 38/68] Updating documentation to include a documentation guide and move the style guide into sphinx --- README.md | 4 + docs/source/conf.py | 1 + docs/source/development/doc-overview.rst | 70 ++++++ docs/source/development/index.rst | 6 + .../source/development/style-guide.md | 24 +- docs/source/index.rst | 1 + poetry.lock | 214 ++++++++++++------ pyproject.toml | 3 +- 8 files changed, 254 insertions(+), 69 deletions(-) create mode 100644 docs/source/development/doc-overview.rst rename style_guide/README.md => docs/source/development/style-guide.md (96%) diff --git a/README.md b/README.md index f910707f0..6dde8a39c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![All Contributors](https://img.shields.io/github/all-contributors/IMAP-Science-Operations-Center/imap_processing?color=ee8449&style=flat-square)](#contributors) +[![readthedocs](https://readthedocs.org/projects/imap-processing/badge/?version=latest)](https://imap-processing.readthedocs.io/en/latest/) + The Interstellar Mapping and Acceleration Probe (IMAP) is an exciting project aimed at studying the interstellar medium and investigating the acceleration mechanisms of particles within our galaxy. IMAP utilizes cutting-edge technology and advanced instrumentation to gather valuable data and expand our understanding of space. The IMAP project's Git repository serves as a centralized hub for collaboration among researchers, scientists, and developers involved in the project. It provides a platform for version control, code sharing, issue tracking, and documentation, fostering a collaborative environment for advancing the goals of the IMAP mission. @@ -12,6 +14,8 @@ Join the IMAP Git repository to be part of an exciting scientific endeavor, cont [IMAP Website](https://imap.princeton.edu/) +[IMAP Processing Documentation](https://imap-processing.readthedocs.io/en/latest/) + # Credits [LASP (Laboratory of Atmospheric and Space Physics)](https://lasp.colorado.edu/) ## Contributors ✨ diff --git a/docs/source/conf.py b/docs/source/conf.py index c9a1c36e7..e61b04729 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -40,6 +40,7 @@ "sphinx.ext.autosummary", "sphinx.ext.githubpages", # Helpful for publishing to gh-pages "sphinx.ext.napoleon", + "myst_parser", ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/development/doc-overview.rst b/docs/source/development/doc-overview.rst new file mode 100644 index 000000000..1bd5386bb --- /dev/null +++ b/docs/source/development/doc-overview.rst @@ -0,0 +1,70 @@ +Contributing to Documentation +============================= + +Using Sphinx +------------ +IMAP uses `Sphinx `_ to generate and maintain documentation. Sphinx allows for automatic usage of Python docstrings, as well features for hierarchical structure, automatic code highlighting, and different output formats. + +To add a new documentation file, create a new ``.rst`` file under :file:`docs/source`. RST stands for Restructured Text, which is a type of rich text format used by Sphinx. It is a flexible and powerful format which allows for lots of features which are useful in documentation. + +For more information on restructured text, Sphinx has `extensive documentation `_. + +You can also use Markdown for documentation. Restructured text is the preferred format for documentation, but if you're more comfortable with markdown, that is also acceptable. Markdown documents will use the `MyST parser `_. + +Documentation Style +------------------- +Here are the main rules for documentation in IMAP: + +#. :ref:`doc-rule-short` +#. :ref:`doc-rule-link` +#. :ref:`doc-rule-english` +#. :ref:`doc-rule-organize` + +.. _doc-rule-short: + +Keep it short and simple +^^^^^^^^^^^^^^^^^^^^^^^^ +Keep documentation to the minimal length that is required. You want to keep the documention to the point so it is easy to link to specific topics. This prevents duplicate info, which helps keep documentation clear and up to date. In general, if there's doubt that a particular section is directly relevant to the overall page, split it out to its own page and link it. Additionally, if the section might be useful to other documents, please put it into its own document. + +.. _doc-rule-link: + +Link to other docs, don't rewrite +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Before writing any section, double check that there isn't an existing document that covers that info. If we only keep the information written down once, it can easily be updated, deprecated, or shared without having to comb through other documents. + +You can link to other documents in these docs using the `"docs" role `_. + +Basically, you can add a link using this synatx: ``:doc:`parrot```. + +It is also useful to link to specific sections within documentation. If you have sections which may be useful to link to, you can add an internal `ref `_ to allow other documents to link to your section. You can create this ref with ``.. _hyperlink-name:`` before the referenced text. You can use these internal links with the `ref `_ role: + +:: + + .. _my-reference-label: + + Section to cross-reference + -------------------------- + + This is the text of the section. + + It refers to the section itself, see ``:ref:`my-reference-label`.`` + +These reference names should be unique across all documentation. You can also create references to figures or tables. + +.. _doc-rule-english: + +Write in clear english +^^^^^^^^^^^^^^^^^^^^^^^ +To allow for everyone to understand documentation, write clearly and informally. Obviously technical documentation often uses jargon or acronyms, but where it is possible, please try and keep the documentatation simple and well-formatted. + +.. tip:: + Noting particularly important pieces of information in special formats, like this tip box, helps with formatting and clarity. + +.. _doc-rule-organize: + +Use document hierarchy to organize information +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Documents should be organized under larger sections for easier access of information. If you are writing a document, and the section doesn't yet exist, create the section. Each section should have its own folder under :file:`docs/source` and include a landing page (named index.rst) for the overall section which includes general information, key links, and a `toctree `_ directive. This directive should include all the files in the section. Finally, the index file for the section should be added to the main :doc:`index` page. + +.. note:: + This document overview also acts as a reference file for restructured text. You can use it as an example for some of the basic formatting tools in RST. \ No newline at end of file diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst index 4b53ee11c..c8a423e09 100644 --- a/docs/source/development/index.rst +++ b/docs/source/development/index.rst @@ -33,3 +33,9 @@ A typical development workflow might look like the following: git push -u origin my-cool-feature # Go to GitHub and open a pull request! + +.. toctree:: + :maxdepth: 1 + + doc-overview + Style Guide \ No newline at end of file diff --git a/style_guide/README.md b/docs/source/development/style-guide.md similarity index 96% rename from style_guide/README.md rename to docs/source/development/style-guide.md index aa3e26e1a..0de3f952f 100644 --- a/style_guide/README.md +++ b/docs/source/development/style-guide.md @@ -6,6 +6,7 @@ This document serves as a style guide for all `imap_processing` software develop the code is committed to the `main` or `dev` branches. +(tl;dr)= ## tl;dr The following is a short version of this style guide to be used as a quick reference. Further details about each of @@ -23,6 +24,7 @@ these items are provided below in the guide. 9. Follow a specific [release workflow](#release-workflow) when making releases. +(git-and-gitHub-workflow)= ## git and GitHub Workflow The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the @@ -35,6 +37,7 @@ The following diagram depicts this workflow (credit to As such, all feature branches should be branched off of and merged back into the `dev` branch. +(contributing-new-features)= ### Contributing new features Before contributing, it is generally encouraged to @@ -103,6 +106,7 @@ contributors to the feature should be assigned to the issue, and proper label(s) 11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. +(keeping-your-fork-updated)= ### Keeping your fork updated You can keep your personal fork up-to-date with the `IMAP-Science-Operations-Center` `imap_processing` repository by @@ -112,6 +116,7 @@ fetching and pulling the `upstream` remote: git fetch upstream dev git pull upstream/dev +(collaborating-on-someone-elses-fork)= ### Collaborating on someone else's fork To contribute to a branch on another person's personal fork, add a new `remote` that points to their fork, and use the @@ -124,6 +129,7 @@ nominal workflow for contributing: git push +(python-coding)= ## Python Coding `imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) conventions save for the following @@ -137,6 +143,7 @@ exceptions: [`typing`](https://docs.python.org/3/library/typing.html) library. +(API-Documentation)= ## API Documentation `imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) and @@ -152,6 +159,7 @@ When a new module is added to the repository, make sure to add the module to the so that the API documentation can be part of the automated documentation build. +(Poetry-Environment)= ## Poetry Environment Poetry is used for dependency management within this project. To update dependencies, you can either update @@ -175,6 +183,7 @@ dependency issues before the pre-commit hook, users should run `poetry lock` and of time. The `poetry.lock` file should be part of the files committed in this case. +(Security)= ## Security The following items should never be committed in the `imap_processing` source code or GitHub issues/pull requests: @@ -188,11 +197,13 @@ If `imap_processing` code needs access to this information, it should be stored of the repository. +(Naming-Conventions)= ## Naming Conventions *To be determined* +(Tools-and-Library-Recommendations)= ## Tools and Library Recommendations - `black` for checking python code formatting @@ -203,6 +214,7 @@ of the repository. - `space-packet-parser` to unpack CCSDS packets +(Versioning)= ## Versioning Any changes pushed to the `main` branch should be tagged with a version number. The version number convention is @@ -213,6 +225,7 @@ Any changes pushed to the `main` branch should be tagged with a version number. z = The hotfix number. Increase when change only contains bug fixes. +(Release-Workflow)= ## Release Workflow Any changes merged or pushed to the `main` branch should follow a specific release workflow which follows the diagram @@ -221,6 +234,7 @@ features being merged into `main`) and 'hotfixes' (i.e. bug fixes made directly described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-and-github-workflow) section are already completed. +(Nominal-releases)= ### Nominal releases 1. Make sure the `dev` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature @@ -237,6 +251,7 @@ are already completed. [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) for the merge commit and assign the appropriate version number. +(Making-hotfixes)= ### Making hotfixes *Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal `dev` branch @@ -255,6 +270,7 @@ workflow; for example, if a bug fix is very time critical.* appropriate [version number](#versioning). +(Checklist-for-Contributors-and-Reviewers-of-Pull-Requests)= ## Checklist for Contributors and Reviewers of Pull Requests The following is a guide to be used for contributors and reviewers of `imap_processing` pull requests. Note that this is @@ -264,8 +280,10 @@ parts of it are subjective. If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are acceptable and the PR can be reviewed and merged. +(Checklist-for-Contributors)= ### Checklist for Contributors +(Pertaining-to-the-code)= #### Pertaining to the code: - Does the code conform to this style guide? @@ -283,6 +301,7 @@ acceptable and the PR can be reviewed and merged. - Does the code include all necessary unit tests? - Are any new dependencies correctly added to the `pyproject.toml` file? +(Pertaining-to-the-pull-request)= #### Pertaining to the pull request: - Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. @@ -295,9 +314,11 @@ acceptable and the PR can be reviewed and merged. - Do all the automated checks pass? +(Checklist-for-Reviewers)= ### Checklist for Reviewers -##### Pertaining to the pull request: +(Pertaining-to-the-pull-request-review)= +#### Pertaining to the pull request: - Does the PR have a concise, descriptive title? - Does the PR have a sufficient description as to make it clear what the reasons for the changes are? @@ -307,6 +328,7 @@ acceptable and the PR can be reviewed and merged. - Is the PR no longer a work in progress? - Do all the automated checks pass? +(Pertaining-to-the-code-review)= #### Pertaining to the code: - Does the code conform to this style guide? diff --git a/docs/source/index.rst b/docs/source/index.rst index 87113e5c3..6f2a5e205 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -39,6 +39,7 @@ The explicit code interfaces and structure are described in the :ref:`api`. reference/index development/index + development/doc-overview If you make use of any imap_processing code, please consider citing it in your research. TODO: Add a Zenodo DOI badge here. diff --git a/poetry.lock b/poetry.lock index 63786f98c..64b5c54b3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "accessible-pygments" @@ -141,13 +141,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = true python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -247,13 +247,13 @@ files = [ [[package]] name = "click" -version = "8.1.5" +version = "8.1.6" description = "Composable command line interface toolkit" optional = true python-versions = ">=3.7" files = [ - {file = "click-8.1.5-py3-none-any.whl", hash = "sha256:e576aa487d679441d7d30abb87e1b43d24fc53bffb8758443b1a9e1cee504548"}, - {file = "click-8.1.5.tar.gz", hash = "sha256:4be4b1af8d665c6d942909916d31a213a106800c47d0eeba73d34da3cbc11367"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -309,13 +309,13 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p [[package]] name = "identify" -version = "2.5.24" +version = "2.5.26" description = "File identification library for Python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, + {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, + {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, ] [package.extras] @@ -390,6 +390,30 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = true +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -449,6 +473,36 @@ files = [ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = true +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = true +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -460,6 +514,32 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = true +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, +] + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "nodeenv" version = "1.8.0" @@ -621,51 +701,51 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = true python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -769,13 +849,13 @@ bitstring = ">=3.0.0,<5" [[package]] name = "sphinx" -version = "7.0.1" +version = "7.1.0" description = "Python documentation generator" optional = true python-versions = ">=3.8" files = [ - {file = "Sphinx-7.0.1.tar.gz", hash = "sha256:61e025f788c5977d9412587e733733a289e2b9fdc2fef8868ddfbfc4ccfe881d"}, - {file = "sphinx-7.0.1-py3-none-any.whl", hash = "sha256:60c5e04756c1709a98845ed27a2eed7a556af3993afb66e77fec48189f742616"}, + {file = "sphinx-7.1.0-py3-none-any.whl", hash = "sha256:9bdfb5a2b28351d4fdf40a63cd006dbad727f793b243e669fc950d7116c634af"}, + {file = "sphinx-7.1.0.tar.gz", hash = "sha256:8f336d0221c3beb23006b3164ed1d46db9cebcce9cb41cdb9c5ecd4bcc509be0"}, ] [package.dependencies] @@ -926,13 +1006,13 @@ files = [ [[package]] name = "urllib3" -version = "2.0.3" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = true python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -943,23 +1023,23 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.0" +version = "20.24.2" description = "Virtual Python Environment builder" optional = true python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.0-py3-none-any.whl", hash = "sha256:18d1b37fc75cc2670625702d76849a91ebd383768b4e91382a8d51be3246049e"}, - {file = "virtualenv-20.24.0.tar.gz", hash = "sha256:e2a7cef9da880d693b933db7654367754f14e20650dc60e8ee7385571f8593a3"}, + {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, + {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.12,<4" -platformdirs = ">=3.5.1,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" [package.extras] docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "zipp" @@ -978,10 +1058,10 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [extras] dev = ["black", "pre-commit", "ruff"] -doc = ["pydata-sphinx-theme", "sphinx"] +doc = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pytest"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "69fe2f268770a713f0f60756e1700018caf7da4223c144b7d630772d144cbe6b" +content-hash = "bae1225c6979e2ad2f2695f3a850d73bbbb4c465db167a4e3f968888d791c3b7" diff --git a/pyproject.toml b/pyproject.toml index ed95907b8..e3395d8b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,10 +38,11 @@ pydata-sphinx-theme = {version="*", optional=true} pytest = {version=">=6.2.5,<7", optional=true} ruff = {version="^0.0.253", optional=true} sphinx = {version="*", optional=true} +myst-parser = {version="^2.0.0", optional=true} [tool.poetry.extras] dev = ["black", "pre-commit", "ruff"] -doc = ["sphinx", "pydata-sphinx-theme"] +doc = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pytest"] [project.urls] From 92d05bb369f3e73a96056d3fa8e7c019995ff6c0 Mon Sep 17 00:00:00 2001 From: Tenzin Choedon Date: Wed, 26 Jul 2023 16:37:00 -0600 Subject: [PATCH 39/68] adding module path in imap_processing --- imap_processing/__init__.py | 12 ++++++++++++ imap_processing/swe/decom_swe.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/imap_processing/__init__.py b/imap_processing/__init__.py index 3dc1f76bc..94ea98581 100644 --- a/imap_processing/__init__.py +++ b/imap_processing/__init__.py @@ -1 +1,13 @@ __version__ = "0.1.0" + +# When imap_processing is installed using pip, we need to be able to find the +# packet definitions directory path. +# +# This directory is used by the imap_processing package to find the packet definitions. +from pathlib import Path + +# Eg. imap_module_directory = /usr/local/lib/python3.11/site-packages/imap_processing +imap_module_directory = Path(__file__).parent + +# Relative to imap_module_directory, set path of packet definitions directory. +packet_definition_directory = f"{imap_module_directory}/packet_definitions/" diff --git a/imap_processing/swe/decom_swe.py b/imap_processing/swe/decom_swe.py index cc05f6d17..55dd46d0d 100644 --- a/imap_processing/swe/decom_swe.py +++ b/imap_processing/swe/decom_swe.py @@ -1,4 +1,4 @@ -from imap_processing import decom +from imap_processing import decom, packet_definition_directory def decom_packets(packet_file: str): @@ -13,5 +13,5 @@ def decom_packets(packet_file: str): List List of all the unpacked data """ - xtce_document = "imap_processing/packet_definitions/swe_packet_definition.xml" + xtce_document = f"{packet_definition_directory}/swe_packet_definition.xml" return decom.decom_packets(packet_file, xtce_document) From d4f3f12e1eef80524760606a14c5ac416ddc6ad2 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 31 Jul 2023 08:54:55 -0600 Subject: [PATCH 40/68] Added check to prevent direct commits to main and dev branches --- .pre-commit-config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 56f0a3727..b8268032e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,6 +12,8 @@ repos: - id: detect-private-key - id: mixed-line-ending - id: trailing-whitespace + - id: no-commit-to-branch + args: [--branch, main, --branch, dev] - repo: https://github.com/psf/black rev: 23.3.0 hooks: From 81251ea259936493e3951ac093b854281776eb7e Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 4 Aug 2023 15:07:13 -0600 Subject: [PATCH 41/68] Converted style guide from markdown to rst to be consistent with other documentation --- docs/source/development/style-guide.md | 339 -------------------- docs/source/development/style-guide.rst | 392 ++++++++++++++++++++++++ 2 files changed, 392 insertions(+), 339 deletions(-) delete mode 100644 docs/source/development/style-guide.md create mode 100644 docs/source/development/style-guide.rst diff --git a/docs/source/development/style-guide.md b/docs/source/development/style-guide.md deleted file mode 100644 index 0de3f952f..000000000 --- a/docs/source/development/style-guide.md +++ /dev/null @@ -1,339 +0,0 @@ -`imap_processing` Style Guide -============================= - -This document serves as a style guide for all `imap_processing` software development. Any potential contribution to the -`imap_processing` repository should be checked against this guide, and any violation of the guide should be fixed before -the code is committed to the `main` or `dev` branches. - - -(tl;dr)= -## tl;dr - -The following is a short version of this style guide to be used as a quick reference. Further details about each of -these items are provided below in the guide. - -1. Use a [forking workflow](#git-and-github-workflow) for git/GitHub contributions. -2. Use `PEP8` for [python coding conventions](#python-coding) (with a few exceptions). -3. Use `PEP257` and `numpydocs` for [docstring conventions](#api-documentation) (with a few exceptions), and update the - documentation builds where applicable. -4. Update the [`poetry` environment](#poetry-environment) when dependencies change. -5. Be mindful of committing credentials and other [sensitive information](#security). -6. Follow agreed-upon [naming conventions](#naming-conventions) where applicable. -7. Use specific [tools and libraries](#tools-and-library-recommendations) where applicable. -8. Use nominal semantic versioning for [version numbers](#versioning). -9. Follow a specific [release workflow](#release-workflow) when making releases. - - -(git-and-gitHub-workflow)= -## git and GitHub Workflow - -The best method for contributing software to the `imap_processing` repository is a workflow that involves forking the -repository, developing changes on "feature" branches, and opening pull requests through GitHub. - -The following diagram depicts this workflow (credit to -[Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)): - -git and GitHub Workflow - -As such, all feature branches should be branched off of and merged back into the `dev` branch. - -(contributing-new-features)= -### Contributing new features - -Before contributing, it is generally encouraged to -[open a GitHub issue](https://github.com/IMAP-Science-Operations-Center/imap_processing/issues/new), if one does not -already exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the -contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any -contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. - -*Note: Steps (1) through (5) only to be completed once.* - -1. Create a personal fork of the `imap_processing` repository by visiting the main `IMAP-Science-Operations-Center` - `imap_processing` [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) and clicking the - `Fork` button near the top-right of the page. Follow the various steps to create a fork under your GitHub account. -2. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" - button: - - git clone https://github.com//imap_processing.git # for HTTPS - git clone git@github.com:/imap_processing.git # for SSH - -3. Ensure that the personal fork is pointing to the `upstream` `imap_processing` repository: - - git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS - git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH - -4. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools - [`black`](https://black.readthedocs.io/en/stable/) and [`ruff`](https://beta.ruff.rs/docs/) on your code changes - before commits: - - pip install .[dev] - pre-commit install - -5. Retrieve the `upstream` `dev` branch: - - git fetch upstream - git checkout -b dev upstream/dev - -6. Create a feature branch off of the `dev` branch to develop changes on. Branch names should be short but descriptive - (e.g. `update-codice-unit-tests`) and not too generic (e.g. `bug-fix`, `updates`). Consistent use of hyphens is - encouraged. - - git checkout -b - -7. Make changes to the branch using the nominal `git add`/`git commit` cycle. - - git add - git commit -m 'Explaination of the changes' - - With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by `black` and/or - `ruff` and try committing your changes again. - -8. Push the feature branch to your personal fork's GitHub repository: - - git push origin - -9. On the `IMAP-Science-Operations-Center` `imap_processing` - [repository](https://github.com/IMAP-Science-Operations-Center/imap_processing) create a new pull request. Click on - the "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to - `IMAP-Science-Operations-Center` and "base" to `dev`. Set the "head repository" to the `imap_processing` repository - under your personal fork and "compare" to your feature branch. If the feature branch is still under development, you - can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the beginning of the pull - request title to signify that the pull request is not ready to be merged. - -10. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for - significant changes. They will review your pull request and either accept the request or ask for additional changes. - If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. - -11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. - -(keeping-your-fork-updated)= -### Keeping your fork updated - -You can keep your personal fork up-to-date with the `IMAP-Science-Operations-Center` `imap_processing` repository by -fetching and pulling the `upstream` remote: - - git checkout dev - git fetch upstream dev - git pull upstream/dev - -(collaborating-on-someone-elses-fork)= -### Collaborating on someone else's fork - -To contribute to a branch on another person's personal fork, add a new `remote` that points to their fork, and use the -nominal workflow for contributing: - - git remote add - git fetch - git checkout -b / - # Make some changes via add/commit cycle - git push - - -(python-coding)= -## Python Coding - -`imap_processing` code shall adhere to the [PEP8](https://peps.python.org/pep-0008/) conventions save for the following -exceptions: - - - Lines of code need to be restricted to 88 characters to adhere to the `black` code formatter. - - Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use `temperature` instead of `temp`, `filename` - instead of `fn`). - - Function and class definitions should be placed in alphabetical order in the module. - - It is encouraged to annotate variables and functions using the - [`typing`](https://docs.python.org/3/library/typing.html) library. - - -(API-Documentation)= -## API Documentation - -`imap_processing` code shall adhere to the [PEP257](https://peps.python.org/pep-0257/) and -[numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) conventions. - -The following are further recommendations: - -- Each module should have at minimum a description and a `Use` section. -- Each function/method should have at minimum a description, `Parameters` (if necessary), and `Returns` (if necessary) - sections. - -When a new module is added to the repository, make sure to add the module to the appropriate `docs/source/*.rst` file, -so that the API documentation can be part of the automated documentation build. - - -(Poetry-Environment)= -## Poetry Environment - -Poetry is used for dependency management within this project. To update dependencies, you can either update -`pyproject.toml` manually, or use `poetry add `. - -If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use -[caret notation](https://python-poetry.org/docs/dependency-specification/#caret-requirements) to allow for minor version -updates. For example, if you have tested the code using numpy version `1.24.2`, the best way to specify the dependency -is to allow for updates to the right most version number: - - numpy = "^1.24"` - -This will allow for patches for security reasons without upgrading to `1.25` or beyond. Use your best judgement for when -packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely -required. - -The `poetry.lock` file contains the existing dependencies for the project. These are the dependencies that you should -install to ensure you're getting the accepted versions for every package. If the `poetry.lock` file is not up-to-date, -there is an automatic process within the repo to update `poetry.lock` to match `pyproject.toml`. To resolve any -dependency issues before the pre-commit hook, users should run `poetry lock` and resolve any dependency problems ahead -of time. The `poetry.lock` file should be part of the files committed in this case. - - -(Security)= -## Security - -The following items should never be committed in the `imap_processing` source code or GitHub issues/pull requests: - -- Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) -- Internal directory structures or filepaths -- Machine names -- Proprietary data - -If `imap_processing` code needs access to this information, it should be stored in a configuration file that is not part -of the repository. - - -(Naming-Conventions)= -## Naming Conventions - -*To be determined* - - -(Tools-and-Library-Recommendations)= -## Tools and Library Recommendations - -- `black` for checking python code formatting -- `poetry` for dependency management and virtual environments -- `pytest` for unit testing -- `ruff` for checking docstring formatting -- `spiceypy` for using SPICE kernels -- `space-packet-parser` to unpack CCSDS packets - - -(Versioning)= -## Versioning - -Any changes pushed to the `main` branch should be tagged with a version number. The version number convention is -`x.y.z`, where - - x = The main version number. Increase when making incompatible API changes. - y = The feature number. Increase when change contains a new feature with or without bug fixes. - z = The hotfix number. Increase when change only contains bug fixes. - - -(Release-Workflow)= -## Release Workflow - -Any changes merged or pushed to the `main` branch should follow a specific release workflow which follows the diagram -shown in the [git & GitHub Workflow](#git-and-github-workflow) section. This includes both 'nominal releases' (i.e. new -features being merged into `main`) and 'hotfixes' (i.e. bug fixes made directly to `main`). These workflows are -described below. It is assumed that steps (1) through (4) in the [git & GitHub Workflow](#git-and-github-workflow) section -are already completed. - -(Nominal-releases)= -### Nominal releases - -1. Make sure the `dev` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature - branches using the nominal [git/GitHub workflow](#git-and-github-workflow)). -2. Create a new 'release' branch off of `dev`. The name of the branch should match the version number to be used for - the release, which should follow the [versioning](#versioning) conventions. -3. Make any release-specific commits to the new release branch using the nominal `git add`/`git commit` cycle. This may - include commits that add release notes, or update version numbers in various configurations. -4. Push the release branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`). -5. In GitHub, create two pull requests: one that merges the release branch into `main`, and one that merges the release - branch into `dev`. Proceed with the nominal review & merge process described in steps (10) and (11) in the - [git/GitHub workflow](#git-and-github-workflow) section. -6. Once the changes are merged into the `main` branch, create a - [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) for the merge commit and - assign the appropriate version number. - -(Making-hotfixes)= -### Making hotfixes - -*Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal `dev` branch -workflow; for example, if a bug fix is very time critical.* - -1. Create a new branch named `hotfix-` off of the `main` branch, and commit any necessary changes following - the nominal `git add`/`git commit` cycle. -2. Push the hotfix branch to the main `IMAP-Science-Operations-Center` `imap_processing` repo (i.e. `upstream`), and - open two separate pull requests: one that merges the hotfix branch into the `main` branch, and one that merges the - hotfix branch into the `dev` branch. -3. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in - the [git/GitHub workflow](#git-and-github-workflow) section. -4. Once the changes are merged into the `main` branch, create a - [new release](https://github.com/IMAP-Science-Operations-Center/imap_processing/releases) or a - [new tag](https://github.com/IMAP-Science-Operations-Center/imap_processing/tags) for the merge commit and assign the - appropriate [version number](#versioning). - - -(Checklist-for-Contributors-and-Reviewers-of-Pull-Requests)= -## Checklist for Contributors and Reviewers of Pull Requests - -The following is a guide to be used for contributors and reviewers of `imap_processing` pull requests. Note that this is -only a guide; it should not be treated as a fully comprehensive, foolproof list that must be used in all situations, and -parts of it are subjective. - -If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are -acceptable and the PR can be reviewed and merged. - -(Checklist-for-Contributors)= -### Checklist for Contributors - -(Pertaining-to-the-code)= -#### Pertaining to the code: - -- Does the code conform to this style guide? -- Is any of the code functionality not already available via native or third-party python libraries? -- Does the code execute successfully? - - Do all the tests pass in the existing test suite? - - Does the newly added functionality run without errors? -- Is the code documented and commented sufficiently such that it is easy to read and follow? - - Are docstrings included for all new modules, classes, and functions? - - Are in-line comments included to provide necessary context? - - Are any documentation files in other locations updated? -- Have all debugging/print statements been removed? -- Does the code contain sufficient exception handling? -- Does the code contain no deprecation warnings? -- Does the code include all necessary unit tests? -- Are any new dependencies correctly added to the `pyproject.toml` file? - -(Pertaining-to-the-pull-request)= -#### Pertaining to the pull request: - -- Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. -- Does the PR have a concise, descriptive title? -- Does the PR link to and close the relevant issue? -- Does the PR have a sufficient description as to make it clear what the reasons for the changes are? -- Is the PR merging into `upstream/dev` from `/` (in most cases)? -- Are you listed as an assignee to the PR? -- Does the PR have proper labels? -- Do all the automated checks pass? - - -(Checklist-for-Reviewers)= -### Checklist for Reviewers - -(Pertaining-to-the-pull-request-review)= -#### Pertaining to the pull request: - -- Does the PR have a concise, descriptive title? -- Does the PR have a sufficient description as to make it clear what the reasons for the changes are? -- Is the PR merging into `upstream/dev` from `/` (in most cases)? -- Does the PR have at least one assignee? -- Does the PR have proper labels? -- Is the PR no longer a work in progress? -- Do all the automated checks pass? - -(Pertaining-to-the-code-review)= -#### Pertaining to the code: - -- Does the code conform to this style guide? -- Is the code documented and commented sufficiently such that it is easy to read and follow? -- Does the code contain sufficient exception handling? -- Does the code contain no sensitive data or information? -- Does the code contain any necessary unit tests? -- If there are new dependencies, are they all necessary? Are they correctly added to the `pyproject.toml` file? diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style-guide.rst new file mode 100644 index 000000000..58a8c3702 --- /dev/null +++ b/docs/source/development/style-guide.rst @@ -0,0 +1,392 @@ +``imap_processing`` Style Guide +============================= + +This document serves as a style guide for all ``imap_processing`` software development. Any potential contribution to +the ``imap_processing`` repository should be checked against this guide, and any violation of the guide should be fixed +before the code is committed to the ``main`` or ``dev`` branches. + + +.. _tl;dr: +tl;dr +----- + +The following is a short version of this style guide to be used as a quick reference. Further details about each of +these items are provided below in the guide. + +1. Use a :ref:`forking workflow ` for git/GitHub contributions. +2. Use ``PEP8`` for :ref:`python coding conventions ` (with a few exceptions). +3. Use ``PEP257`` and ``numpydocs`` for :ref:`docstring conventions ` (with a few exceptions), and + update the documentation builds where applicable. +4. Update the :ref:`poetry environment ` when dependencies change. +5. Be mindful of committing credentials and other :ref:`sensitive information `. +6. Follow agreed-upon :ref:`naming conventions ` where applicable. +7. Use specific :ref:`tools and libraries ` where applicable. +8. Use nominal semantic :ref:`versioning ` for version numbers. +9. Follow a specific :ref:`release workflow ` when making releases. + + +.. _git-and-github-workflow: +git and GitHub Workflow +----------------------- + +The best method for contributing software to the ``imap_processing`` repository is a workflow that involves forking the +repository, developing changes on "feature" branches, and opening pull requests through GitHub. + +The following diagram depicts this workflow (credit to `Atlassian `_): + +.. image:: https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089 + :alt: git and GitHub Workflow + :width: 650 + :height: 650 + +As such, all feature branches should be branched off of and merged back into the ``dev`` branch. + +.. _contributing-new-features: +Contributing new features +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Before contributing, it is generally encouraged to `open a GitHub issue +`_, if one does not already exist, +that describes the feature to be implemented, or the problem that is trying to be solved. This allows the contributor +and the team as a whole to keep track of how the feature relates to the project and track its progress. Any contributors +to the feature should be assigned to the issue, and proper label(s) should also be assigned. + +*Note: Steps (1) through (5) only to be completed once.* + +1. Create a personal fork of the ``imap_processing`` repository by visiting the main ``IMAP-Science-Operations-Center`` + ``imap_processing`` `repository `_ and clicking + the ``Fork`` button near the top-right of the page. Follow the various steps to create a fork under your GitHub + account. +2. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" + button: + + .. code-block:: bash + + git clone https://github.com//imap_processing.git # for HTTPS + git clone git@github.com:/imap_processing.git # for SSH + +3. Ensure that the personal fork is pointing to the ``upstream`` ``imap_processing`` repository: + + .. code-block:: bash + + git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS + git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH + + +4. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools + `black `_ and `ruff `_ on your code changes + before commits: + + .. code-block:: bash + + pip install .[dev] + pre-commit install + +5. Retrieve the ``upstream`` ``dev`` branch: + + .. code-block:: bash + + git fetch upstream + git checkout -b dev upstream/dev + +6. Create a feature branch off of the ``dev`` branch to develop changes on. Branch names should be short but + descriptive (e.g. ``update-codice-unit-tests``) and not too generic (e.g. ``bug-fix``, ``updates``). Consistent use + of hyphens is encouraged. + + .. code-block:: bash + + git checkout -b + +7. Make changes to the branch using the nominal ``git add``/``git commit`` cycle. + + .. code-block:: bash + + git add + git commit -m 'Explanation of the changes' + + With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by ``black`` and/or + ``ruff`` and try committing your changes again. + +8. Push the feature branch to your personal fork's GitHub repository: + + .. code-block:: bash + + git push origin + +9. On the ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository + `_ create a new pull request. Click on the + "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to + ``IMAP-Science-Operations-Center`` and "base" to ``dev``. Set the "head repository" to the ``imap_processing`` + repository under your personal fork and "compare" to your feature branch. If the feature branch is still under + development, you can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the + beginning of the pull request title to signify that the pull request is not ready to be merged. + +10. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for + significant changes. They will review your pull request and either accept the request or ask for additional changes. + If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. + +11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. + +.. _keeping-your-fork-updated: +Keeping your fork updated +^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can keep your personal fork up-to-date with the ``IMAP-Science-Operations-Center`` ``imap_processing`` repository by +fetching and pulling the ``upstream`` remote: + +.. code-block:: bash + + git checkout dev + git fetch upstream dev + git pull upstream/dev + +.. _collaborating-on-someone-elses-fork: +Collaborating on someone else's fork +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To contribute to a branch on another person's personal fork, add a new ``remote`` that points to their fork, and use the +nominal workflow for contributing: + +.. code-block:: bash + + git remote add + git fetch + git checkout -b / + # Make some changes via add/commit cycle + git push + + +.. _python-coding: +Python Coding +------------- + +``imap_processing`` code shall adhere to the `PEP8 `_ conventions save for the +following exceptions: + +* Lines of code need to be restricted to 88 characters to adhere to the ``black`` code formatter. +* Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use ``temperature`` instead of ``temp``, + ``filename`` instead of ``fn``). +* Function and class definitions should be placed in alphabetical order in the module. +* It is encouraged to annotate variables and functions using the `typing + `_ library. + + +.. _api-documentation: +API Documentation +----------------- + +``imap_processing`` code shall adhere to the `PEP257 `_ and `numpydoc +`_ conventions. + +The following are further recommendations: + +* Each module should have at minimum a description and a ``Use`` section. +* Each function/method should have at minimum a description, ``Parameters`` (if necessary), and ``Returns`` (if + necessary) sections. + +When a new module is added to the repository, make sure to add the module to the appropriate ``docs/source/*.rst`` file, +so that the API documentation can be part of the automated documentation build. + + +.. _poetry-environment: +Poetry Environment +------------------ + +Poetry is used for dependency management within this project. To update dependencies, you can either update +``pyproject.toml`` manually, or use ``poetry add ``. + +If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use +`caret notation `_ to allow for minor +version updates. For example, if you have tested the code using numpy version ``1.24.2``, the best way to specify the +dependency is to allow for updates to the right most version number: + +:: + + numpy = "^1.24" + +This will allow for patches for security reasons without upgrading to ``1.25`` or beyond. Use your best judgement for +when packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely +required. + +The ``poetry.lock`` file contains the existing dependencies for the project. These are the dependencies that you should +install to ensure you're getting the accepted versions for every package. If the ``poetry.lock`` file is not up-to-date, +there is an automatic process within the repo to update ``poetry.lock`` to match ``pyproject.toml``. To resolve any +dependency issues before the pre-commit hook, users should run ``poetry lock`` and resolve any dependency problems ahead +of time. The ``poetry.lock`` file should be part of the files committed in this case. + + +.. _security: +Security +-------- + +The following items should never be committed in the ``imap_processing`` source code or GitHub issues/pull requests: + +* Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) +* Internal directory structures or filepaths +* Machine names +* Proprietary data + +If ``imap_processing`` code needs access to this information, it should be stored in a configuration file that is not +part of the repository. + + +.. _naming-conventions: +Naming Conventions +------------------ + +The ``imap_processing`` repo shall adhere to specific naming conventions to allow for more consistency: + +* Repositories shall have branches named ``main`` and ``dev``, instead of ``master`` and ``development`` +* Repositories shall be named with underscores instead of hyphens (e.g. ``imap_processing`` instead of + ``imap-processing``) + + +.. _tools-and-library-recommendations: +Tools and Library Recommendations +--------------------------------- + +* ``black`` for checking python code formatting +* ``poetry`` for dependency management and virtual environments +* ``pytest`` for unit testing +* ``ruff`` for checking docstring formatting +* ``spiceypy`` for using SPICE kernels +* ``space-packet-parser`` to unpack CCSDS packets + + +.. _versioning: +Versioning +---------- + +Any changes pushed to the ``main`` branch should be tagged with a version number. The version number convention is +``x.y.z``, where + +:: + + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. + + +.. _release-workflow: +Release Workflow +---------------- + +Any changes merged or pushed to the ``main`` branch should follow a specific release workflow which follows the diagram +shown in the :ref:`git & GitHub Workflow ` section. This includes both 'nominal releases' (i.e. new +features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directly to ``main``). These workflows are +described below. It is assumed that steps (1) through (4) in the :ref:`git & GitHub Workflow ` +section are already completed. + +.. _nominal-releases: +Nominal releases +^^^^^^^^^^^^^^^^ + +1. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any + feature branches using the nominal :ref:`git & GitHub Workflow `). +2. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for + the release, which should follow the :ref:`versioning ` conventions. +3. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This + may include commits that add release notes, or update version numbers in various configurations. +4. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). +5. In GitHub, create two pull requests: one that merges the release branch into ``main``, and one that merges the + release branch into ``dev``. Proceed with the nominal review & merge process described in steps (10) and (11) in the + :ref:`git & GitHub Workflow ` section. +6. Once the changes are merged into the ``main`` branch, create a `new release + `_ for the merge commit and assign the + appropriate version number. + +.. _Making-hotfixes: +Making hotfixes +^^^^^^^^^^^^^^^ + +*Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal ``dev`` branch +workflow; for example, if a bug fix is very time critical.* + +1. Create a new branch named ``hotfix-`` off of the ``main`` branch, and commit any necessary changes + following the nominal ``git add``/``git commit`` cycle. +2. Push the hotfix branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``), + and open two separate pull requests: one that merges the hotfix branch into the ``main`` branch, and one that merges + the hotfix branch into the ``dev`` branch. +3. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in + the :ref:`git & GitHub Workflow ` section. +4. Once the changes are merged into the ``main`` branch, create a `new release + `_ or a `new tag + `_ for the merge commit and assign the + appropriate :ref:`version number `. + + +.. _checklist-for-contributors-and-reviewers-of-pull-requests: +Checklist for Contributors and Reviewers of Pull Requests +--------------------------------------------------------- + +The following is a guide to be used for contributors and reviewers of ``imap_processing`` pull requests. Note that this +is only a guide; it should not be treated as a fully comprehensive, foolproof list that must be used in all situations, +and parts of it are subjective. + +If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are +acceptable and the PR can be reviewed and merged. + +.. _Checklist-for-Contributors: +Checklist for Contributors +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. _Pertaining-to-the-code: +Pertaining to the code: +""""""""""""""""""""""" + +* Does the code conform to this style guide? +* Is any of the code functionality not already available via native or third-party python libraries? +* Does the code execute successfully? + * Do all the tests pass in the existing test suite? + * Does the newly added functionality run without errors? +* Is the code documented and commented sufficiently such that it is easy to read and follow? + * Are docstrings included for all new modules, classes, and functions? + * Are in-line comments included to provide necessary context? + * Are any documentation files in other locations updated? +* Have all debugging/print statements been removed? +* Does the code contain sufficient exception handling? +* Does the code contain no deprecation warnings? +* Does the code include all necessary unit tests? +* Are any new dependencies correctly added to the ``pyproject.toml`` file? + +.. _pertaining-to-the-pull-request: +Pertaining to the pull request: +""""""""""""""""""""""""""""""" + +* Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. +* Does the PR have a concise, descriptive title? +* Does the PR link to and close the relevant issue? +* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? +* Are you listed as an assignee to the PR? +* Does the PR have proper labels? +* Do all the automated checks pass? + + +.. _checklist-for-reviewers: +Checklist for Reviewers +^^^^^^^^^^^^^^^^^^^^^^^ + +.. _pertaining-to-the-pull-request-review: +Pertaining to the pull request: +""""""""""""""""""""""""""""""" + +* Does the PR have a concise, descriptive title? +* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? +* Does the PR have at least one assignee? +* Does the PR have proper labels? +* Is the PR no longer a work in progress? +* Do all the automated checks pass? + +.. _pertaining-to-the-code-review: +Pertaining to the code: +""""""""""""""""""""""" + +* Does the code conform to this style guide? +* Is the code documented and commented sufficiently such that it is easy to read and follow? +* Does the code contain sufficient exception handling? +* Does the code contain no sensitive data or information? +* Does the code contain any necessary unit tests? +* If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? +* If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? From 5342714a353d8cd3e173e8fd758dafa6adc6a36c Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 4 Aug 2023 15:16:59 -0600 Subject: [PATCH 42/68] Removed erroneous repeating line --- docs/source/development/style-guide.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style-guide.rst index 58a8c3702..dd719e617 100644 --- a/docs/source/development/style-guide.rst +++ b/docs/source/development/style-guide.rst @@ -389,4 +389,3 @@ Pertaining to the code: * Does the code contain no sensitive data or information? * Does the code contain any necessary unit tests? * If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? -* If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? From b4b5b9cf8f7088eae837ec0ae9d5e7c07acee3e2 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 4 Aug 2023 16:22:10 -0600 Subject: [PATCH 43/68] Changes from code review suggestions; made wording to be more generic so this guide can also apply to sds-data-manager; using hashtag instead of explicit numbered lists; added links to tools and libraries; fixed some errors reported by sphinx --- docs/source/development/style-guide.rst | 151 +++++++++++++++--------- 1 file changed, 96 insertions(+), 55 deletions(-) diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style-guide.rst index dd719e617..80a12414b 100644 --- a/docs/source/development/style-guide.rst +++ b/docs/source/development/style-guide.rst @@ -1,38 +1,43 @@ -``imap_processing`` Style Guide -============================= +Style Guide +=========== -This document serves as a style guide for all ``imap_processing`` software development. Any potential contribution to -the ``imap_processing`` repository should be checked against this guide, and any violation of the guide should be fixed +This document serves as a style guide for all software development on the `imap-processing +`_ and `sds-data-manager +`_ repositories. Any potential contribution to +the these repositories should be checked against this guide, and any violation of the guide should be fixed before the code is committed to the ``main`` or ``dev`` branches. .. _tl;dr: + tl;dr ----- The following is a short version of this style guide to be used as a quick reference. Further details about each of these items are provided below in the guide. -1. Use a :ref:`forking workflow ` for git/GitHub contributions. -2. Use ``PEP8`` for :ref:`python coding conventions ` (with a few exceptions). -3. Use ``PEP257`` and ``numpydocs`` for :ref:`docstring conventions ` (with a few exceptions), and +#. Use a :ref:`forking workflow ` for git/GitHub contributions. +#. Use ``PEP8`` for :ref:`python coding conventions ` (with a few exceptions). +#. Use ``PEP257`` and ``numpydocs`` for :ref:`docstring conventions ` (with a few exceptions), and update the documentation builds where applicable. -4. Update the :ref:`poetry environment ` when dependencies change. -5. Be mindful of committing credentials and other :ref:`sensitive information `. -6. Follow agreed-upon :ref:`naming conventions ` where applicable. -7. Use specific :ref:`tools and libraries ` where applicable. -8. Use nominal semantic :ref:`versioning ` for version numbers. -9. Follow a specific :ref:`release workflow ` when making releases. +#. Update the :ref:`poetry environment ` when dependencies change. +#. Be mindful of committing credentials and other :ref:`sensitive information `. +#. Follow agreed-upon :ref:`naming conventions ` where applicable. +#. Use specific :ref:`tools and libraries ` where applicable. +#. Use nominal semantic :ref:`versioning ` for version numbers. +#. Follow a specific :ref:`release workflow ` when making releases. .. _git-and-github-workflow: + git and GitHub Workflow ----------------------- -The best method for contributing software to the ``imap_processing`` repository is a workflow that involves forking the -repository, developing changes on "feature" branches, and opening pull requests through GitHub. +The best method for contributing software to the repository is a workflow that involves forking the repository, +developing changes on "feature" branches, and opening pull requests through GitHub. -The following diagram depicts this workflow (credit to `Atlassian `_): +The following diagram depicts this workflow (credit to `Atlassian +`_): .. image:: https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089 :alt: git and GitHub Workflow @@ -41,23 +46,29 @@ The following diagram depicts this workflow (credit to `Atlassian `_, if one does not already exist, -that describes the feature to be implemented, or the problem that is trying to be solved. This allows the contributor -and the team as a whole to keep track of how the feature relates to the project and track its progress. Any contributors -to the feature should be assigned to the issue, and proper label(s) should also be assigned. +Before contributing, it is generally encouraged to open a GitHub issue (`imap_processing +`_, or `sds-data-manager +`_), if one does not already +exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the +contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any +contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. + +*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as +well.* *Note: Steps (1) through (5) only to be completed once.* -1. Create a personal fork of the ``imap_processing`` repository by visiting the main ``IMAP-Science-Operations-Center`` +#. Create a personal fork of the ``imap_processing`` repository by visiting the main ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository `_ and clicking the ``Fork`` button near the top-right of the page. Follow the various steps to create a fork under your GitHub account. -2. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" +#. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" button: .. code-block:: bash @@ -65,7 +76,7 @@ to the feature should be assigned to the issue, and proper label(s) should also git clone https://github.com//imap_processing.git # for HTTPS git clone git@github.com:/imap_processing.git # for SSH -3. Ensure that the personal fork is pointing to the ``upstream`` ``imap_processing`` repository: +#. Ensure that the personal fork is pointing to the ``upstream`` ``imap_processing`` repository: .. code-block:: bash @@ -73,7 +84,7 @@ to the feature should be assigned to the issue, and proper label(s) should also git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH -4. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools +#. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools `black `_ and `ruff `_ on your code changes before commits: @@ -82,14 +93,14 @@ to the feature should be assigned to the issue, and proper label(s) should also pip install .[dev] pre-commit install -5. Retrieve the ``upstream`` ``dev`` branch: +#. Retrieve the ``upstream`` ``dev`` branch: .. code-block:: bash git fetch upstream git checkout -b dev upstream/dev -6. Create a feature branch off of the ``dev`` branch to develop changes on. Branch names should be short but +#. Create a feature branch off of the ``dev`` branch to develop changes on. Branch names should be short but descriptive (e.g. ``update-codice-unit-tests``) and not too generic (e.g. ``bug-fix``, ``updates``). Consistent use of hyphens is encouraged. @@ -97,7 +108,7 @@ to the feature should be assigned to the issue, and proper label(s) should also git checkout -b -7. Make changes to the branch using the nominal ``git add``/``git commit`` cycle. +#. Make changes to the branch using the nominal ``git add``/``git commit`` cycle. .. code-block:: bash @@ -107,13 +118,13 @@ to the feature should be assigned to the issue, and proper label(s) should also With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by ``black`` and/or ``ruff`` and try committing your changes again. -8. Push the feature branch to your personal fork's GitHub repository: +#. Push the feature branch to your personal fork's GitHub repository: .. code-block:: bash git push origin -9. On the ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository +#. On the ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository `_ create a new pull request. Click on the "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to ``IMAP-Science-Operations-Center`` and "base" to ``dev``. Set the "head repository" to the ``imap_processing`` @@ -121,13 +132,15 @@ to the feature should be assigned to the issue, and proper label(s) should also development, you can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the beginning of the pull request title to signify that the pull request is not ready to be merged. -10. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for +#. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for significant changes. They will review your pull request and either accept the request or ask for additional changes. If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. -11. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. +#. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. + .. _keeping-your-fork-updated: + Keeping your fork updated ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -140,7 +153,9 @@ fetching and pulling the ``upstream`` remote: git fetch upstream dev git pull upstream/dev + .. _collaborating-on-someone-elses-fork: + Collaborating on someone else's fork ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -157,11 +172,11 @@ nominal workflow for contributing: .. _python-coding: + Python Coding ------------- -``imap_processing`` code shall adhere to the `PEP8 `_ conventions save for the -following exceptions: +Code shall adhere to the `PEP8 `_ conventions save for the following exceptions: * Lines of code need to be restricted to 88 characters to adhere to the ``black`` code formatter. * Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use ``temperature`` instead of ``temp``, @@ -172,10 +187,11 @@ following exceptions: .. _api-documentation: + API Documentation ----------------- -``imap_processing`` code shall adhere to the `PEP257 `_ and `numpydoc +Documentation code shall adhere to the `PEP257 `_ and `numpydoc `_ conventions. The following are further recommendations: @@ -189,6 +205,7 @@ so that the API documentation can be part of the automated documentation build. .. _poetry-environment: + Poetry Environment ------------------ @@ -216,25 +233,27 @@ of time. The ``poetry.lock`` file should be part of the files committed in this .. _security: + Security -------- -The following items should never be committed in the ``imap_processing`` source code or GitHub issues/pull requests: +The following items should never be committed in the source code or GitHub issues/pull requests: * Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) * Internal directory structures or filepaths * Machine names * Proprietary data -If ``imap_processing`` code needs access to this information, it should be stored in a configuration file that is not -part of the repository. +If code needs access to this information, it should be stored in a configuration file that is not part of the +repository. .. _naming-conventions: + Naming Conventions ------------------ -The ``imap_processing`` repo shall adhere to specific naming conventions to allow for more consistency: +The repository shall adhere to specific naming conventions to allow for more consistency: * Repositories shall have branches named ``main`` and ``dev``, instead of ``master`` and ``development`` * Repositories shall be named with underscores instead of hyphens (e.g. ``imap_processing`` instead of @@ -242,18 +261,20 @@ The ``imap_processing`` repo shall adhere to specific naming conventions to allo .. _tools-and-library-recommendations: + Tools and Library Recommendations --------------------------------- -* ``black`` for checking python code formatting -* ``poetry`` for dependency management and virtual environments -* ``pytest`` for unit testing -* ``ruff`` for checking docstring formatting -* ``spiceypy`` for using SPICE kernels -* ``space-packet-parser`` to unpack CCSDS packets +* `black `_ for checking python code formatting +* `poetry `_ for dependency management and virtual environments +* `pytest `_ for unit testing +* `ruff `_ for checking docstring formatting +* `spiceypy `_ for using SPICE kernels +* `space-packet-parser `_ to unpack CCSDS packets .. _versioning: + Versioning ---------- @@ -268,6 +289,7 @@ Any changes pushed to the ``main`` branch should be tagged with a version number .. _release-workflow: + Release Workflow ---------------- @@ -277,45 +299,53 @@ features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directl described below. It is assumed that steps (1) through (4) in the :ref:`git & GitHub Workflow ` section are already completed. +*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as +well.* + + .. _nominal-releases: + Nominal releases ^^^^^^^^^^^^^^^^ -1. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any +#. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature branches using the nominal :ref:`git & GitHub Workflow `). -2. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for +#. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for the release, which should follow the :ref:`versioning ` conventions. -3. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This +#. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This may include commits that add release notes, or update version numbers in various configurations. -4. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). -5. In GitHub, create two pull requests: one that merges the release branch into ``main``, and one that merges the +#. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). +#. In GitHub, create two pull requests: one that merges the release branch into ``main``, and one that merges the release branch into ``dev``. Proceed with the nominal review & merge process described in steps (10) and (11) in the :ref:`git & GitHub Workflow ` section. -6. Once the changes are merged into the ``main`` branch, create a `new release +#. Once the changes are merged into the ``main`` branch, create a `new release `_ for the merge commit and assign the appropriate version number. + .. _Making-hotfixes: + Making hotfixes ^^^^^^^^^^^^^^^ *Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal ``dev`` branch workflow; for example, if a bug fix is very time critical.* -1. Create a new branch named ``hotfix-`` off of the ``main`` branch, and commit any necessary changes +#. Create a new branch named ``hotfix-`` off of the ``main`` branch, and commit any necessary changes following the nominal ``git add``/``git commit`` cycle. -2. Push the hotfix branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``), +#. Push the hotfix branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``), and open two separate pull requests: one that merges the hotfix branch into the ``main`` branch, and one that merges the hotfix branch into the ``dev`` branch. -3. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in +#. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in the :ref:`git & GitHub Workflow ` section. -4. Once the changes are merged into the ``main`` branch, create a `new release +#. Once the changes are merged into the ``main`` branch, create a `new release `_ or a `new tag `_ for the merge commit and assign the appropriate :ref:`version number `. .. _checklist-for-contributors-and-reviewers-of-pull-requests: + Checklist for Contributors and Reviewers of Pull Requests --------------------------------------------------------- @@ -326,11 +356,15 @@ and parts of it are subjective. If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are acceptable and the PR can be reviewed and merged. + .. _Checklist-for-Contributors: + Checklist for Contributors ^^^^^^^^^^^^^^^^^^^^^^^^^^ + .. _Pertaining-to-the-code: + Pertaining to the code: """"""""""""""""""""""" @@ -349,7 +383,9 @@ Pertaining to the code: * Does the code include all necessary unit tests? * Are any new dependencies correctly added to the ``pyproject.toml`` file? + .. _pertaining-to-the-pull-request: + Pertaining to the pull request: """"""""""""""""""""""""""""""" @@ -364,10 +400,13 @@ Pertaining to the pull request: .. _checklist-for-reviewers: + Checklist for Reviewers ^^^^^^^^^^^^^^^^^^^^^^^ + .. _pertaining-to-the-pull-request-review: + Pertaining to the pull request: """"""""""""""""""""""""""""""" @@ -379,7 +418,9 @@ Pertaining to the pull request: * Is the PR no longer a work in progress? * Do all the automated checks pass? + .. _pertaining-to-the-code-review: + Pertaining to the code: """"""""""""""""""""""" From 1c2daadfd05e2aec83f0c6019b2a22330c4610b1 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Fri, 4 Aug 2023 17:07:41 -0600 Subject: [PATCH 44/68] Moved sections of the style guide into their own pages --- docs/source/development/api_documentation.rst | 16 + .../development/git_and_github_workflow.rst | 141 ++++++++ .../source/development/naming_conventions.rst | 10 + .../source/development/poetry_environment.rst | 26 ++ docs/source/development/python_coding.rst | 13 + docs/source/development/release_workflow.rst | 54 +++ docs/source/development/security.rst | 14 + docs/source/development/style-guide.rst | 316 ------------------ .../tools_and_library_recommendations.rst | 11 + docs/source/development/versioning.rst | 13 + 10 files changed, 298 insertions(+), 316 deletions(-) create mode 100644 docs/source/development/api_documentation.rst create mode 100644 docs/source/development/git_and_github_workflow.rst create mode 100644 docs/source/development/naming_conventions.rst create mode 100644 docs/source/development/poetry_environment.rst create mode 100644 docs/source/development/python_coding.rst create mode 100644 docs/source/development/release_workflow.rst create mode 100644 docs/source/development/security.rst create mode 100644 docs/source/development/tools_and_library_recommendations.rst create mode 100644 docs/source/development/versioning.rst diff --git a/docs/source/development/api_documentation.rst b/docs/source/development/api_documentation.rst new file mode 100644 index 000000000..8723062f2 --- /dev/null +++ b/docs/source/development/api_documentation.rst @@ -0,0 +1,16 @@ +.. _api-documentation: + +API Documentation +----------------- + +Documentation code shall adhere to the `PEP257 `_ and `numpydoc +`_ conventions. + +The following are further recommendations: + +* Each module should have at minimum a description and a ``Use`` section. +* Each function/method should have at minimum a description, ``Parameters`` (if necessary), and ``Returns`` (if + necessary) sections. + +When a new module is added to the repository, make sure to add the module to the appropriate ``docs/source/*.rst`` file, +so that the API documentation can be part of the automated documentation build. \ No newline at end of file diff --git a/docs/source/development/git_and_github_workflow.rst b/docs/source/development/git_and_github_workflow.rst new file mode 100644 index 000000000..b0b8b6f57 --- /dev/null +++ b/docs/source/development/git_and_github_workflow.rst @@ -0,0 +1,141 @@ +.. _git-and-github-workflow: + +git and GitHub Workflow +----------------------- + +The best method for contributing software to the repository is a workflow that involves forking the repository, +developing changes on "feature" branches, and opening pull requests through GitHub. + +The following diagram depicts this workflow (credit to `Atlassian +`_): + +.. image:: https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089 + :alt: git and GitHub Workflow + :width: 650 + :height: 650 + +As such, all feature branches should be branched off of and merged back into the ``dev`` branch. + + +.. _contributing-new-features: + +Contributing new features +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Before contributing, it is generally encouraged to open a GitHub issue (`imap_processing +`_, or `sds-data-manager +`_), if one does not already +exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the +contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any +contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. + +*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as +well.* + +*Note: Steps (1) through (5) only to be completed once.* + +#. Create a personal fork of the ``imap_processing`` repository by visiting the main ``IMAP-Science-Operations-Center`` + ``imap_processing`` `repository `_ and clicking + the ``Fork`` button near the top-right of the page. Follow the various steps to create a fork under your GitHub + account. +#. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" + button: + + .. code-block:: bash + + git clone https://github.com//imap_processing.git # for HTTPS + git clone git@github.com:/imap_processing.git # for SSH + +#. Ensure that the personal fork is pointing to the ``upstream`` ``imap_processing`` repository: + + .. code-block:: bash + + git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS + git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH + + +#. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools + `black `_ and `ruff `_ on your code changes + before commits: + + .. code-block:: bash + + pip install .[dev] + pre-commit install + +#. Retrieve the ``upstream`` ``dev`` branch: + + .. code-block:: bash + + git fetch upstream + git checkout -b dev upstream/dev + +#. Create a feature branch off of the ``dev`` branch to develop changes on. Branch names should be short but + descriptive (e.g. ``update-codice-unit-tests``) and not too generic (e.g. ``bug-fix``, ``updates``). Consistent use + of hyphens is encouraged. + + .. code-block:: bash + + git checkout -b + +#. Make changes to the branch using the nominal ``git add``/``git commit`` cycle. + + .. code-block:: bash + + git add + git commit -m 'Explanation of the changes' + + With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by ``black`` and/or + ``ruff`` and try committing your changes again. + +#. Push the feature branch to your personal fork's GitHub repository: + + .. code-block:: bash + + git push origin + +#. On the ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository + `_ create a new pull request. Click on the + "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to + ``IMAP-Science-Operations-Center`` and "base" to ``dev``. Set the "head repository" to the ``imap_processing`` + repository under your personal fork and "compare" to your feature branch. If the feature branch is still under + development, you can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the + beginning of the pull request title to signify that the pull request is not ready to be merged. + +#. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for + significant changes. They will review your pull request and either accept the request or ask for additional changes. + If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. + +#. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. + + +.. _keeping-your-fork-updated: + +Keeping your fork updated +^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can keep your personal fork up-to-date with the ``IMAP-Science-Operations-Center`` ``imap_processing`` repository by +fetching and pulling the ``upstream`` remote: + +.. code-block:: bash + + git checkout dev + git fetch upstream dev + git pull upstream/dev + + +.. _collaborating-on-someone-elses-fork: + +Collaborating on someone else's fork +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To contribute to a branch on another person's personal fork, add a new ``remote`` that points to their fork, and use the +nominal workflow for contributing: + +.. code-block:: bash + + git remote add + git fetch + git checkout -b / + # Make some changes via add/commit cycle + git push \ No newline at end of file diff --git a/docs/source/development/naming_conventions.rst b/docs/source/development/naming_conventions.rst new file mode 100644 index 000000000..5bd45fad2 --- /dev/null +++ b/docs/source/development/naming_conventions.rst @@ -0,0 +1,10 @@ +.. _naming-conventions: + +Naming Conventions +------------------ + +The repository shall adhere to specific naming conventions to allow for more consistency: + +* Repositories shall have branches named ``main`` and ``dev``, instead of ``master`` and ``development`` +* Repositories shall be named with underscores instead of hyphens (e.g. ``imap_processing`` instead of + ``imap-processing``) \ No newline at end of file diff --git a/docs/source/development/poetry_environment.rst b/docs/source/development/poetry_environment.rst new file mode 100644 index 000000000..597410aec --- /dev/null +++ b/docs/source/development/poetry_environment.rst @@ -0,0 +1,26 @@ +.. _poetry-environment: + +Poetry Environment +------------------ + +Poetry is used for dependency management within this project. To update dependencies, you can either update +``pyproject.toml`` manually, or use ``poetry add ``. + +If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use +`caret notation `_ to allow for minor +version updates. For example, if you have tested the code using numpy version ``1.24.2``, the best way to specify the +dependency is to allow for updates to the right most version number: + +:: + + numpy = "^1.24" + +This will allow for patches for security reasons without upgrading to ``1.25`` or beyond. Use your best judgement for +when packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely +required. + +The ``poetry.lock`` file contains the existing dependencies for the project. These are the dependencies that you should +install to ensure you're getting the accepted versions for every package. If the ``poetry.lock`` file is not up-to-date, +there is an automatic process within the repo to update ``poetry.lock`` to match ``pyproject.toml``. To resolve any +dependency issues before the pre-commit hook, users should run ``poetry lock`` and resolve any dependency problems ahead +of time. The ``poetry.lock`` file should be part of the files committed in this case. \ No newline at end of file diff --git a/docs/source/development/python_coding.rst b/docs/source/development/python_coding.rst new file mode 100644 index 000000000..0f2aae3eb --- /dev/null +++ b/docs/source/development/python_coding.rst @@ -0,0 +1,13 @@ +.. _python-coding: + +Python Coding +------------- + +Code shall adhere to the `PEP8 `_ conventions save for the following exceptions: + +* Lines of code need to be restricted to 88 characters to adhere to the ``black`` code formatter. +* Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use ``temperature`` instead of ``temp``, + ``filename`` instead of ``fn``). +* Function and class definitions should be placed in alphabetical order in the module. +* It is encouraged to annotate variables and functions using the `typing + `_ library. \ No newline at end of file diff --git a/docs/source/development/release_workflow.rst b/docs/source/development/release_workflow.rst new file mode 100644 index 000000000..a23995b3c --- /dev/null +++ b/docs/source/development/release_workflow.rst @@ -0,0 +1,54 @@ +.. _release-workflow: + +Release Workflow +---------------- + +Any changes merged or pushed to the ``main`` branch should follow a specific release workflow which follows the diagram +shown in the :ref:`git & GitHub Workflow ` section. This includes both 'nominal releases' (i.e. new +features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directly to ``main``). These workflows are +described below. It is assumed that steps (1) through (4) in the :ref:`git & GitHub Workflow ` +section are already completed. + +*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as +well.* + + +.. _nominal-releases: + +Nominal releases +^^^^^^^^^^^^^^^^ + +#. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any + feature branches using the nominal :ref:`git & GitHub Workflow `). +#. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for + the release, which should follow the :ref:`versioning ` conventions. +#. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This + may include commits that add release notes, or update version numbers in various configurations. +#. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). +#. In GitHub, create two pull requests: one that merges the release branch into ``main``, and one that merges the + release branch into ``dev``. Proceed with the nominal review & merge process described in steps (10) and (11) in the + :ref:`git & GitHub Workflow ` section. +#. Once the changes are merged into the ``main`` branch, create a `new release + `_ for the merge commit and assign the + appropriate version number. + + +.. _Making-hotfixes: + +Making hotfixes +^^^^^^^^^^^^^^^ + +*Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal ``dev`` branch +workflow; for example, if a bug fix is very time critical.* + +#. Create a new branch named ``hotfix-`` off of the ``main`` branch, and commit any necessary changes + following the nominal ``git add``/``git commit`` cycle. +#. Push the hotfix branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``), + and open two separate pull requests: one that merges the hotfix branch into the ``main`` branch, and one that merges + the hotfix branch into the ``dev`` branch. +#. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in + the :ref:`git & GitHub Workflow ` section. +#. Once the changes are merged into the ``main`` branch, create a `new release + `_ or a `new tag + `_ for the merge commit and assign the + appropriate :ref:`version number `. \ No newline at end of file diff --git a/docs/source/development/security.rst b/docs/source/development/security.rst new file mode 100644 index 000000000..e4cd96162 --- /dev/null +++ b/docs/source/development/security.rst @@ -0,0 +1,14 @@ +.. _security: + +Security +-------- + +The following items should never be committed in the source code or GitHub issues/pull requests: + +* Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) +* Internal directory structures or filepaths +* Machine names +* Proprietary data + +If code needs access to this information, it should be stored in a configuration file that is not part of the +repository. diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style-guide.rst index 80a12414b..80890ed54 100644 --- a/docs/source/development/style-guide.rst +++ b/docs/source/development/style-guide.rst @@ -28,322 +28,6 @@ these items are provided below in the guide. #. Follow a specific :ref:`release workflow ` when making releases. -.. _git-and-github-workflow: - -git and GitHub Workflow ------------------------ - -The best method for contributing software to the repository is a workflow that involves forking the repository, -developing changes on "feature" branches, and opening pull requests through GitHub. - -The following diagram depicts this workflow (credit to `Atlassian -`_): - -.. image:: https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1089 - :alt: git and GitHub Workflow - :width: 650 - :height: 650 - -As such, all feature branches should be branched off of and merged back into the ``dev`` branch. - - -.. _contributing-new-features: - -Contributing new features -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Before contributing, it is generally encouraged to open a GitHub issue (`imap_processing -`_, or `sds-data-manager -`_), if one does not already -exist, that describes the feature to be implemented, or the problem that is trying to be solved. This allows the -contributor and the team as a whole to keep track of how the feature relates to the project and track its progress. Any -contributors to the feature should be assigned to the issue, and proper label(s) should also be assigned. - -*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as -well.* - -*Note: Steps (1) through (5) only to be completed once.* - -#. Create a personal fork of the ``imap_processing`` repository by visiting the main ``IMAP-Science-Operations-Center`` - ``imap_processing`` `repository `_ and clicking - the ``Fork`` button near the top-right of the page. Follow the various steps to create a fork under your GitHub - account. -#. Make a local copy of your personal fork by cloning the repository, using the URL found by clicking the green "clone" - button: - - .. code-block:: bash - - git clone https://github.com//imap_processing.git # for HTTPS - git clone git@github.com:/imap_processing.git # for SSH - -#. Ensure that the personal fork is pointing to the ``upstream`` ``imap_processing`` repository: - - .. code-block:: bash - - git remote add upstream https://github.com/IMAP-Science-Operations-Center/imap_processing.git # for HTTPS - git remote add upstream git@github.com:IMAP-Science-Operations-Center/imap_processing.git # for SSH - - -#. Install the development dependencies and pre-commit hooks. These hooks will automatically run the tools - `black `_ and `ruff `_ on your code changes - before commits: - - .. code-block:: bash - - pip install .[dev] - pre-commit install - -#. Retrieve the ``upstream`` ``dev`` branch: - - .. code-block:: bash - - git fetch upstream - git checkout -b dev upstream/dev - -#. Create a feature branch off of the ``dev`` branch to develop changes on. Branch names should be short but - descriptive (e.g. ``update-codice-unit-tests``) and not too generic (e.g. ``bug-fix``, ``updates``). Consistent use - of hyphens is encouraged. - - .. code-block:: bash - - git checkout -b - -#. Make changes to the branch using the nominal ``git add``/``git commit`` cycle. - - .. code-block:: bash - - git add - git commit -m 'Explanation of the changes' - - With the pre-commit hooks installed, you may need to make fixes to any warnings/errors reported by ``black`` and/or - ``ruff`` and try committing your changes again. - -#. Push the feature branch to your personal fork's GitHub repository: - - .. code-block:: bash - - git push origin - -#. On the ``IMAP-Science-Operations-Center`` ``imap_processing`` `repository - `_ create a new pull request. Click on the - "compare across forks" link to enable the pull request to use your fork. Set the "base repository" to - ``IMAP-Science-Operations-Center`` and "base" to ``dev``. Set the "head repository" to the ``imap_processing`` - repository under your personal fork and "compare" to your feature branch. If the feature branch is still under - development, you can click the "Convert to draft" button under the "Reviewers" section, or add a "[WIP]" at the - beginning of the pull request title to signify that the pull request is not ready to be merged. - -#. Assign at least one reviewer to the pull request, though two or more reviewers are highly encouraged, especially for - significant changes. They will review your pull request and either accept the request or ask for additional changes. - If additional changes are needed, iterate through steps (7) and (8) until you and the reviewer(s) are satisfied. - -#. Once the pull request has been accepted, you can merge the pull request and delete the feature branch. - - -.. _keeping-your-fork-updated: - -Keeping your fork updated -^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can keep your personal fork up-to-date with the ``IMAP-Science-Operations-Center`` ``imap_processing`` repository by -fetching and pulling the ``upstream`` remote: - -.. code-block:: bash - - git checkout dev - git fetch upstream dev - git pull upstream/dev - - -.. _collaborating-on-someone-elses-fork: - -Collaborating on someone else's fork -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To contribute to a branch on another person's personal fork, add a new ``remote`` that points to their fork, and use the -nominal workflow for contributing: - -.. code-block:: bash - - git remote add - git fetch - git checkout -b / - # Make some changes via add/commit cycle - git push - - -.. _python-coding: - -Python Coding -------------- - -Code shall adhere to the `PEP8 `_ conventions save for the following exceptions: - -* Lines of code need to be restricted to 88 characters to adhere to the ``black`` code formatter. -* Avoid one-letter or unnecessarily-abbreviated variable names (e.g. use ``temperature`` instead of ``temp``, - ``filename`` instead of ``fn``). -* Function and class definitions should be placed in alphabetical order in the module. -* It is encouraged to annotate variables and functions using the `typing - `_ library. - - -.. _api-documentation: - -API Documentation ------------------ - -Documentation code shall adhere to the `PEP257 `_ and `numpydoc -`_ conventions. - -The following are further recommendations: - -* Each module should have at minimum a description and a ``Use`` section. -* Each function/method should have at minimum a description, ``Parameters`` (if necessary), and ``Returns`` (if - necessary) sections. - -When a new module is added to the repository, make sure to add the module to the appropriate ``docs/source/*.rst`` file, -so that the API documentation can be part of the automated documentation build. - - -.. _poetry-environment: - -Poetry Environment ------------------- - -Poetry is used for dependency management within this project. To update dependencies, you can either update -``pyproject.toml`` manually, or use ``poetry add ``. - -If you do add dependencies, please make sure you define the version numbers mindfully. The best way to do this is to use -`caret notation `_ to allow for minor -version updates. For example, if you have tested the code using numpy version ``1.24.2``, the best way to specify the -dependency is to allow for updates to the right most version number: - -:: - - numpy = "^1.24" - -This will allow for patches for security reasons without upgrading to ``1.25`` or beyond. Use your best judgement for -when packages can upgrade automatically, but try and avoid specifying only one specific version unless it is absolutely -required. - -The ``poetry.lock`` file contains the existing dependencies for the project. These are the dependencies that you should -install to ensure you're getting the accepted versions for every package. If the ``poetry.lock`` file is not up-to-date, -there is an automatic process within the repo to update ``poetry.lock`` to match ``pyproject.toml``. To resolve any -dependency issues before the pre-commit hook, users should run ``poetry lock`` and resolve any dependency problems ahead -of time. The ``poetry.lock`` file should be part of the files committed in this case. - - -.. _security: - -Security --------- - -The following items should never be committed in the source code or GitHub issues/pull requests: - -* Account credentials of any kind (e.g. database usernames/passwords, AWS credentials, etc.) -* Internal directory structures or filepaths -* Machine names -* Proprietary data - -If code needs access to this information, it should be stored in a configuration file that is not part of the -repository. - - -.. _naming-conventions: - -Naming Conventions ------------------- - -The repository shall adhere to specific naming conventions to allow for more consistency: - -* Repositories shall have branches named ``main`` and ``dev``, instead of ``master`` and ``development`` -* Repositories shall be named with underscores instead of hyphens (e.g. ``imap_processing`` instead of - ``imap-processing``) - - -.. _tools-and-library-recommendations: - -Tools and Library Recommendations ---------------------------------- - -* `black `_ for checking python code formatting -* `poetry `_ for dependency management and virtual environments -* `pytest `_ for unit testing -* `ruff `_ for checking docstring formatting -* `spiceypy `_ for using SPICE kernels -* `space-packet-parser `_ to unpack CCSDS packets - - -.. _versioning: - -Versioning ----------- - -Any changes pushed to the ``main`` branch should be tagged with a version number. The version number convention is -``x.y.z``, where - -:: - - x = The main version number. Increase when making incompatible API changes. - y = The feature number. Increase when change contains a new feature with or without bug fixes. - z = The hotfix number. Increase when change only contains bug fixes. - - -.. _release-workflow: - -Release Workflow ----------------- - -Any changes merged or pushed to the ``main`` branch should follow a specific release workflow which follows the diagram -shown in the :ref:`git & GitHub Workflow ` section. This includes both 'nominal releases' (i.e. new -features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directly to ``main``). These workflows are -described below. It is assumed that steps (1) through (4) in the :ref:`git & GitHub Workflow ` -section are already completed. - -*Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as -well.* - - -.. _nominal-releases: - -Nominal releases -^^^^^^^^^^^^^^^^ - -#. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any - feature branches using the nominal :ref:`git & GitHub Workflow `). -#. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for - the release, which should follow the :ref:`versioning ` conventions. -#. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This - may include commits that add release notes, or update version numbers in various configurations. -#. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). -#. In GitHub, create two pull requests: one that merges the release branch into ``main``, and one that merges the - release branch into ``dev``. Proceed with the nominal review & merge process described in steps (10) and (11) in the - :ref:`git & GitHub Workflow ` section. -#. Once the changes are merged into the ``main`` branch, create a `new release - `_ for the merge commit and assign the - appropriate version number. - - -.. _Making-hotfixes: - -Making hotfixes -^^^^^^^^^^^^^^^ - -*Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal ``dev`` branch -workflow; for example, if a bug fix is very time critical.* - -#. Create a new branch named ``hotfix-`` off of the ``main`` branch, and commit any necessary changes - following the nominal ``git add``/``git commit`` cycle. -#. Push the hotfix branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``), - and open two separate pull requests: one that merges the hotfix branch into the ``main`` branch, and one that merges - the hotfix branch into the ``dev`` branch. -#. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in - the :ref:`git & GitHub Workflow ` section. -#. Once the changes are merged into the ``main`` branch, create a `new release - `_ or a `new tag - `_ for the merge commit and assign the - appropriate :ref:`version number `. - - .. _checklist-for-contributors-and-reviewers-of-pull-requests: Checklist for Contributors and Reviewers of Pull Requests diff --git a/docs/source/development/tools_and_library_recommendations.rst b/docs/source/development/tools_and_library_recommendations.rst new file mode 100644 index 000000000..08896a5c6 --- /dev/null +++ b/docs/source/development/tools_and_library_recommendations.rst @@ -0,0 +1,11 @@ +.. _tools-and-library-recommendations: + +Tools and Library Recommendations +--------------------------------- + +* `black `_ for checking python code formatting +* `poetry `_ for dependency management and virtual environments +* `pytest `_ for unit testing +* `ruff `_ for checking docstring formatting +* `spiceypy `_ for using SPICE kernels +* `space-packet-parser `_ to unpack CCSDS packets \ No newline at end of file diff --git a/docs/source/development/versioning.rst b/docs/source/development/versioning.rst new file mode 100644 index 000000000..3680c81c1 --- /dev/null +++ b/docs/source/development/versioning.rst @@ -0,0 +1,13 @@ +.. _versioning: + +Versioning +---------- + +Any changes pushed to the ``main`` branch should be tagged with a version number. The version number convention is +``x.y.z``, where + +:: + + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. \ No newline at end of file From de522449ea0899f7fe1d1237db273a561528911e Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Sun, 6 Aug 2023 11:03:48 -0600 Subject: [PATCH 45/68] Broke up style guide into several rst files, changed toctree to include subsections for easier navigation --- ...ocumentation.rst => api-documentation.rst} | 0 .../checklist-for-pull-requests.rst | 86 +++++++++++++++ ...rkflow.rst => git-and-github-workflow.rst} | 0 docs/source/development/index.rst | 7 +- ...conventions.rst => naming-conventions.rst} | 0 ...environment.rst => poetry-environment.rst} | 0 .../{python_coding.rst => python-coding.rst} | 0 ...ease_workflow.rst => release-workflow.rst} | 0 docs/source/development/style-guide.rst | 101 +++--------------- ... => tools-and-library-recommendations.rst} | 0 10 files changed, 105 insertions(+), 89 deletions(-) rename docs/source/development/{api_documentation.rst => api-documentation.rst} (100%) create mode 100644 docs/source/development/checklist-for-pull-requests.rst rename docs/source/development/{git_and_github_workflow.rst => git-and-github-workflow.rst} (100%) rename docs/source/development/{naming_conventions.rst => naming-conventions.rst} (100%) rename docs/source/development/{poetry_environment.rst => poetry-environment.rst} (100%) rename docs/source/development/{python_coding.rst => python-coding.rst} (100%) rename docs/source/development/{release_workflow.rst => release-workflow.rst} (100%) rename docs/source/development/{tools_and_library_recommendations.rst => tools-and-library-recommendations.rst} (100%) diff --git a/docs/source/development/api_documentation.rst b/docs/source/development/api-documentation.rst similarity index 100% rename from docs/source/development/api_documentation.rst rename to docs/source/development/api-documentation.rst diff --git a/docs/source/development/checklist-for-pull-requests.rst b/docs/source/development/checklist-for-pull-requests.rst new file mode 100644 index 000000000..5cd02c01e --- /dev/null +++ b/docs/source/development/checklist-for-pull-requests.rst @@ -0,0 +1,86 @@ +.. _checklist-for-contributors-and-reviewers-of-pull-requests: + +Checklist for Contributors and Reviewers of Pull Requests +--------------------------------------------------------- + +The following is a guide to be used for contributors and reviewers of ``imap_processing`` pull requests. Note that this +is only a guide; it should not be treated as a fully comprehensive, foolproof list that must be used in all situations, +and parts of it are subjective. + +If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are +acceptable and the PR can be reviewed and merged. + + +.. _Checklist-for-Contributors: + +Checklist for Contributors +^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +.. _Pertaining-to-the-code: + +Pertaining to the code: +""""""""""""""""""""""" + +* Does the code conform to this style guide? +* Is any of the code functionality not already available via native or third-party python libraries? +* Does the code execute successfully? + * Do all the tests pass in the existing test suite? + * Does the newly added functionality run without errors? +* Is the code documented and commented sufficiently such that it is easy to read and follow? + * Are docstrings included for all new modules, classes, and functions? + * Are in-line comments included to provide necessary context? + * Are any documentation files in other locations updated? +* Have all debugging/print statements been removed? +* Does the code contain sufficient exception handling? +* Does the code contain no deprecation warnings? +* Does the code include all necessary unit tests? +* Are any new dependencies correctly added to the ``pyproject.toml`` file? + + +.. _pertaining-to-the-pull-request: + +Pertaining to the pull request: +""""""""""""""""""""""""""""""" + +* Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. +* Does the PR have a concise, descriptive title? +* Does the PR link to and close the relevant issue? +* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? +* Are you listed as an assignee to the PR? +* Does the PR have proper labels? +* Do all the automated checks pass? + + +.. _checklist-for-reviewers: + +Checklist for Reviewers +^^^^^^^^^^^^^^^^^^^^^^^ + + +.. _pertaining-to-the-pull-request-review: + +Pertaining to the pull request: +""""""""""""""""""""""""""""""" + +* Does the PR have a concise, descriptive title? +* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? +* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? +* Does the PR have at least one assignee? +* Does the PR have proper labels? +* Is the PR no longer a work in progress? +* Do all the automated checks pass? + + +.. _pertaining-to-the-code-review: + +Pertaining to the code: +""""""""""""""""""""""" + +* Does the code conform to this style guide? +* Is the code documented and commented sufficiently such that it is easy to read and follow? +* Does the code contain sufficient exception handling? +* Does the code contain no sensitive data or information? +* Does the code contain any necessary unit tests? +* If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? diff --git a/docs/source/development/git_and_github_workflow.rst b/docs/source/development/git-and-github-workflow.rst similarity index 100% rename from docs/source/development/git_and_github_workflow.rst rename to docs/source/development/git-and-github-workflow.rst diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst index c8a423e09..041dd33d0 100644 --- a/docs/source/development/index.rst +++ b/docs/source/development/index.rst @@ -38,4 +38,9 @@ A typical development workflow might look like the following: :maxdepth: 1 doc-overview - Style Guide \ No newline at end of file + release-workflow + +.. toctree:: + :maxdepth: 2 + + style-guide \ No newline at end of file diff --git a/docs/source/development/naming_conventions.rst b/docs/source/development/naming-conventions.rst similarity index 100% rename from docs/source/development/naming_conventions.rst rename to docs/source/development/naming-conventions.rst diff --git a/docs/source/development/poetry_environment.rst b/docs/source/development/poetry-environment.rst similarity index 100% rename from docs/source/development/poetry_environment.rst rename to docs/source/development/poetry-environment.rst diff --git a/docs/source/development/python_coding.rst b/docs/source/development/python-coding.rst similarity index 100% rename from docs/source/development/python_coding.rst rename to docs/source/development/python-coding.rst diff --git a/docs/source/development/release_workflow.rst b/docs/source/development/release-workflow.rst similarity index 100% rename from docs/source/development/release_workflow.rst rename to docs/source/development/release-workflow.rst diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style-guide.rst index 80890ed54..c6076c376 100644 --- a/docs/source/development/style-guide.rst +++ b/docs/source/development/style-guide.rst @@ -25,92 +25,17 @@ these items are provided below in the guide. #. Follow agreed-upon :ref:`naming conventions ` where applicable. #. Use specific :ref:`tools and libraries ` where applicable. #. Use nominal semantic :ref:`versioning ` for version numbers. -#. Follow a specific :ref:`release workflow ` when making releases. - -.. _checklist-for-contributors-and-reviewers-of-pull-requests: - -Checklist for Contributors and Reviewers of Pull Requests ---------------------------------------------------------- - -The following is a guide to be used for contributors and reviewers of ``imap_processing`` pull requests. Note that this -is only a guide; it should not be treated as a fully comprehensive, foolproof list that must be used in all situations, -and parts of it are subjective. - -If the contributor/reviewer can answer "yes" to all the following questions, then conceivably the proposed changes are -acceptable and the PR can be reviewed and merged. - - -.. _Checklist-for-Contributors: - -Checklist for Contributors -^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -.. _Pertaining-to-the-code: - -Pertaining to the code: -""""""""""""""""""""""" - -* Does the code conform to this style guide? -* Is any of the code functionality not already available via native or third-party python libraries? -* Does the code execute successfully? - * Do all the tests pass in the existing test suite? - * Does the newly added functionality run without errors? -* Is the code documented and commented sufficiently such that it is easy to read and follow? - * Are docstrings included for all new modules, classes, and functions? - * Are in-line comments included to provide necessary context? - * Are any documentation files in other locations updated? -* Have all debugging/print statements been removed? -* Does the code contain sufficient exception handling? -* Does the code contain no deprecation warnings? -* Does the code include all necessary unit tests? -* Are any new dependencies correctly added to the ``pyproject.toml`` file? - - -.. _pertaining-to-the-pull-request: - -Pertaining to the pull request: -""""""""""""""""""""""""""""""" - -* Is the PR excessively long and/or covers multiple issues? If so, consider breaking it up into multiple PRs. -* Does the PR have a concise, descriptive title? -* Does the PR link to and close the relevant issue? -* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? -* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? -* Are you listed as an assignee to the PR? -* Does the PR have proper labels? -* Do all the automated checks pass? - - -.. _checklist-for-reviewers: - -Checklist for Reviewers -^^^^^^^^^^^^^^^^^^^^^^^ - - -.. _pertaining-to-the-pull-request-review: - -Pertaining to the pull request: -""""""""""""""""""""""""""""""" - -* Does the PR have a concise, descriptive title? -* Does the PR have a sufficient description as to make it clear what the reasons for the changes are? -* Is the PR merging into ``upstream/dev`` from ``/`` (in most cases)? -* Does the PR have at least one assignee? -* Does the PR have proper labels? -* Is the PR no longer a work in progress? -* Do all the automated checks pass? - - -.. _pertaining-to-the-code-review: - -Pertaining to the code: -""""""""""""""""""""""" - -* Does the code conform to this style guide? -* Is the code documented and commented sufficiently such that it is easy to read and follow? -* Does the code contain sufficient exception handling? -* Does the code contain no sensitive data or information? -* Does the code contain any necessary unit tests? -* If there are new dependencies, are they all necessary? Are they correctly added to the ``pyproject.toml`` file? +Contributors can refer to the :ref:`checklist for contributors and reviewers of pull requests +` for assistance in making sure pull requests are adhering +to these conventions. + +.. include:: git-and-github-workflow.rst +.. include:: python-coding.rst +.. include:: api-documentation.rst +.. include:: poetry-environment.rst +.. include:: security.rst +.. include:: naming-conventions.rst +.. include:: tools-and-library-recommendations.rst +.. include:: versioning.rst +.. include:: checklist-for-pull-requests.rst \ No newline at end of file diff --git a/docs/source/development/tools_and_library_recommendations.rst b/docs/source/development/tools-and-library-recommendations.rst similarity index 100% rename from docs/source/development/tools_and_library_recommendations.rst rename to docs/source/development/tools-and-library-recommendations.rst From 335dd53f66feb4726dfb82d6c0d9d4528123ef4b Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Sun, 6 Aug 2023 11:04:08 -0600 Subject: [PATCH 46/68] Fixed typo --- docs/source/development/doc-overview.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/development/doc-overview.rst b/docs/source/development/doc-overview.rst index 1bd5386bb..242f2ca8a 100644 --- a/docs/source/development/doc-overview.rst +++ b/docs/source/development/doc-overview.rst @@ -34,7 +34,7 @@ Before writing any section, double check that there isn't an existing document t You can link to other documents in these docs using the `"docs" role `_. -Basically, you can add a link using this synatx: ``:doc:`parrot```. +Basically, you can add a link using this syntax: ``:doc:`parrot```. It is also useful to link to specific sections within documentation. If you have sections which may be useful to link to, you can add an internal `ref `_ to allow other documents to link to your section. You can create this ref with ``.. _hyperlink-name:`` before the referenced text. You can use these internal links with the `ref `_ role: From fcfbfa0dbc32e03a8b405dca4780ab98bb560e04 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 7 Aug 2023 10:17:22 -0600 Subject: [PATCH 47/68] Moved style guide pages to their own directory and created toctree to organize them all under a parent style-guide page --- docs/source/development/index.rst | 6 +----- .../{ => style_guide}/api-documentation.rst | 0 .../checklist-for-pull-requests.rst | 0 .../git-and-github-workflow.rst | 0 .../{ => style_guide}/naming-conventions.rst | 0 .../{ => style_guide}/poetry-environment.rst | 0 .../{ => style_guide}/python-coding.rst | 0 .../{ => style_guide}/security.rst | 0 .../{ => style_guide}/style-guide.rst | 21 +++++++++++-------- .../tools-and-library-recommendations.rst | 0 .../{ => style_guide}/versioning.rst | 0 11 files changed, 13 insertions(+), 14 deletions(-) rename docs/source/development/{ => style_guide}/api-documentation.rst (100%) rename docs/source/development/{ => style_guide}/checklist-for-pull-requests.rst (100%) rename docs/source/development/{ => style_guide}/git-and-github-workflow.rst (100%) rename docs/source/development/{ => style_guide}/naming-conventions.rst (100%) rename docs/source/development/{ => style_guide}/poetry-environment.rst (100%) rename docs/source/development/{ => style_guide}/python-coding.rst (100%) rename docs/source/development/{ => style_guide}/security.rst (100%) rename docs/source/development/{ => style_guide}/style-guide.rst (83%) rename docs/source/development/{ => style_guide}/tools-and-library-recommendations.rst (100%) rename docs/source/development/{ => style_guide}/versioning.rst (100%) diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst index 041dd33d0..fa70d97f2 100644 --- a/docs/source/development/index.rst +++ b/docs/source/development/index.rst @@ -39,8 +39,4 @@ A typical development workflow might look like the following: doc-overview release-workflow - -.. toctree:: - :maxdepth: 2 - - style-guide \ No newline at end of file + style_guide/style-guide \ No newline at end of file diff --git a/docs/source/development/api-documentation.rst b/docs/source/development/style_guide/api-documentation.rst similarity index 100% rename from docs/source/development/api-documentation.rst rename to docs/source/development/style_guide/api-documentation.rst diff --git a/docs/source/development/checklist-for-pull-requests.rst b/docs/source/development/style_guide/checklist-for-pull-requests.rst similarity index 100% rename from docs/source/development/checklist-for-pull-requests.rst rename to docs/source/development/style_guide/checklist-for-pull-requests.rst diff --git a/docs/source/development/git-and-github-workflow.rst b/docs/source/development/style_guide/git-and-github-workflow.rst similarity index 100% rename from docs/source/development/git-and-github-workflow.rst rename to docs/source/development/style_guide/git-and-github-workflow.rst diff --git a/docs/source/development/naming-conventions.rst b/docs/source/development/style_guide/naming-conventions.rst similarity index 100% rename from docs/source/development/naming-conventions.rst rename to docs/source/development/style_guide/naming-conventions.rst diff --git a/docs/source/development/poetry-environment.rst b/docs/source/development/style_guide/poetry-environment.rst similarity index 100% rename from docs/source/development/poetry-environment.rst rename to docs/source/development/style_guide/poetry-environment.rst diff --git a/docs/source/development/python-coding.rst b/docs/source/development/style_guide/python-coding.rst similarity index 100% rename from docs/source/development/python-coding.rst rename to docs/source/development/style_guide/python-coding.rst diff --git a/docs/source/development/security.rst b/docs/source/development/style_guide/security.rst similarity index 100% rename from docs/source/development/security.rst rename to docs/source/development/style_guide/security.rst diff --git a/docs/source/development/style-guide.rst b/docs/source/development/style_guide/style-guide.rst similarity index 83% rename from docs/source/development/style-guide.rst rename to docs/source/development/style_guide/style-guide.rst index c6076c376..d39bbcfeb 100644 --- a/docs/source/development/style-guide.rst +++ b/docs/source/development/style_guide/style-guide.rst @@ -30,12 +30,15 @@ Contributors can refer to the :ref:`checklist for contributors and reviewers of ` for assistance in making sure pull requests are adhering to these conventions. -.. include:: git-and-github-workflow.rst -.. include:: python-coding.rst -.. include:: api-documentation.rst -.. include:: poetry-environment.rst -.. include:: security.rst -.. include:: naming-conventions.rst -.. include:: tools-and-library-recommendations.rst -.. include:: versioning.rst -.. include:: checklist-for-pull-requests.rst \ No newline at end of file +.. toctree:: + :maxdepth: 1 + + git-and-github-workflow + python-coding + api-documentation + poetry-environment + security + naming-conventions + tools-and-library-recommendations + versioning + checklist-for-pull-requests \ No newline at end of file diff --git a/docs/source/development/tools-and-library-recommendations.rst b/docs/source/development/style_guide/tools-and-library-recommendations.rst similarity index 100% rename from docs/source/development/tools-and-library-recommendations.rst rename to docs/source/development/style_guide/tools-and-library-recommendations.rst diff --git a/docs/source/development/versioning.rst b/docs/source/development/style_guide/versioning.rst similarity index 100% rename from docs/source/development/versioning.rst rename to docs/source/development/style_guide/versioning.rst From 2325020f938c7d7b18c16a846bbf8bd8db8298a5 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 7 Aug 2023 12:02:19 -0600 Subject: [PATCH 48/68] Updated to relfect the versioning schemes the dev team has decided on moving forward --- .../development/style_guide/versioning.rst | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/docs/source/development/style_guide/versioning.rst b/docs/source/development/style_guide/versioning.rst index 3680c81c1..5dc49d741 100644 --- a/docs/source/development/style_guide/versioning.rst +++ b/docs/source/development/style_guide/versioning.rst @@ -3,11 +3,38 @@ Versioning ---------- -Any changes pushed to the ``main`` branch should be tagged with a version number. The version number convention is -``x.y.z``, where +Software Versioning +^^^^^^^^^^^^^^^^^^^ + +Any changes pushed to the ``main`` branch (regardless of if the change is instrument-specific, or project-wide) should +be tagged with a version number. This project uses `semantic versioning `_, in which version +numbers should follow a convention of ``x.y.z``, where: + +:: + + x = The main version number. Increase when making incompatible API changes. + y = The feature number. Increase when change contains a new feature with or without bug fixes. + z = The hotfix number. Increase when change only contains bug fixes. + +This convention was discussed and decided on in `this GitHub issue +`_. + + +Data Product Versioning +^^^^^^^^^^^^^^^^^^^^^^^ + +IMAP data products are versioned with the convention ``vXX.YY``, where: :: - x = The main version number. Increase when making incompatible API changes. - y = The feature number. Increase when change contains a new feature with or without bug fixes. - z = The hotfix number. Increase when change only contains bug fixes. \ No newline at end of file + XX = The major version. Increase when any change to the processing algorithm is made. + YY = The minor version. Increase when data are reprocessed with the same algorithm, but with different ancillary + files or calibrations (for example, updated SPICE kernels). The minor version is also reset to 0 whenever the + major version number is updated. + +Version numbers are specific to an instrument. In other words, each IMAP instrument has their own version number that +is only updated when that instrument's algorithm is changed, or that instrument's data are reprocessed. The version is +updated independently of the other IMA1P instruments. + +This convention was discussed and decided on in `this GitHub issue +`_. \ No newline at end of file From 6e1ef5e1fb712c3fe8f850d97a3071a196415a75 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 7 Aug 2023 14:00:22 -0600 Subject: [PATCH 49/68] Added some notes about deployment --- docs/source/development/release-workflow.rst | 30 ++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/docs/source/development/release-workflow.rst b/docs/source/development/release-workflow.rst index a23995b3c..778916d92 100644 --- a/docs/source/development/release-workflow.rst +++ b/docs/source/development/release-workflow.rst @@ -3,11 +3,17 @@ Release Workflow ---------------- +This page describes how to make releases of the software within the ``imap_processing`` and ``sds-data-manager`` +repositories, and the steps needed to push said software to the production environment and update the data products. + +Software Releases +^^^^^^^^^^^^^^^^^ + Any changes merged or pushed to the ``main`` branch should follow a specific release workflow which follows the diagram -shown in the :ref:`git & GitHub Workflow ` section. This includes both 'nominal releases' (i.e. new -features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directly to ``main``). These workflows are +shown in the :ref:`git & GitHub Workflow ` page. This includes both 'nominal releases' (i.e. +new features being merged into ``main``) and 'hotfixes' (i.e. bug fixes made directly to ``main``). These workflows are described below. It is assumed that steps (1) through (4) in the :ref:`git & GitHub Workflow ` -section are already completed. +are already completed. *Note: We use the 'imap_processing' repository as an example here, but this can be applied to 'sds-data-manager' as well.* @@ -16,12 +22,12 @@ well.* .. _nominal-releases: Nominal releases -^^^^^^^^^^^^^^^^ +"""""""""""""""" #. Make sure the ``dev`` branch is up-to-date with any changes you want included in the release (i.e. merge in any feature branches using the nominal :ref:`git & GitHub Workflow `). #. Create a new 'release' branch off of ``dev``. The name of the branch should match the version number to be used for - the release, which should follow the :ref:`versioning ` conventions. + the release, which should follow the :ref:`software versioning ` conventions. #. Make any release-specific commits to the new release branch using the nominal ``git add``/``git commit`` cycle. This may include commits that add release notes, or update version numbers in various configurations. #. Push the release branch to the main ``IMAP-Science-Operations-Center`` ``imap_processing`` repo (i.e. ``upstream``). @@ -36,7 +42,7 @@ Nominal releases .. _Making-hotfixes: Making hotfixes -^^^^^^^^^^^^^^^ +""""""""""""""" *Note: A hotfix should generally be avoided unless there is some specific reason to bypass the nominal ``dev`` branch workflow; for example, if a bug fix is very time critical.* @@ -47,8 +53,16 @@ workflow; for example, if a bug fix is very time critical.* and open two separate pull requests: one that merges the hotfix branch into the ``main`` branch, and one that merges the hotfix branch into the ``dev`` branch. #. For each of these pull requests, proceed with the nominal review & merge process described in steps (10) and (11) in - the :ref:`git & GitHub Workflow ` section. + the :ref:`git & GitHub Workflow `. #. Once the changes are merged into the ``main`` branch, create a `new release `_ or a `new tag `_ for the merge commit and assign the - appropriate :ref:`version number `. \ No newline at end of file + appropriate :ref:`version number `. + + +Deployment +^^^^^^^^^^ + +Once a release is created in GitHub, a SDC dev team member can follow the `CDK deployment steps +`_ to deploy the software to AWS. Once the +software is deployed, a user should be able to call the APIs. \ No newline at end of file From cc4471d033463c8862017da08b5944e309572ccb Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Mon, 7 Aug 2023 14:42:47 -0600 Subject: [PATCH 50/68] Fixed typo --- .all-contributorsrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 4d6372348..e00b943d7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -52,7 +52,7 @@ "contributions": [ "code", "ideas", - "infra + "infra" ] }, { @@ -64,7 +64,7 @@ "code", "doc", "ideas", - "infra", + "infra" ] }, { From 369610d7c6211ab2a473b6c44d9ff5a2950d9d5a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:43:50 +0000 Subject: [PATCH 51/68] docs: update README.md [skip ci] --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 6dde8a39c..a1bf43de2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # IMAP (Interstellar Mapping and Acceleration Probe) -[![All Contributors](https://img.shields.io/github/all-contributors/IMAP-Science-Operations-Center/imap_processing?color=ee8449&style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-) [![readthedocs](https://readthedocs.org/projects/imap-processing/badge/?version=latest)](https://imap-processing.readthedocs.io/en/latest/) @@ -28,12 +28,12 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - - - + + + - - + +
Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧 👀
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧 👀
Sean Hoyt
Sean Hoyt

💻 🤔 🚇 👀
Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧
Sean Hoyt
Sean Hoyt

💻 🤔 🚇
Gabriel M.
Gabriel M.

💻 🤔 🚇
Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇 👀
Maxine Hartnett
Maxine Hartnett

💻 🤔 🚇 👀
Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇
Maxine Hartnett
Maxine Hartnett

💻 🤔 🚇 👀 📖
From c1e20d746f51f440bc8ed224c3051b3ac357e5e8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:43:51 +0000 Subject: [PATCH 52/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index e00b943d7..6f08e674e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -76,8 +76,9 @@ "code", "ideas", "infra", - "review" - ] + "review", + "doc" + ] } ], "contributorsPerLine": 7, From 6252b68bf6426ec8d7f856762c9c6f97ab97435f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:49:14 +0000 Subject: [PATCH 53/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1bf43de2..664d17fb0 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧 Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧 Sean Hoyt
Sean Hoyt

💻 🤔 🚇 - Gabriel M.
Gabriel M.

💻 🤔 🚇 + Gabriel M.
Gabriel M.

💻 🤔 🚇 👀 Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇 Maxine Hartnett
Maxine Hartnett

💻 🤔 🚇 👀 📖 From 1e9f9b9866d84fd6c18cf37e10edb068d8525371 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:49:14 +0000 Subject: [PATCH 54/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6f08e674e..a41d272b0 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -52,7 +52,8 @@ "contributions": [ "code", "ideas", - "infra" + "infra", + "review" ] }, { From 02db9c0e5c5c1289752f9c55967528b660253d25 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:50:50 +0000 Subject: [PATCH 55/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 664d17fb0..42539435d 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - + From 01eb1b8eb3c6114477f9ee452a5c2a40a89a53d8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:50:51 +0000 Subject: [PATCH 56/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index a41d272b0..49958b57b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -17,7 +17,8 @@ "doc", "ideas", "infra", - "maintenance" + "maintenance", + "review" ] }, { From 2716f59687654fc5b396ece8b9ce48b52531e6cb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:51:57 +0000 Subject: [PATCH 57/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42539435d..049b418a6 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - + From 985b2b40f9d675a98d1c17606df2bd8f80dbac5d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:51:58 +0000 Subject: [PATCH 58/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 49958b57b..816a0fdc5 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -66,7 +66,8 @@ "code", "doc", "ideas", - "infra" + "infra", + "review" ] }, { From 54c419b49b5fcb2d7412eec31ee80a517fa05e72 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:52:55 +0000 Subject: [PATCH 59/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 049b418a6..3ef9a6dad 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - + From 2c1cd825701263b45a7a07ac4bca939d85337bbe Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:52:56 +0000 Subject: [PATCH 60/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 816a0fdc5..2596beab8 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -31,7 +31,8 @@ "ideas", "infra", "example", - "maintenance" + "maintenance", + "review" ] }, { From c6939f6ac4ff569f6de299c7b9b623282a612791 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:54:16 +0000 Subject: [PATCH 61/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 672f042bb..54b9d3d9f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧
Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧 👀
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧
Sean Hoyt
Sean Hoyt

💻 🤔 🚇
Gabriel M.
Gabriel M.

💻 🤔 🚇 👀
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧
Sean Hoyt
Sean Hoyt

💻 🤔 🚇
Gabriel M.
Gabriel M.

💻 🤔 🚇 👀
Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇
Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇 👀
Maxine Hartnett
Maxine Hartnett

💻 🤔 🚇 👀 📖
Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧 👀
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧
Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧 👀
Sean Hoyt
Sean Hoyt

💻 🤔 🚇
Gabriel M.
Gabriel M.

💻 🤔 🚇 👀
Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇 👀
- +
Laura Sandoval
Laura Sandoval

💻 🐛 🔣 📖 💡 🤔 🚇 🚧
Laura Sandoval
Laura Sandoval

💻 🐛 🔣 📖 💡 🤔 🚇 🚧 👀
From a91829d5a1d5603758b0ff1a4653bb817f9f72cc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:54:17 +0000 Subject: [PATCH 62/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 74216f8af..61a3ce453 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -20,7 +20,8 @@ "example", "ideas", "infra", - "maintenance" + "maintenance", + "review" ] } ], From 50b197dd31a0d4464fdaecd7d9be176086426f60 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:55:44 +0000 Subject: [PATCH 63/68] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ef9a6dad..bfde05e0a 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Greg Lucas
Greg Lucas

💻 📖 🤔 🚇 🚧 👀 Tenzin Choedon
Tenzin Choedon

💻 🤔 🚇 💡 🚧 👀 - Sean Hoyt
Sean Hoyt

💻 🤔 🚇 + Sean Hoyt
Sean Hoyt

💻 🤔 🚇 👀 Gabriel M.
Gabriel M.

💻 🤔 🚇 👀 Matthew Bourque
Matthew Bourque

💻 📖 🤔 🚇 👀 Maxine Hartnett
Maxine Hartnett

💻 🤔 🚇 👀 📖 From da792fe84c012294f2d88498472f35121e216d04 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:55:45 +0000 Subject: [PATCH 64/68] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2596beab8..ed3580dd1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -43,7 +43,8 @@ "contributions": [ "code", "ideas", - "infra" + "infra", + "review" ] }, { From 31f33f9445b47e058960fa98171e6458d41edc59 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Tue, 8 Aug 2023 08:59:19 -0600 Subject: [PATCH 65/68] Fixed typo --- docs/source/development/style_guide/versioning.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/development/style_guide/versioning.rst b/docs/source/development/style_guide/versioning.rst index 5dc49d741..a7322b97b 100644 --- a/docs/source/development/style_guide/versioning.rst +++ b/docs/source/development/style_guide/versioning.rst @@ -34,7 +34,7 @@ IMAP data products are versioned with the convention ``vXX.YY``, where: Version numbers are specific to an instrument. In other words, each IMAP instrument has their own version number that is only updated when that instrument's algorithm is changed, or that instrument's data are reprocessed. The version is -updated independently of the other IMA1P instruments. +updated independently of the other IMAP instruments. This convention was discussed and decided on in `this GitHub issue -`_. \ No newline at end of file +`_. From c4468ffb2feb18c60fae829a35a9c8aa5ff0d8c9 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Thu, 28 Sep 2023 10:55:52 -0600 Subject: [PATCH 66/68] Added workflow to uploading release to PyPI --- .github/workflows/release.yml | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..24157bf23 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,66 @@ +name: Build and upload to PyPI + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }} + cancel-in-progress: true + +# (Temporary) To test this, trigger on pull request +on: [push, pull_request] + +#on: +# release: +# types: +# - published + +jobs: + + build_sdist: + name: Build source distribution + runs-on: ubuntu-latest + outputs: + SDIST_NAME: ${{ steps.sdist.outputs.SDIST_NAME }} + + steps: + - uses: actions/checkout@v4 + with: + # We need the full history to generate the proper version number + fetch-depth: 0 + + - uses: actions/setup-python@v4 + name: Install Python + with: + python-version: '3.11' + + - name: Install dependencies + run: python -m pip install build twine + + - name: Build sdist + id: sdist + run: | + python -m build --sdist + # Get the name of the build sdist file for later use + echo "SDIST_NAME=$(ls -1 dist)" >> $GITHUB_OUTPUT + + - name: Check README rendering for PyPI + run: twine check dist/* + + - name: Upload sdist result + uses: actions/upload-artifact@v3 + with: + name: sdist + path: dist/*.tar.gz + if-no-files-found: error + + pypi-publish: + name: Upload release to PyPI + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/imap_processing + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: + # retrieve your distributions here + + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@v1.8.10 \ No newline at end of file From e6915fd1dde26d4b58c0aaafcb65e8ea2c1fc3b2 Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Thu, 28 Sep 2023 10:59:17 -0600 Subject: [PATCH 67/68] Fixed indentation, added step to download sdist --- .github/workflows/release.yml | 61 +++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 24157bf23..fbd3b47c0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,36 +20,36 @@ jobs: outputs: SDIST_NAME: ${{ steps.sdist.outputs.SDIST_NAME }} - steps: - - uses: actions/checkout@v4 - with: - # We need the full history to generate the proper version number - fetch-depth: 0 + steps: + - uses: actions/checkout@v4 + with: + # We need the full history to generate the proper version number + fetch-depth: 0 - - uses: actions/setup-python@v4 - name: Install Python - with: - python-version: '3.11' + - uses: actions/setup-python@v4 + name: Install Python + with: + python-version: '3.11' - - name: Install dependencies - run: python -m pip install build twine + - name: Install dependencies + run: python -m pip install build twine - - name: Build sdist - id: sdist - run: | - python -m build --sdist - # Get the name of the build sdist file for later use - echo "SDIST_NAME=$(ls -1 dist)" >> $GITHUB_OUTPUT + - name: Build sdist + id: sdist + run: | + python -m build --sdist + # Get the name of the build sdist file for later use + echo "SDIST_NAME=$(ls -1 dist)" >> $GITHUB_OUTPUT - - name: Check README rendering for PyPI - run: twine check dist/* + - name: Check README rendering for PyPI + run: twine check dist/* - - name: Upload sdist result - uses: actions/upload-artifact@v3 - with: - name: sdist - path: dist/*.tar.gz - if-no-files-found: error + - name: Upload sdist result + uses: actions/upload-artifact@v3 + with: + name: sdist + path: dist/*.tar.gz + if-no-files-found: error pypi-publish: name: Upload release to PyPI @@ -59,8 +59,13 @@ jobs: url: https://pypi.org/p/imap_processing permissions: id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: - # retrieve your distributions here + - name: Download sdist + uses: actions/download-artifact@v3 + with: + name: sdist + path: dist - - name: Publish package distributions to PyPI - uses: pypa/gh-action-pypi-publish@v1.8.10 \ No newline at end of file + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@v1.8.10 \ No newline at end of file From 690038f65f96a9c8a62eae89e038ba9d034942ad Mon Sep 17 00:00:00 2001 From: Matthew Bourque Date: Thu, 28 Sep 2023 11:08:35 -0600 Subject: [PATCH 68/68] Workflow now triggers only on published release --- .github/workflows/release.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fbd3b47c0..8beee539b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,13 +4,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }} cancel-in-progress: true -# (Temporary) To test this, trigger on pull request -on: [push, pull_request] - -#on: -# release: -# types: -# - published +on: + release: + types: + - published jobs: