Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, Built on top of FastAPI
Can be found here
This project can be installed as follows:
Install the core.
pip install orchestrator-coreCreate a postgres database:
createuser -sP nwa
createdb orchestrator-core -O nwaWhen using multiple workers, you will need a redis server for live updates with websockets.
By default it will use memory which works with only one worker.
export WEBSOCKET_BROADCASTER_URL="memory://"For the redis connection you need to set the env variable with the connection url.
export WEBSOCKET_BROADCASTER_URL="redis://localhost:6379"Websockets can also be turned off with:
export ENABLE_WEBSOCKETS=FalseIf you want to use pickle for CACHE serialization you will need to set the CACHE_HMAC_SECRET:
export CACHE_HMAC_SECRET="SOMESECRET"NOTE: The key can be any length. However, the recommended size is 1024 bits.
Create a main.py file.
from orchestrator import OrchestratorCore
from orchestrator.cli.main import app as core_cli
from orchestrator.settings import AppSettings
app = OrchestratorCore(base_settings=AppSettings())
if __name__ == "__main__":
core_cli()OrchestratorCore comes with a graphql interface that can to be registered after you create your OrchestratorApp.
If you add it after registering your SUBSCRIPTION_MODEL_REGISTRY it will automatically create graphql types for them.
More info can be found in docs/architecture/application/graphql.md
example:
from orchestrator import OrchestratorCore
from orchestrator.settings import AppSettings
app = OrchestratorCore(base_settings=AppSettings())
# register SUBSCRIPTION_MODEL_REGISTRY
app.register_graphql()Initialize the migration environment.
PYTHONPATH=. python main.py db init
PYTHONPATH=. python main.py db upgrade headsProfit :)
Authentication and authorization are default enabled, to disable set OAUTH2_ACTIVE and OAUTH2_AUTHORIZATION_ACTIVE to False.
uvicorn --reload --host 127.0.0.1 --port 8080 main:appVisit http://127.0.0.1:8080/api/redoc to view the api documentation.
To add features to the repository follow the following procedure to setup a working development environment.
Install the project and its dependencies to develop on the code.
python3 -m venv venv
source venv/bin/activate
pip install flit!!! danger
Make sure to use the flit binary that is installed in your environment. You can check the correct
path by running
shell which flit
To be sure that the packages will be installed against the correct venv you can also prepend the python interpreter that you want to use:
flit install --deps develop --symlink --python venv/bin/pythonRun the unit-test suite to verify a correct setup.
createuser -sP nwa
createdb orchestrator-core-test -O nwapytest test/unit_testsor with xdist:
pytest -n auto test/unit_testsIf you do not encounter any failures in the test, you should be able to develop features in the orchestrator-core.
If you are working on a project that already uses the orchestrator-core and you want to test your new core features
against it, you can use some flit magic to symlink the dev version of the core to your project. It will
automatically replace the pypi dep with a symlink to the development version
of the core and update/downgrade all required packages in your own orchestrator project.
python - m venv venv
source venv/bin/activate
pip install flitflit install --deps develop --symlink --python /path/to/a/orchestrator-project/venv/bin/pythonSo if you have the core and your own orchestrator project repo in the same folder and the main project folder is
orchestrator and you want to use relative links, this will be last step:
flit install --deps develop --symlink --python ../orchestrator/venv/bin/pythonWhen your PR is accepted you will get a version number.
You can do the necessary change with a clean, e.g. every change committed, branch:
bumpversion patch --new-version 0.4.1-rc3When you would like to change the core database schema, execute the following steps.
- Create the new model
orchestrator/database/models.py cd orchestrator/migrationsalembic revision --autogenerate -m "Name of the migratioin"