Skip to content

Commit

Permalink
Upgrade python and django versions
Browse files Browse the repository at this point in the history
  • Loading branch information
brunomichetti committed Sep 20, 2024
1 parent bdd2d0d commit e609a2c
Show file tree
Hide file tree
Showing 13 changed files with 508 additions and 1,296 deletions.
127 changes: 53 additions & 74 deletions .github/workflows/drip-django.yaml
Original file line number Diff line number Diff line change
@@ -1,85 +1,64 @@
name: Django Drip Campaigns
name: Django Drips Tests and Coverage

on: [push, pull_request]
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop

jobs:
build:
test:
runs-on: ubuntu-latest

strategy:
matrix:
include:
# python 3.4
- python-version: "3.5"
django-version: "2.2"
# python 3.6
- python-version: "3.6"
django-version: "2.2"
- python-version: "3.6"
django-version: "3.2"
# python 3.7
- python-version: "3.7"
django-version: "2.2"
- python-version: "3.7"
django-version: "3.2"
# python 3.8
- python-version: "3.8"
django-version: "2.2"
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
django-version: ["4.2", "5.0"]
# Exclude incompatible combinations (if Django 5.0 does not support older Python versions)
exclude:
- python-version: "3.8"
django-version: "3.2"
- python-version: "3.8"
django-version: "4.0"
# python 3.9
- python-version: "3.9"
django-version: "2.2"
django-version: "5.0"
- python-version: "3.9"
django-version: "3.2"
- python-version: "3.9"
django-version: "4.0"
# pypy3
- python-version: "pypy3"
django-version: "2.2"
- python-version: "pypy3"
django-version: "3.2"
runs-on: ubuntu-latest
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
django-version: "5.0"

steps:
- uses: actions/checkout@v2
# Checkout the repository
- name: Checkout code
uses: actions/checkout@v3

# Set up the Python environment based on the matrix versions
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

# Install dependencies from both base and test requirements
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install django==${{ matrix.django-version }}
pip install -r base-requirements.txt
pip install -r test-requirements.txt
# Install coverage.py for code coverage analysis
- name: Install coverage codeclimate
run: |
pip install codeclimate-test-reporter
- name: Set up Python version ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
# Run tests and generate coverage report
- name: Run tests and generate coverage report
run: |
coverage run -m pytest
coverage report
coverage xml
- name: Installing resources
run: |
pip install --upgrade pip==20.0.2
pip install pipenv
- name: Installing requirements pipenv
run: |
pipenv install --dev
- name: Installing Django version ${{ matrix.django-version }}
run: |
pip install Django==${{ matrix.django-version }}
- name: Checking PEP8 code style
run: |
pipenv run flake8 --count
- name: Checking Black code formatter
run: |
pipenv run black . --check
- name: Check typing
run: |
pipenv run mypy --namespace-packages --explicit-package-bases --ignore-missing-imports --no-warn-unused-ignores .
- name: Running tests
run: |
pipenv run coverage run -m pytest --ds=testsettings
- name: Checking coverage
run: |
pipenv run coverage report --fail-under=90 -m
pipenv run coverage xml
- name: Setup Code Climate test-reporter
run: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
./cc-test-reporter before-build
./cc-test-reporter after-build --coverage-input-type coverage.py --exit-code $?
# Upload coverage report to Code Climate
- name: Upload coverage to Code Climate
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
run: |
codeclimate-test-reporter < coverage.xml
107 changes: 94 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,22 +1,103 @@
*.pyc
MANIFEST
#pyenv
.python-version

dist/
.tox/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
docs/_build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.idea/
.installed.cfg
*.egg
MANIFEST

sqlite.db
settings.py
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

env*
# Installer logs
pip-log.txt
pip-delete-this-directory.txt

__pycache__
# Virtualenv
# If you use a virtualenv, it's better to ignore its directory.
venv/
ENV/
env/
.venv/
.pyenv/

*DS_Store
# tox
.tox/
.cache/
.coverage
nosetests.xml
coverage.xml
*.cover
.hypothesis/

.vscode
# mypy
.mypy_cache/
.dmypy.json
dmypy.json

#pyenv
.python-version
# Pytest cache
.pytest_cache/

# Django specific
*.log
db.sqlite3
media/
staticfiles/

# Ignore migrations files (optional, you might want to track migrations in OSS)
# **/migrations/

# Ignore Django secret key file (if it exists)
.env
.env.*

# celery beat schedule file
celerybeat-schedule

# macOS
.DS_Store

# System files
Thumbs.db
desktop.ini

# Jupyter Notebook
.ipynb_checkpoints/

# IDEs
.vscode/
.idea/
*.sublime-workspace
*.sublime-project

# Documentation artifacts
docs/_build/

