Development processes¶
For software development purposes alexandria3k can also be installed and used through its Github repository, rather than as a Python package.
Installation¶
git clone https://github.com/dspinellis/alexandria3k.git
cd alexandra3k/src
pipenv install
Development environment¶
Perform the following steps for setting up a virtual environment with the required development dependencies.
# While in alexandria3k/src directory
# Install development dependencies
pipenv install --dev
# Launch a shell in the virtual environment
pipenv shell
You can then run the command-line version from the source distribution on the top-level directory as follows:
bin/a3k --help
Continuous integration¶
GitHub actions are used for running unit tests, linting, verifying the code’s format, as well as building the package and the documentation when a new commit is pushed to GitHub. Before doing so, it’s advisable to perform these actions locally, as detailed in the following sections. In addition, testing, formatting, and linting can be easilly configured to be run as a fast Git pre-commit hook by running the following commands at the top-level directory.
printf '#!/bin/sh\nbin/pre-commit\n' >.git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Debugging and logging¶
Much of the alexandria3k code is executed by means of callbacks
through the SQLite apsw module.
This makes it difficult to trace and debug.
The liberal use of print
statements is your friend.
In addition, alexandria3k offers many debug options,
which you should be using for troubleshooting.
Run a3k --help
to see which options are available.
Testing¶
Python unit and integration tests¶
# While in the top-level directory
python3 -m unittest discover -s .
Code formatting¶
# While in the top-level directory
find src -name '*.py' | xargs black -l 79
Linting¶
# While in the top-level directory
find src -name '*.py' | xargs python -m pylint --rcfile .pylintrc
Plugin documentation¶
When data source or processing plugins are added the Python API documentation must be updated as follows.
# While in the top-level directory
bin/update-python-api
For users on MacOS, this might require installing the GNU sed package.
Application examples documentation¶
When new application examples are added in the examples
directory
documentation must be updated as follows.
# While in the top-level directory
bin/update-app-eg
This requires an installed version of Pandoc.
Database schema diagrams¶
After the database schema has changed, its relational diagrams in the documentation must be updated as follows.
# While in the top-level directory
bin/update-schema
This requires an installed version of the GraphViz dot command.
Building¶
# While in the top-level directory
hatch build dist/
This will result in built files being placed in the dist
directory.
Documentation building¶
The process for converting the documentation into HTML and a Unix man page is documented in the installation instructions.
Adding a new data source¶
Adding a new data source to alexandria3k involves the addition of a new plugin, as described in Plugin development.