Python package development¶
Python package development happens when you work on a single Python package (e.g. invenio-communities
). Either you are building a completely new package or
you are adding/modifying an existing package.
Prerequisites¶
Make sure you have already checked out the source code of the module(s) you want to work on.
Install¶
Once you got the source code, create a Python virtual environment and make an editable install of the Python package:
Note
mkvirtualenv
is a tool provided by virtualenv-wrapper to manage Python
virtualenvs. See Python virtual environments
cd ~/src/invenio-app-rdm
mkvirtualenv app-rdm
# opensearch2 only needed for certain modules
pip install -e ".[tests,opensearch2]"
For each module, you'll have to check what is the precise list of extras
you need to add (the tests,opensearch2
). If you don't add them,
you won't have all the tools needed for testing.
Run tests¶
Running the test is normally as simple as:
./run-tests.sh
The run-tests.sh
under the hood uses pytest to run
the tests. If the module needs services such as a database, cache or search index,
the script usually uses docker-services-cli
to automatically boot up
the required services
Note
docker-services-cli
may fail if you already have the services running.
Most notably, if have a InvenioRDM development instance running, the you
have to shut it down first before running tests.
Multiple packages¶
If you need to work on multiple packages at the same time - for instance
you could be adding a cross-cutting feature to invenio-communities
and
invenio-requests
at the same time, the installation is almost identical
to a single module:
First make sure you have the source code of both modules. Next, simply do editable installs of both:
mkvirtualenv communities
pip install -e "~/src/invenio-communities[tests,opensearch2]" \
-e "~/src/invenio-requests[tests,elasticsearch7]"
Application integration¶
See the section instance development for how to integrate your development versions in the InvenioRDM application.