We will be glad to receive your pull requests (PRs) and issues for adding new features if you are missing something. We always look forward to your contributions to Chatsky.
All PRs are reviewed by Chatsky developers team. In order to make the job of reviewing easier and increase the chance that your PR will be accepted, please add a short description with information about why this PR is needed and what changes will be made. Please use the following rules to write the names of branches and commit messages.
We hope that you adhere to the following format.
We ask that you adhere to the following commit message format.
We use poetry
and poethepoet
as handy automation tools, which reads pyproject.toml
to get specification for commands.
poetry
is a tool for command running automatization. Usage signature of the poetry
is poetry run poe COMMAND
.
If your environment does not support poetry
, it can be installed as a regular python package with pip install poetry
.
poethepoet
will be automatically installed upon installation of devel
dependency group.
We suggest using a linux-based platform for addon development.
While the repository can be cloned to any platforms that can run python
,
the docker
functionality will not be available for Windows out of the box.
The most essential part is setting up the virtual environment.
poetry
automatically creates and manages it upon any command execution.
By default, it will try using current virtual environment if there is any in the current directory or it will create a new one.
You can display information about the current environment using poetry env info
command.
You can also switch to system-wide python environment with poetry env use system
command.
The following command creates a virtual environment dir and installs all the dependencies, which are required for development.
poetry install --with lint,test,devel,tutorials,docs --all-extras
The environment will be activated automatically.
If you want to delete all the virtual environments, run
poetry env remove --all
We use poetry.lock
to ensure that all builds with the same lock file have the same 3rd-party library versions.
This lets us know whether workflow fails due to our part or because a dependency update breaks something.
In order to update versions specified in poetry.lock
, run
poetry update
Assuming you use reStructuredText (reST) format docstrings to annotate your modules and objects. You can easily build the Sphinx documentation for your module by activating the virtual environment and then running
poetry run poe docs
Note that you'll need pandoc
installed on your system in order to build docs.
After that docs/build
dir will be created and you can open index file docs/build/index.html
in your browser of choice.
In your tutorials, you can use special expanding directives in markdown cells. They can help shorten the comments and avoid boilerplate code. The documentation links generated by the directives are always relative to the local documentation and verified during build.
-
%pip install {args}
This directive generates dependency installation cell, adds a comment and sets up "quiet" flag.It should be used in tutorials, like this:
# %pip install chatsky[...]
. -
%doclink({args})
This directive generates a documentation link. It supports 2 or three arguments and the generated link will look like:ARG1/ARG2#ARG3
.The first argument can be either
api
for Chatsky codebase,tutorial
for tutorials orguide
for user guides. -
%mddoclink({args})
This directive is a shortcut for%doclink
that generates a markdown format link instead.The generated link will be either
[ARG2](%doclink(ARG1,ARG2))
or[ARG3](%doclink(ARG1,ARG2,ARG3))
.
For style supporting we propose black
, which is a PEP 8 compliant opinionated formatter.
It doesn't take previous formatting into account. See more about black.
To format your code, run
poetry run poe format
We use black
, mypy
, flake8
as code style checkers and pytest
as unit-test runner.
To run unit-tests only, use
poetry run poe test_no_cov
To execute all tests, including integration with DBs and APIs tests, run
poetry run poe test_all
for successful execution of this command Docker
and docker compose
are required.
To do a quick sanity check without the need to up docker containers or wait for long tests, run
poetry run poe quick_test
There's also quick_test_coverage for quick htmlcov generation, though it is very likely to be incomplete due to deselection of some tests.
To make sure that the code satisfies only the style requirements, run
poetry run poe lint
And if it doesn't, to automatically fix whatever is possible with black
, run
poetry run poe format
Tests are configured via .env_file
.
Chatsky uses docker images for two purposes:
- Database images for integration testing.
- Images for statistics collection.
The first group can be launched via
docker compose --profile context_storage up
This will download and run all the databases (mysql
, postgres
, redis
, mongo
, ydb
).
The second group can be launched via
docker compose --profile stats up
This will download and launch Superset Dashboard, Clickhouse, OpenTelemetry Collector.
To launch both groups run
docker compose --profile context_storage --profile stats up
This will be done automatically when running poetry run poe test_all
.
You can get more info about poetry
commands by info
:
poetry run poe info