Contributing guidelines

Codacy quality grade Codacy code coverage

Thanks for taking the time to contribute!

This project is simpler than most, so it’s a good place to start contributing to the open source community, even if you’re a newbie.

We are accepting these sorts of changes and requests:

We are not accepting things that should be done in your own wrapper code:

Reporting bugs and feature requests

We have different places to take issues by its category.

Bug Report

If you are reporting a bug or suspect a problem, please submit an issue with a detailed description of the problem + include steps to reproduce, code samples, and any reference materials.

🔧 Report bugs

Feature Request

For new features, submit an issue with the enhancement label.

💡 Request features

Project management

Development Environment (Quick Setup)


New to contributing?

Development Environment Setup

Windows Setup

  1. Install .NET SDK (8.0 or newer):

     winget install Microsoft.DotNet.SDK.8
     # Or download from https://dotnet.microsoft.com/download
    
  2. Clone and setup:

     git clone https://github.com/facioquo/stock-indicators-python.git
     cd stock-indicators-python
     python -m venv .venv
     .venv\Scripts\python -m pip install --upgrade pip
     .venv\Scripts\python -m pip install -e .
     .venv\Scripts\python -m pip install -r requirements-test.txt
    

macOS Setup

  1. Install .NET SDK (8.0 or newer):

     brew install dotnet-sdk
    
  2. Clone and setup:

     git clone https://github.com/facioquo/stock-indicators-python.git
     cd stock-indicators-python
     python -m venv .venv
     source .venv/bin/activate
     python -m pip install --upgrade pip
     python -m pip install -e .
     python -m pip install -r requirements-test.txt
    

Testing

Running Tests

Common commands (after activating .venv):

# lint and format
python -m ruff check .
python -m ruff format --check .

# type-check
python -m pyright

# run standard unit tests
python -m pytest

To run different types of tests:

You can also use the -svr A arguments with pytest to get more detailed output:

pytest -svr A

Performance benchmarking

Running the commands below in your console will produce benchmark performance data that we include on our documentation site.

# install dependencies
python -m pip install -r requirements-test.txt

# run performance tests
python -m pytest -m "performance"

Documentation

This site uses Jekyll construction with Front Matter. The documentation site is in the docs folder. Build the site locally to test that it works properly. See GitHub Pages documentation for initial setup instructions.

bundle install
bundle exec jekyll serve

# then open site on http://127.0.0.1:4000,
# or use `bundle exec jekyll serve -o -l` to auto-open, livereload

When adding or updating indicators:

Submitting changes

By submitting changes to this repo you are also acknowledging and agree to the terms in both the Developer Certificate of Origin (DCO) 1.1 and the Apache 2.0 license. These are standard open-source terms and conditions.

When ready, submit a Pull Request with a clear list of what you’ve done (read more about pull requests). Always write a clear log message for your commits. One-line messages are fine for most changes.

After a Pull Request is reviewed, accepted, and [squash] merged to main, we may batch changes before publishing a new package version to PyPI. Please be patient with turnaround time.

Code reviews and administration

If you want to contribute administratively, do code reviews, or provide general user support, we’re also currently seeking a few core people to help. Please contact us if interested.

Standards and design guidelines

Versioning

We use the setuptools_scm tool for semantic versioning. It detects the version number from git tag in the GitHub Actions build.

Type Format Description
Major x.-.- A significant deviation with major breaking changes.
Minor -.x.- A new feature, usually new non-breaking change, such as adding an indicator. Minor breaking changes may occur here and are denoted in the release notes.
Patch -.-.x A small bug fix, chore, or documentation change.

After one of our repository administrators creates a git tag on the main branch, reflecting the new version number, the PyPI deployment workflow will start. After the new package is published, they’ll publicly post the release record with automatically generated notes and other information.

License

License

This repository uses a standard Apache 2.0 open-source license. It enables open-source community development by protecting the project and contributors from certain legal risks while allowing the widest range of uses, including in closed source software. Please review the license before using or contributing to the software.

Contact info

Start a new discussion, ask a question, or submit an issue if it is publicly relevant. You can also direct message @daveskender.

Thanks, Dong-Geon Lee Dave Skender