Development environment

Clone the project:

git clone git@github.com:accelero-cloud/appkernel.git

After cloning the project, you might want to setup a virtual environment:

cd appkernel
pip install --user pipenv
virtualenv -p python3 venv
source venv/bin/activate
pip install -e .
pip install pytest
pip install pytest-flask
pip install pylint
pip install flake8

Since astroid (a dependency of pylint) is not supporting python 3.7 yet, you might need to run the command from above if your pylint analysis ends with RuntimeError: generator raised StopIteration.

pip install --pre -U pylint astroid

Hint for PyCharm users

  • you might want to set the Project Interpreter (in the project settings) to the virtual environment just have created;
  • you might want to set to excluded your .idea, appkernel.egg-info and venv folder in case of using Pycharm;

Setup git hooks

The project features pre-commit and pre-push hooks for automatically running tests and pylint:

cd .git/hooks
ln -sf ../../hooks/pre-commit ./pre-commit
ln -sf ../../hooks/pre-push ./pre-push
cd ../..

Preparing test execution

Some tests require compiled translations:

cd tests
pybabel compile -d ./translations

And many others a working local mongo db:

docker create -v ~/data:/data/db -p 27017:27017 --name mongo mongo
docker start mongo

…where ~/data might be replaced by any folder where you would like to store database files;

Hint: the schema installation feature expects a MongoDB version min. 3.6. In case you have an older version you might need to upgrade your mongo image (docker pull mongo:latest).

Run the following command in the test folder:

pytest

Publish the project to PyPi

Make sure yuo have the latest twine version:

python3 -m pip install --upgrade twine

Make a test run:

python setup.py build -vf && python setup.py bdist_wheel
twine upload --repository-url https://test.pypi.org/legacy/ dist/*

Once we are ready we can upload the package the repo:

python setup.py build -vf && python setup.py bdist_wheel
twine upload dist/*

In case you have a ~/.pypirc you can use the shortcut names:

[distutils]
index-servers=
    pypi
    pypitest

[pypi]
#repository=https://pypi.python.org/pypi
username=user
password=pass

[pypitest]
#repository=https://testpypi.python.org/pypi
username=user
password=pass
twine upload -r pypitest dist/*

Migration to Python3

sudo apt install python3-pip
python -m pip install --upgrade pip
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 3
update-alternatives --list python
sudo pip install --upgrade pip
virtualenv -p /usr/bin/python3.6 venv3
source ./venv3/bin/activate
pip install pylint