Contributing

Welcome to pydeltasnow contributor’s guide. This document focuses on getting you familiarized with the development processes, but other kinds of contributions are also appreciated. All users and contributors are expected to be open, inclusive, considerate, reasonable, and respectful.

Issue Reports

Bugs or general issues are recorded on the issue tracker. Please feel free to place an issue report if you encounter a problem.

Documentation Improvements

You can help improve the documentation by making it more readable and coherent, or by adding missing information and correcting mistakes.

When working on documentation changes in your local machine, you can compile them using tox:

tox -e docs

Code Contributions

The deltasnow model routines are implementetd in the core module. The utils module holds functions for data validation and missing value handling. The main module provides an interface to the deltaSNOW model with the swe_deltasnow() function.

Create an environment

Before you start coding, it is recommended to create an isolated virtual environment to avoid any problems with your installed Python packages. This can easily be done via either virtualenv:

virtualenv <PATH TO VENV>
source <PATH TO VENV>/bin/activate

or Miniconda:

conda create -n pydeltasnow python=3 six virtualenv pytest pytest-cov
conda activate pydeltasnow

Clone the repository

  1. Create an user account on GitHub if you do not already have one.

  2. Fork the project repository: click on the Fork button near the top of the page. This creates a copy of the code under your account on GitHub.

  3. Clone this copy to your local disk:

    git clone git@github.com:YourLogin/pydeltasnow.git
    
  4. Navigate to the folder to which git downloaded the repository:

    cd pydeltasnow
    
  5. You should run:

    pip install -U pip setuptools -e .
    

    in order to install pydeltasnow in editing mode and directly use your local changes.

Implement your changes

  1. Create a branch to hold your changes:

    git checkout -b my-feature
    

    and start making changes. Never work on the main branch.

  2. Start your work on this branch. Please include tests if you implement new functionality and add docstrings to new functions, modules and classes, especially if they are part of public APIs.

  3. Please check that your changes don’t break any unit tests with:

    tox
    

    (after having installed tox with pip install tox).

    You can also use tox to run several other pre-configured tasks in the repository. Try tox -av to see a list of the available checks.

  4. When you are done editing, use:

    git add <MODIFIED FILES>
    git commit
    

    to record your changes in git.

Submit your contribution

  1. If everything works fine, push your local branch to GitHub with:

    git push -u origin my-feature
    
  2. Go to the web page of your fork and click “Create pull request” to send your changes for review.

Troubleshooting

The following tips can be used when facing problems to build or test the package:

  1. Make sure to fetch all the tags from the upstream repository. The command git describe --abbrev=0 --tags should return the version you are expecting. If you are trying to run CI scripts in a fork repository, make sure to push all the tags. You can also try to remove all the egg files or the complete egg folder, i.e., .eggs, as well as the *.egg-info folders in the src folder or potentially in the root of your project.

  2. Sometimes tox misses out when new dependencies are added, especially to setup.cfg and docs/requirements.txt. If you find any problems with missing dependencies when running a command with tox, try to recreate the tox environment using the -r flag. For example, instead of:

    tox -e docs
    

    Try running:

    tox -r -e docs
    
  3. Make sure to have a reliable tox installation that uses the correct Python version (e.g., 3.7+). When in doubt you can run:

    tox --version
    # OR
    which tox
    

    If you have trouble and are seeing weird errors upon running tox, you can also try to create a dedicated virtual environment with a tox binary freshly installed. For example:

    virtualenv .venv
    source .venv/bin/activate
    .venv/bin/pip install tox
    .venv/bin/tox -e all
    
  4. Pytest can drop you in an interactive session in the case an error occurs. In order to do that you need to pass a --pdb option (for example by running tox -- -k <NAME OF THE FALLING TEST> --pdb). You can also setup breakpoints manually instead of using the --pdb option.

Maintainer tasks

Releases

If you are part of the group of maintainers and have correct user permissions on PyPI, the following steps can be used to release a new version for pydeltasnow:

  1. Make sure all unit tests are successful.

  2. Tag the current commit on the main branch with a release tag, e.g., v1.2.3.

  3. Push the new tag to the upstream repository, e.g., git push upstream v1.2.3

  4. Clean up the dist and build folders with tox -e clean (or rm -rf dist build) to avoid confusion with old builds and Sphinx docs.

  5. Run tox -e build and check that the files in dist have the correct version (no .dirty or git hash) according to the git tag. Also check the sizes of the distributions, if they are too big (e.g., > 500KB), unwanted clutter may have been accidentally included.

  6. Run tox -e publish -- --repository pypi and check that everything was uploaded to PyPI correctly.