=============================================
Configure for Local Debugging and Development
=============================================
This document describes how to set up the project for local debugging and development.
Prerequisites
-------------
- `Docker `_
- `Docker Compose `_
- `Pixi `_
Setup
-----
Clone the repository and ``cd`` into the project directory.
Create a pixi environment ``live_data_server``, containing all the dependencies
.. code-block:: python
pixi install
pixi shell
To deploy this application locally, you will need to set a number of environment variables,
for example (bash):
.. code-block:: bash
export DATABASE_NAME=livedatadb
export DATABASE_USER=livedatauser
export DATABASE_PASS=livedatapass
export DATABASE_HOST=db
export DATABASE_PORT=5432
export LIVE_PLOT_SECRET_KEY="secretKey"
# These need to be set for `pytest`,
# but are not used in the docker compose
export DJANGO_SUPERUSER_USERNAME=$DATABASE_USER
export DJANGO_SUPERUSER_PASSWORD=$DATABASE_PASS
*NOTES*:
- The ``DATABASE_PORT`` **must** be set to ``5432``, as Postgres is configured to listen on that port by default.
If you need to change the port, you will need to modify the ``docker-compose.yml`` file accordingly.
- It is recommended to save these variables into an ``.envrc`` file which can be managed by `direnv `_.
direnv will automatically load the variables when you ``cd`` into the project directory.
After the secrets are set, you can start the server with:
.. code-block:: bash
make docker/compose/local
This command will copy ``deploy/docker-compose.envlocal.yml`` into ``./docker-compose.yml`` before composing all the services.
| Run ``make help`` to learn about other macros available as make targets.
| For instance, ``make docker/pruneall`` will stop all containers, then remove all containers, images, networks, and volumes.
Testing
-------
After the setup, with the server running, you can test your setup with ``pytest``:
.. code-block:: bash
# run all tests
pytest
# or run a specific test
pytest tests/test_post_get.py
*NOTE:*
The environment variables ``DJANGO_SUPERUSER_USERNAME`` and ``DJANGO_SUPERUSER_PASSWORD`` are defined in the ``docker-compose.envlocal.yml`` file, but ``pytest`` does not read this file.
You must either have them exported to the shell where ``pytest`` is to be run, as described above, or modify the ``pytest`` command to include them, e.g.:
.. code-block:: bash
DJANGO_SUPERUSER_USERNAME=***** DJANGO_SUPERUSER_PASSWORD=***** pytest
API
---
I personally recommend using `Postman `_ when interacting with the api.
If you do, set the request body to ``form-data``!
Some relevant form-data field keys:
#. file
#. username
#. password
#. data_id