Contributing a Package
This guide demonstrates how to bundle your own custom Expectations, Metrics, and Profilers into an official Great Expectations contributor package.
Prerequisites: This how-to guide assumes you have:
- Completed the Getting Started Tutorial
- Set up your dev environment
- Created a Custom Expectation
- Created an account on PyPi
Steps
1. Install the
great_expectations_contrib
CLI Tool
To streamline the process of contributing a package to Great Expectations, we've developed a CLI tool to abstract away some of the complexity and help you adhere to our codebases' best practices. Please utilize the tool during your development to ensure that your package meets all of the necessary requirements.
To install the tool, first ensure that you are in the
root of the great_expectations
codebase:
cd contrib/cli
Next, use pip to install the CLI tool:
pip install -e great_expectations_contrib
You can verify your installation by running the following and confirming that a help message appears in your terminal:
great_expectations_contrib
great_expectations_contrib
is designed to
fulfill three key tasks:
- Initialize your package structure
- Perform a series of checks to determine the validity of your package
- Publish your package to PyPi for you and others to use
2. Initialize a project
Once the CLI tool is enabled, we need to intialize an empty package.
To do so, go ahead and run:
great_expectations_contrib init
This will prompt you to answer a number of questions, such as:
- The name of your package
- What your package is about
- Your GitHub and PyPi usernames
The answers to these questions will be leveraged when publishing your package. Upon completing the required prompts, you'll receive a confirmation message and be able to view your package in its initial state.
To access your configured package, run the following:
cd <PACKAGE_NAME>
tree
Your file structure should look something like this:
.
├── LICENSE
├── README.md
├── assets
├── package_info.yml
├── requirements.txt
├── setup.py
├── tests
│ ├── __init__.py
│ ├── expectations
│ │ └── __init__.py
│ ├── metrics
│ │ └── __init__.py
│ └── profilers
│ └── __init__.py
└── <YOUR_PACKAGE_SOURCE_CODE>
├── __init__.py
├── expectations
│ └── __init__.py
├── metrics
│ └── __init__.py
└── profilers
└── __init__.py
To ensure consistency with other packages and the rest of the Great Expectations ecosystem, please maintain this general structure during your development.
3. Contribute to your package
Now that your package has been initialized, it's time to get coding!
You'll want to capture any dependencies in your
requirements.txt
, validate your code in
tests
, detail your package's
capabilities in README.md
, and update any
relevant publishing details in setup.py
.
If you'd like to update your package's
metadata or assign code owners/domain experts, please
follow the instructions in
package_info.yml
.
As you iterate on your work, you can check your progress using:
great_expectations_contrib check
This command will run a series of checks on your package, including:
- Whether or not your code is linted/formatted properly
- Whether or not you've type annotated function sigantures
- Whether or not your Expectations are properly documented
- And more!
Using great_expectations_contrib
as part
of your development loop will help you keep on track
and provide you with a checklist of necessary items to
get your package across the finish line!
4. Publish your package
Once you've written your package, tested its behavior, and documented its capabilities, the final step is to get your work published.
The CLI tool wraps around twine
and
wheel
, allowing you to run:
great_expectations_contrib publish
As long as you've passed the necessary checks, you'll be prompted to provide your PyPi username and password, and your package will be published!
Congratulations!
🎉 You've just
published your first Great Expectations
contributor package! 🎉
5. Contribution (Optional)
Your package can also be submitted as a contribution to the Great Expectations codebase, under the same Maturity Level requirements as Custom Expectations.