# SQLite
sqlite.db
45 changes: 45 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,51 @@ People _love_ thorough bug reports. I'm not even kidding.
- ### How is this different from what you are currently doing?
- ### Possible implementation

## How to develop locally and run the tests

We recommend you to use:

- [pyenv](https://github.com/pyenv/pyenv): To easily install and manage different versions of Python.
- [pipenv](https://pipenv.pypa.io/en/latest/): To create and manage Python virtual environments.

The Python version we recommend to develop with: The latest (currently 3.12) but avoiding (if possible) to use elements
that are exclusively from that version and don't work in previous versions. This is because we want to be compatible
with older versions of Python.

### Python versions we are currently testing (Sept, 2024)

- 3.8.19
- 3.9.19
- 3.10.14
- 3.11.9
- 3.12.4

### Step by step to run the tests

1. Install with pyenv the different versions of Python, so you can use the latest to develop, and the other ones to
run the tests and check that the compatibility with older versions continues.
- `pyenv install <python version>`
- Run this for each version.
2. Go to the project folder in the terminal.
3. Set the versions of python to be locally available in the folder:
- `pyenv local 3.8.19 3.9.19 3.10.14 3.11.9 3.12.4`
- This will create a gitignored file called `.python-version` listing these versions.
4. Create the virtual environment using the latest version:
- `pipenv install --python 3.12.4`
- This will create and install in it the base and dev requirements. You can check this on the Pipfile.
5. Enter the virtual environment:
- `pipenv shell`
6. Run the tests:
- `pytest .`
- They should pass without errors.
7. Now run the tox command that will run the tests using different versions of python:
- `tox`
- This will run the tests with different Python versions using the `tox.ini` file.
- It will install the base requirements from the `install_requires` list in the `setup.py` file, and the dev requirements
from the `test-requirements.txt` file that has the list of the needed dev libraries.
- You will see the tests execution for each version of Python.
- You can run `tox -v` to see more details.

## Use a Consistent Coding Style

I'm again borrowing these from [Rootstrap Tech Guides](https://github.com/rootstrap/tech-guides/tree/master/python)
Expand Down
74 changes: 16 additions & 58 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -1,66 +1,24 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
django = "==4.2.16"
apscheduler = "==3.10.4"
celery = "==5.4.0"
typing-extensions = "==4.12.2"

[dev-packages]
appnope = "==0.1.2"
asgiref = "==3.5.2"
astroid = "==2.5.1"
autopep8 = "==1.5.6"
backcall = "==0.2.0"
black = "==22.3.0"
decorator = "==4.4.2"
docutils = "==0.16"
coverage = "==5.5"
factory-boy = "==3.2.1"
flake8 = "==4.0.1"
flake8-isort = "==4.1.1"
importlib-metadata = "==3.7.3"
ipdb = "==0.13.7"
ipython = "==8.4.0"
isort = "==5.7.0"
jedi = "==0.18.0"
lazy-object-proxy = "==1.5.2"
mccabe = "==0.6.1"
parso = "==0.8.1"
pexpect = "==4.8.0"
pickleshare = "==0.7.5"
prompt-toolkit = "==3.0.17"
ptyprocess = "==0.7.0"
pycodestyle = "==2.8.0"
pyflakes = "==2.4.0"
pylint = "==2.7.2"
pytz = "==2021.1"
six = "==1.15.0"
sqlparse = "==0.4.2"
toml = "==0.10.2"
traitlets = "==5.0.5"
typed-ast = "==1.4.2"
wcwidth = "==0.2.5"
wrapt = "==1.12.1"
zipp = "==3.4.1"
ipython_genutils = "==0.2.0"
Jinja2 = "==2.11.3"
MarkupSafe = "==1.1.1"
mypy = "==0.942"
pre-commit = "==2.18.1"
Pygments = "==2.8.1"
sphinx = "==3.5.2"
sphinxcontrib-django = "==0.5.1"
twine = "==3.4.1"
sphinx-rtd-theme = "==0.5.1"
django-stubs = "==1.9.0"
types-six = "1.16.16"
pytest = "==7.1.1"
pytest-sugar = "==0.9.4"
pytest-django = "==4.5.2"
pytest = "==8.3.3"
pytest-sugar = "==1.0.0"
pytest-django = "==4.9.0"
pytest-celery = "==0.0.0"

[packages]
Django = "==3.2.15"
apscheduler = "==3.7.0"
celery = "==5.2.2"
faker = "==29.0.0"
factory-boy = "==3.3.1"
tox = "==4.20.0"
coverage = "==4.0.3"

[requires]
python_version = "3.8"
python_version = "3.12"
python_full_version = "3.12.4"
Loading

0 comments on commit e609a2c

Please sign in to comment.