Contributing#

Bug reports and feature requests#

Bugs and new feature requests can be submitted to the issue tracker on GitHub. See this StackOverflow post for tips on how to craft a helpful bug report.

Adding new data sources#

Note

wags-tails is intended to remain dependency-light to enable broad usage across our projects. If fetching new data requires adding additional dependencies, strong consideration should be given to whether it should be stood up as a CustomData subclass in the downstream library, instead of being added directly to wags-tails.

Generally, data classes for versioned data should inherit from DataSource and must, at minimum, implement two instance methods, _get_latest_version() and _download_data(), and two instance attributes, _src_name and _filetype. Data supplied via GitHub release should be implemented as a GitHubDataSource and also supply a _repo attribute, but may not need to reimplement _get_latest_version(). Unversioned data (i.e. a data object that is static or doesn’t ever need to be updated) can be implemented as an UnversionedDataSource, which also obviates the need to define a _get_latest_version() method.

Development setup#

Clone the repository:

git clone https://github.com/genomicmedlab/wags-tails
cd wags-tails

Then initialize a virtual environment:

python3 -m virtualenv venv
source venv/bin/activate
python3 -m pip install -e '.[dev,tests,docs]'

We use pre-commit to run conformance tests before commits. This provides checks for:

  • Code format and style

  • Added large files

  • AWS credentials

  • Private keys

Before your first commit, run:

pre-commit install

Style#

Code style is managed by Ruff, and should be checked via pre-commit hook before commits. Final QC is applied with GitHub Actions to every pull request.

Tests#

Tests are executed with pytest:

pytest

Documentation#

The documentation is built with Sphinx, which is included as part of the docs dependency group. Navigate to the docs/ subdirectory and use make to build the HTML version:

cd docs
make html

See the Sphinx documentation for more information.