This is the source code of Message in a Bottle application, self project of Advanced Software Engineering course, University of Pisa.
- The squad id is 9
- The team leader is Francesco Kotopulos De Angelis
Name and Surname | |
---|---|
Federico Bernacca | f.bernacca@studenti.unipi.it |
Paola Petri | p.petri1@studenti.unipi.it |
Nicolò Pierami | n.pierami@studenti.unipi.it |
Francesco Kotopulos De Angelis | f.kotopulosdeange@studenti.unipi.it |
Manfredo Facchini | m.facchini1@studenti.unipi.it |
To setup the project initially you have to run these commands inside the project's root.
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.dev.txt
To run the project you have to setup the flask environment, you can do it by executing the following command:
export FLASK_ENV=<environment-name>
and now you can run the application
flask run
WARNING: the static contents are inside the directory nginx/static, so if you want to run application without nginx you have to copy the static directory inside mib folder.
The available environments are:
- debug
- development
- testing
- production
If you want to run the application you have to startup the redis instance, using the command:
cp env_file_example env_file
export FLASK_ENV=development
flask run
Each time you start a new terminal session, you have to set up all the environment variables that projects requires. When the variables number increases, the procedures needed to run the project becomes uncomfortable.
To solve this problem we have introduced the python-dotenv dependency,
but only for development purposes.
You can create a file called .env
that will be interpreted each time
that you run the python project.
Inside .env
file you can store all variables that project requires.
The .env
file MUST NOT be added to repository and must kept
local. You can find an example with .env-example
file.
Each environment requires its dependency. For example
production
env does not require the testing frameworks.
Also to keep the docker image clean and thin we have
to split the requirements in 2 files.
requirements.txt
is the base file.requirements.dev.txt
extends base file and it contains all development requirements, for example pytest.requirements.prod.txt
extends base file and it contains the production requirements, for example gunicorn and psycopg2.
IMPORTANT: the Docker image uses the only the production requirements.
To run all the tests, once downloaded, execute the following command:
run all microservices in their folder:
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.dev.txt
export FLASK_ENV=development
bash run.sh
then in this folder:
python -m pytest
You can also specify one or more specific test files, in order to run only those specific tests. In case you also want to see the overall coverage of the tests, execute the following command:
python -m pytest --cov=mib
In order to know what are the lines of codes which are not covered by the tests, execute the command:
python -m pytest --cov-report term-missing
Nginx will serve static contents directly and will use gunicorn to serve app pages from flask wsgi. You can start gunicorn locally with the command
gunicorn --config gunicorn.conf.py wsgi:app
WARNING gunicorn it's not able to read
the .env files, so you have to export the variable, for
example by issuing the command source .env
.
To run services with docker-compose up
, first you
have to configure the environment variables
inside the env_file, and specify it with the parameter --env-file
.
An example of env_file is added to repository and it's called
env_file_example.
WARNING: please do not track your env_file!
The complete command to run this service with docker is the following:
docker-compose --env-file <your-env-file> up
We have created a specific documentation file for nginx-orchestrator