mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-14 09:08:32 +00:00
Pin our Python dependencies using pip-tools
This commit is contained in:
parent
c00dc4e736
commit
b7e140fc84
9 changed files with 686 additions and 277 deletions
|
@ -6,15 +6,11 @@ install-dev-dependencies:
|
||||||
pip install -r requirements/dev.txt
|
pip install -r requirements/dev.txt
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
./python_dep_check.sh check && \
|
|
||||||
flake8 src tests ../premium/backend && \
|
flake8 src tests ../premium/backend && \
|
||||||
black . ../premium/backend --extend-exclude='/generated/' --check && \
|
black . ../premium/backend --extend-exclude='/generated/' --check && \
|
||||||
bandit -r --exclude src/baserow/test_utils src/ ../premium/backend/src/ \
|
bandit -r --exclude src/baserow/test_utils src/ ../premium/backend/src/ \
|
||||||
|| exit;
|
|| exit;
|
||||||
|
|
||||||
pip-clean-reinstall-and-freeze:
|
|
||||||
./python_dep_check.sh freeze
|
|
||||||
|
|
||||||
lint-python: lint
|
lint-python: lint
|
||||||
|
|
||||||
format:
|
format:
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# Bash strict mode: http://redsymbol.net/articles/unofficial-bash-strict-mode/
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Currently we only define our direct dependencies in requirements/base.txt and
|
|
||||||
# requirements/dev.txt. This means that pip figures out and resolves the versions of
|
|
||||||
# dependant libraries for us based on the constraints of our direct dependencies.
|
|
||||||
# This means a seemingly simple change to base.txt or dev.txt can result in important
|
|
||||||
# dependencies having their versions change under the hood with us being non the wiser.
|
|
||||||
#
|
|
||||||
# This file is a temporary solution and is used by our `make lint` command and a new
|
|
||||||
# file requirements/dev_frozen.txt to clearly show and enforce what exactly all of our
|
|
||||||
# python dependencies, direct and indirect are. Really we should switch away from just
|
|
||||||
# using pip to something like Poetry which has a lock file built in.
|
|
||||||
|
|
||||||
FROZEN_DEP_FILE="requirements/dev_frozen.txt"
|
|
||||||
|
|
||||||
if [ -t 0 ]; then
|
|
||||||
TPUTTERM=()
|
|
||||||
else
|
|
||||||
# if we are in a non-interactive environment set a default -T for tput so it doesn't
|
|
||||||
# crash
|
|
||||||
TPUTTERM=(-T xterm-256color)
|
|
||||||
fi
|
|
||||||
|
|
||||||
safe_tput(){
|
|
||||||
tput "${TPUTTERM[@]}" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
RED=$(safe_tput setaf 1)
|
|
||||||
GREEN=$(safe_tput setaf 2)
|
|
||||||
YELLOW=$(safe_tput setaf 3)
|
|
||||||
NC=$(safe_tput sgr0) # No Color
|
|
||||||
|
|
||||||
if [[ "${1:-}" == "check" ]]; then
|
|
||||||
FROZEN_DEPS=$(< "$FROZEN_DEP_FILE")
|
|
||||||
NEW_DEPS=$(pip freeze)
|
|
||||||
if [[ "$FROZEN_DEPS" != "$NEW_DEPS" ]]; then
|
|
||||||
echo "$RED Python dependencies have changed but $FROZEN_DEP_FILE " \
|
|
||||||
"has not been updated, please run$NC$GREEN make pip-clean-reinstall-and-freeze and commit " \
|
|
||||||
"$NC$RED so we can clearly see any changed python dependencies. See below " \
|
|
||||||
"for diff:${NC}"
|
|
||||||
diff <(echo "$FROZEN_DEPS" ) <(echo "$NEW_DEPS")
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "$GREEN No python dep changes detected $NC"
|
|
||||||
fi
|
|
||||||
elif [[ "${1:-}" == "freeze" ]]; then
|
|
||||||
if [ ! -d /baserow/venv ]; then
|
|
||||||
echo "Please run inside the backend docker container, couldn't find the venv."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
rm -rf /baserow/venv
|
|
||||||
python3 -m virtualenv /baserow/venv
|
|
||||||
. /baserow/venv/bin/activate
|
|
||||||
pip install -r requirements/base.txt
|
|
||||||
pip install -r requirements/dev.txt
|
|
||||||
pip freeze > "$FROZEN_DEP_FILE"
|
|
||||||
echo "$GREEN Successfully froze current python deps to $FROZEN_DEP_FILE $NC"
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "$YELLOW Supported arguments are check or freeze, unknown args provided. $NC"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
48
backend/requirements/README.md
Normal file
48
backend/requirements/README.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Readme
|
||||||
|
|
||||||
|
We use [pip-tools](https://github.com/jazzband/pip-tools) to manage our pip requirement
|
||||||
|
files.
|
||||||
|
|
||||||
|
## Base Requirements
|
||||||
|
`base.in` contains our non-dev requirements for our backend python environment and
|
||||||
|
`base.txt` is the corresponding pip requirements file generated by `pip-tools`:
|
||||||
|
```
|
||||||
|
pip-compile --output-file=base.txt base.in
|
||||||
|
```
|
||||||
|
We install the `base.txt` requirements into the [`baserow/backend`](../Dockerfile)
|
||||||
|
docker image. You can launch an environment using these images by running
|
||||||
|
`./dev.sh local restart --build`.
|
||||||
|
|
||||||
|
## Dev Requirements
|
||||||
|
`dev.in` contains our extra dev requirements on-top of `base.in`.
|
||||||
|
`dev.txt` is the corresponding pip requirements file generated by `pip-tools`:
|
||||||
|
```
|
||||||
|
pip-compile --output-file=dev.txt dev.in
|
||||||
|
```
|
||||||
|
We install the `dev.txt` requirements into the [`baserow/backend`](../Dockerfile)
|
||||||
|
docker image when built using the dev target (`docker build ... --target dev`). This
|
||||||
|
dev backend image is the one used when running `./dev.sh restart --build` etc.
|
||||||
|
|
||||||
|
## Common Operations
|
||||||
|
|
||||||
|
### Add a new base dependency
|
||||||
|
1. Add a line to `base.in` containing your new dependency
|
||||||
|
2. In the `backend lint` tab opened by running `./dev.sh --build`, or an active virtual
|
||||||
|
environment with `pip-tools` installed.
|
||||||
|
3. Ensure you are using python 3.7 if not using `./dev.sh --build`
|
||||||
|
4. `cd requirements`
|
||||||
|
5. Run `pip-compile --output-file=base.txt base.in`, review the changes to base.txt,
|
||||||
|
commit and push them to your MR.
|
||||||
|
|
||||||
|
### Add a new dev dependency
|
||||||
|
1. Add a line to `dev.in` containing your new dependency
|
||||||
|
2. In the `backend lint` tab opened by running `./dev.sh --build`, or an active virtual
|
||||||
|
environment with `pip-tools` installed.
|
||||||
|
3. Ensure you are using python 3.7 if not using `./dev.sh --build`
|
||||||
|
4. `cd requirements`
|
||||||
|
4. Run `pip-compile --output-file=dev.txt dev.in`, review the changes to dev.txt,
|
||||||
|
commit and push them to your MR.
|
||||||
|
|
||||||
|
### Upgrade an existing dependency
|
||||||
|
1. Change the version in the corresponding `.in` file.
|
||||||
|
2. Follow from step 2 above depending on which `.in` file you edited.
|
35
backend/requirements/base.in
Normal file
35
backend/requirements/base.in
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
Django==3.2.12
|
||||||
|
django-cors-headers==3.8.0
|
||||||
|
djangorestframework==3.13.1
|
||||||
|
drf-jwt==1.19.1
|
||||||
|
psycopg2==2.9.1
|
||||||
|
Faker==8.11.0
|
||||||
|
Twisted==22.1
|
||||||
|
gunicorn==20.1.0
|
||||||
|
uvicorn[standard]==0.15.0
|
||||||
|
requests==2.26.0
|
||||||
|
itsdangerous==2.0.1
|
||||||
|
Pillow==9.0.0
|
||||||
|
drf-spectacular==0.21.2
|
||||||
|
asgiref==3.4.1
|
||||||
|
channels==3.0.4
|
||||||
|
channels-redis==3.3.0
|
||||||
|
celery[redis]==5.2.3
|
||||||
|
django-redis==5.2.0
|
||||||
|
django-celery-email==3.0.0
|
||||||
|
advocate==1.0.0
|
||||||
|
zipp==3.5.0
|
||||||
|
unicodecsv==0.14.1
|
||||||
|
django-celery-beat==2.2.1
|
||||||
|
celery-redbeat==2.0.0
|
||||||
|
service-identity==21.1.0
|
||||||
|
regex==2021.8.3
|
||||||
|
cryptography==36.0.1
|
||||||
|
antlr4-python3-runtime==4.8.0
|
||||||
|
tqdm==4.62.3
|
||||||
|
boto3==1.20.38
|
||||||
|
django-storages==1.12.3
|
||||||
|
django-health-check==3.16.5
|
||||||
|
psutil==5.9.0
|
||||||
|
dj-database-url==0.5.0
|
||||||
|
redis==4.1.4
|
|
@ -1,35 +1,315 @@
|
||||||
Django==3.2.12
|
#
|
||||||
django-cors-headers==3.8.0
|
# This file is autogenerated by pip-compile with python 3.7
|
||||||
djangorestframework==3.13.1
|
# To update, run:
|
||||||
drf-jwt==1.19.1
|
#
|
||||||
psycopg2==2.9.1
|
# pip-compile --output-file=base.txt base.in
|
||||||
Faker==8.11.0
|
#
|
||||||
Twisted==22.1
|
|
||||||
gunicorn==20.1.0
|
|
||||||
uvicorn[standard]==0.15.0
|
|
||||||
requests==2.26.0
|
|
||||||
itsdangerous==2.0.1
|
|
||||||
Pillow==9.0.0
|
|
||||||
drf-spectacular==0.21.2
|
|
||||||
asgiref==3.4.1
|
|
||||||
channels==3.0.4
|
|
||||||
channels-redis==3.3.0
|
|
||||||
celery[redis]==5.2.3
|
|
||||||
django-redis==5.2.0
|
|
||||||
django-celery-email==3.0.0
|
|
||||||
advocate==1.0.0
|
advocate==1.0.0
|
||||||
zipp==3.5.0
|
# via -r base.in
|
||||||
unicodecsv==0.14.1
|
aioredis==1.3.1
|
||||||
django-celery-beat==2.2.1
|
# via channels-redis
|
||||||
celery-redbeat==2.0.0
|
amqp==5.1.0
|
||||||
service-identity==21.1.0
|
# via kombu
|
||||||
regex==2021.8.3
|
|
||||||
cryptography==36.0.1
|
|
||||||
antlr4-python3-runtime==4.8.0
|
antlr4-python3-runtime==4.8.0
|
||||||
tqdm==4.62.3
|
# via -r base.in
|
||||||
|
asgiref==3.4.1
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# channels
|
||||||
|
# channels-redis
|
||||||
|
# daphne
|
||||||
|
# django
|
||||||
|
# uvicorn
|
||||||
|
async-timeout==4.0.2
|
||||||
|
# via aioredis
|
||||||
|
attrs==21.4.0
|
||||||
|
# via
|
||||||
|
# automat
|
||||||
|
# jsonschema
|
||||||
|
# service-identity
|
||||||
|
# twisted
|
||||||
|
autobahn==22.2.2
|
||||||
|
# via daphne
|
||||||
|
automat==20.2.0
|
||||||
|
# via twisted
|
||||||
|
billiard==3.6.4.0
|
||||||
|
# via celery
|
||||||
boto3==1.20.38
|
boto3==1.20.38
|
||||||
django-storages==1.12.3
|
# via -r base.in
|
||||||
|
botocore==1.23.54
|
||||||
|
# via
|
||||||
|
# boto3
|
||||||
|
# s3transfer
|
||||||
|
cached-property==1.5.2
|
||||||
|
# via kombu
|
||||||
|
celery[redis]==5.2.3
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# celery-redbeat
|
||||||
|
# django-celery-beat
|
||||||
|
# django-celery-email
|
||||||
|
celery-redbeat==2.0.0
|
||||||
|
# via -r base.in
|
||||||
|
certifi==2021.10.8
|
||||||
|
# via requests
|
||||||
|
cffi==1.15.0
|
||||||
|
# via cryptography
|
||||||
|
channels==3.0.4
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# channels-redis
|
||||||
|
channels-redis==3.3.0
|
||||||
|
# via -r base.in
|
||||||
|
charset-normalizer==2.0.12
|
||||||
|
# via requests
|
||||||
|
click==8.0.4
|
||||||
|
# via
|
||||||
|
# celery
|
||||||
|
# click-didyoumean
|
||||||
|
# click-plugins
|
||||||
|
# click-repl
|
||||||
|
# uvicorn
|
||||||
|
click-didyoumean==0.3.0
|
||||||
|
# via celery
|
||||||
|
click-plugins==1.1.1
|
||||||
|
# via celery
|
||||||
|
click-repl==0.2.0
|
||||||
|
# via celery
|
||||||
|
constantly==15.1.0
|
||||||
|
# via twisted
|
||||||
|
cryptography==36.0.1
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# autobahn
|
||||||
|
# pyjwt
|
||||||
|
# pyopenssl
|
||||||
|
# service-identity
|
||||||
|
daphne==3.0.2
|
||||||
|
# via channels
|
||||||
|
deprecated==1.2.13
|
||||||
|
# via redis
|
||||||
|
dj-database-url==0.5.0
|
||||||
|
# via -r base.in
|
||||||
|
django==3.2.12
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# channels
|
||||||
|
# django-appconf
|
||||||
|
# django-celery-beat
|
||||||
|
# django-celery-email
|
||||||
|
# django-cors-headers
|
||||||
|
# django-health-check
|
||||||
|
# django-redis
|
||||||
|
# django-storages
|
||||||
|
# django-timezone-field
|
||||||
|
# djangorestframework
|
||||||
|
# drf-jwt
|
||||||
|
# drf-spectacular
|
||||||
|
django-appconf==1.0.5
|
||||||
|
# via django-celery-email
|
||||||
|
django-celery-beat==2.2.1
|
||||||
|
# via -r base.in
|
||||||
|
django-celery-email==3.0.0
|
||||||
|
# via -r base.in
|
||||||
|
django-cors-headers==3.8.0
|
||||||
|
# via -r base.in
|
||||||
django-health-check==3.16.5
|
django-health-check==3.16.5
|
||||||
|
# via -r base.in
|
||||||
|
django-redis==5.2.0
|
||||||
|
# via -r base.in
|
||||||
|
django-storages==1.12.3
|
||||||
|
# via -r base.in
|
||||||
|
django-timezone-field==4.2.3
|
||||||
|
# via django-celery-beat
|
||||||
|
djangorestframework==3.13.1
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# drf-jwt
|
||||||
|
# drf-spectacular
|
||||||
|
drf-jwt==1.19.1
|
||||||
|
# via -r base.in
|
||||||
|
drf-spectacular==0.21.2
|
||||||
|
# via -r base.in
|
||||||
|
faker==8.11.0
|
||||||
|
# via -r base.in
|
||||||
|
gunicorn==20.1.0
|
||||||
|
# via -r base.in
|
||||||
|
h11==0.13.0
|
||||||
|
# via uvicorn
|
||||||
|
hiredis==2.0.0
|
||||||
|
# via aioredis
|
||||||
|
httptools==0.2.0
|
||||||
|
# via uvicorn
|
||||||
|
hyperlink==21.0.0
|
||||||
|
# via
|
||||||
|
# autobahn
|
||||||
|
# twisted
|
||||||
|
idna==3.3
|
||||||
|
# via
|
||||||
|
# hyperlink
|
||||||
|
# requests
|
||||||
|
# twisted
|
||||||
|
importlib-metadata==4.11.2
|
||||||
|
# via
|
||||||
|
# click
|
||||||
|
# jsonschema
|
||||||
|
# kombu
|
||||||
|
# redis
|
||||||
|
importlib-resources==5.4.0
|
||||||
|
# via jsonschema
|
||||||
|
incremental==21.3.0
|
||||||
|
# via twisted
|
||||||
|
inflection==0.5.1
|
||||||
|
# via drf-spectacular
|
||||||
|
itsdangerous==2.0.1
|
||||||
|
# via -r base.in
|
||||||
|
jmespath==0.10.0
|
||||||
|
# via
|
||||||
|
# boto3
|
||||||
|
# botocore
|
||||||
|
jsonschema==4.4.0
|
||||||
|
# via drf-spectacular
|
||||||
|
kombu==5.2.4
|
||||||
|
# via celery
|
||||||
|
msgpack==1.0.3
|
||||||
|
# via channels-redis
|
||||||
|
ndg-httpsclient==0.5.1
|
||||||
|
# via advocate
|
||||||
|
netifaces==0.11.0
|
||||||
|
# via advocate
|
||||||
|
packaging==21.3
|
||||||
|
# via redis
|
||||||
|
pillow==9.0.0
|
||||||
|
# via -r base.in
|
||||||
|
prompt-toolkit==3.0.28
|
||||||
|
# via click-repl
|
||||||
psutil==5.9.0
|
psutil==5.9.0
|
||||||
dj_database_url==0.5.0
|
# via -r base.in
|
||||||
|
psycopg2==2.9.1
|
||||||
|
# via -r base.in
|
||||||
|
pyasn1==0.4.8
|
||||||
|
# via
|
||||||
|
# advocate
|
||||||
|
# ndg-httpsclient
|
||||||
|
# pyasn1-modules
|
||||||
|
# service-identity
|
||||||
|
pyasn1-modules==0.2.8
|
||||||
|
# via service-identity
|
||||||
|
pycparser==2.21
|
||||||
|
# via cffi
|
||||||
|
pyjwt[crypto]==2.3.0
|
||||||
|
# via drf-jwt
|
||||||
|
pyopenssl==22.0.0
|
||||||
|
# via
|
||||||
|
# advocate
|
||||||
|
# ndg-httpsclient
|
||||||
|
# twisted
|
||||||
|
pyparsing==3.0.7
|
||||||
|
# via packaging
|
||||||
|
pyrsistent==0.18.1
|
||||||
|
# via jsonschema
|
||||||
|
python-crontab==2.6.0
|
||||||
|
# via django-celery-beat
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
# via
|
||||||
|
# botocore
|
||||||
|
# celery-redbeat
|
||||||
|
# faker
|
||||||
|
# python-crontab
|
||||||
|
python-dotenv==0.19.2
|
||||||
|
# via uvicorn
|
||||||
|
pytz==2021.3
|
||||||
|
# via
|
||||||
|
# celery
|
||||||
|
# django
|
||||||
|
# django-timezone-field
|
||||||
|
# djangorestframework
|
||||||
|
pyyaml==6.0
|
||||||
|
# via
|
||||||
|
# drf-spectacular
|
||||||
|
# uvicorn
|
||||||
redis==4.1.4
|
redis==4.1.4
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# celery
|
||||||
|
# celery-redbeat
|
||||||
|
# django-redis
|
||||||
|
regex==2021.8.3
|
||||||
|
# via -r base.in
|
||||||
|
requests==2.26.0
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# advocate
|
||||||
|
s3transfer==0.5.2
|
||||||
|
# via boto3
|
||||||
|
service-identity==21.1.0
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# twisted
|
||||||
|
six==1.16.0
|
||||||
|
# via
|
||||||
|
# advocate
|
||||||
|
# automat
|
||||||
|
# click-repl
|
||||||
|
# python-dateutil
|
||||||
|
# service-identity
|
||||||
|
sqlparse==0.4.2
|
||||||
|
# via django
|
||||||
|
tenacity==8.0.1
|
||||||
|
# via celery-redbeat
|
||||||
|
text-unidecode==1.3
|
||||||
|
# via faker
|
||||||
|
tqdm==4.62.3
|
||||||
|
# via -r base.in
|
||||||
|
twisted[tls]==22.1.0
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# daphne
|
||||||
|
txaio==22.2.1
|
||||||
|
# via autobahn
|
||||||
|
typing-extensions==4.1.1
|
||||||
|
# via
|
||||||
|
# asgiref
|
||||||
|
# async-timeout
|
||||||
|
# drf-spectacular
|
||||||
|
# h11
|
||||||
|
# importlib-metadata
|
||||||
|
# jsonschema
|
||||||
|
# twisted
|
||||||
|
# uvicorn
|
||||||
|
unicodecsv==0.14.1
|
||||||
|
# via -r base.in
|
||||||
|
uritemplate==4.1.1
|
||||||
|
# via drf-spectacular
|
||||||
|
urllib3==1.26.8
|
||||||
|
# via
|
||||||
|
# advocate
|
||||||
|
# botocore
|
||||||
|
# requests
|
||||||
|
uvicorn[standard]==0.15.0
|
||||||
|
# via -r base.in
|
||||||
|
uvloop==0.16.0
|
||||||
|
# via uvicorn
|
||||||
|
vine==5.0.0
|
||||||
|
# via
|
||||||
|
# amqp
|
||||||
|
# celery
|
||||||
|
# kombu
|
||||||
|
watchgod==0.7
|
||||||
|
# via uvicorn
|
||||||
|
wcwidth==0.2.5
|
||||||
|
# via prompt-toolkit
|
||||||
|
websockets==10.2
|
||||||
|
# via uvicorn
|
||||||
|
wrapt==1.13.3
|
||||||
|
# via deprecated
|
||||||
|
zipp==3.5.0
|
||||||
|
# via
|
||||||
|
# -r base.in
|
||||||
|
# importlib-metadata
|
||||||
|
# importlib-resources
|
||||||
|
zope-interface==5.4.0
|
||||||
|
# via twisted
|
||||||
|
|
||||||
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
|
# setuptools
|
||||||
|
|
28
backend/requirements/dev.in
Normal file
28
backend/requirements/dev.in
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
-c base.txt
|
||||||
|
flake8==3.9.2
|
||||||
|
pytest==6.2.5
|
||||||
|
pytest-django==4.4.0
|
||||||
|
pytest-env==0.6.2
|
||||||
|
pytest-asyncio==0.15.1
|
||||||
|
pytest-ordering==0.6
|
||||||
|
pytest-mock==3.6.1
|
||||||
|
pytest-icdiff==0.5
|
||||||
|
freezegun==1.1.0
|
||||||
|
responses==0.13.4
|
||||||
|
watchdog==2.1.4
|
||||||
|
argh==0.26.2
|
||||||
|
black==21.7b0
|
||||||
|
pyinstrument==4.0.3
|
||||||
|
pyfakefs==4.5.5
|
||||||
|
pytest-xdist==2.3.0
|
||||||
|
responses==0.13.4
|
||||||
|
django-silk==4.2.0
|
||||||
|
django-extensions==3.1.5
|
||||||
|
snoop==0.4.1
|
||||||
|
openapi-spec-validator==0.4.0
|
||||||
|
pytest-html==3.1.1
|
||||||
|
coverage==6.2
|
||||||
|
pytest-split==0.6.0
|
||||||
|
bandit==1.7.2
|
||||||
|
pip-tools==6.5.1
|
||||||
|
autopep8==1.5.7
|
|
@ -1,25 +1,267 @@
|
||||||
flake8==3.9.2
|
#
|
||||||
pytest==6.2.5
|
# This file is autogenerated by pip-compile with python 3.7
|
||||||
pytest-django==4.4.0
|
# To update, run:
|
||||||
pytest-env==0.6.2
|
#
|
||||||
pytest-asyncio==0.15.1
|
# pip-compile --output-file=dev.txt dev.in
|
||||||
pytest-ordering==0.6
|
#
|
||||||
pytest-mock==3.6.1
|
appdirs==1.4.4
|
||||||
pytest-icdiff==0.5
|
# via black
|
||||||
freezegun==1.1.0
|
|
||||||
responses==0.13.4
|
|
||||||
watchdog==2.1.4
|
|
||||||
argh==0.26.2
|
argh==0.26.2
|
||||||
black==21.7b0
|
# via -r dev.in
|
||||||
pyinstrument==4.0.3
|
asgiref==3.4.1
|
||||||
pyfakefs==4.5.0
|
# via
|
||||||
pytest-xdist==2.3.0
|
# -c base.txt
|
||||||
responses==0.13.4
|
# django
|
||||||
django-silk==4.2.0
|
asttokens==2.0.5
|
||||||
django-extensions==3.1.5
|
# via snoop
|
||||||
snoop==0.4.1
|
attrs==21.4.0
|
||||||
openapi-spec-validator==0.4.0
|
# via
|
||||||
pytest-html==3.1.1
|
# -c base.txt
|
||||||
coverage==6.2
|
# jsonschema
|
||||||
pytest-split==0.6.0
|
# pytest
|
||||||
|
autopep8==1.5.7
|
||||||
|
# via
|
||||||
|
# -r dev.in
|
||||||
|
# django-silk
|
||||||
bandit==1.7.2
|
bandit==1.7.2
|
||||||
|
# via -r dev.in
|
||||||
|
black==21.7b0
|
||||||
|
# via -r dev.in
|
||||||
|
certifi==2021.10.8
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# requests
|
||||||
|
charset-normalizer==2.0.12
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# requests
|
||||||
|
cheap-repr==0.5.1
|
||||||
|
# via snoop
|
||||||
|
click==8.0.4
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# black
|
||||||
|
# pip-tools
|
||||||
|
coverage==6.2
|
||||||
|
# via -r dev.in
|
||||||
|
django==3.2.12
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# django-extensions
|
||||||
|
# django-silk
|
||||||
|
django-extensions==3.1.5
|
||||||
|
# via -r dev.in
|
||||||
|
django-silk==4.2.0
|
||||||
|
# via -r dev.in
|
||||||
|
execnet==1.9.0
|
||||||
|
# via pytest-xdist
|
||||||
|
executing==0.8.3
|
||||||
|
# via snoop
|
||||||
|
flake8==3.9.2
|
||||||
|
# via -r dev.in
|
||||||
|
freezegun==1.1.0
|
||||||
|
# via -r dev.in
|
||||||
|
gitdb==4.0.9
|
||||||
|
# via gitpython
|
||||||
|
gitpython==3.1.27
|
||||||
|
# via bandit
|
||||||
|
gprof2dot==2021.2.21
|
||||||
|
# via django-silk
|
||||||
|
icdiff==2.0.4
|
||||||
|
# via pytest-icdiff
|
||||||
|
idna==3.3
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# requests
|
||||||
|
importlib-metadata==4.11.2
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# click
|
||||||
|
# flake8
|
||||||
|
# jsonschema
|
||||||
|
# pep517
|
||||||
|
# pluggy
|
||||||
|
# pytest
|
||||||
|
# stevedore
|
||||||
|
importlib-resources==5.4.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# jsonschema
|
||||||
|
iniconfig==1.1.1
|
||||||
|
# via pytest
|
||||||
|
jinja2==3.0.3
|
||||||
|
# via django-silk
|
||||||
|
jsonschema==4.4.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# openapi-schema-validator
|
||||||
|
# openapi-spec-validator
|
||||||
|
markupsafe==2.1.0
|
||||||
|
# via jinja2
|
||||||
|
mccabe==0.6.1
|
||||||
|
# via flake8
|
||||||
|
mypy-extensions==0.4.3
|
||||||
|
# via black
|
||||||
|
openapi-schema-validator==0.2.3
|
||||||
|
# via openapi-spec-validator
|
||||||
|
openapi-spec-validator==0.4.0
|
||||||
|
# via -r dev.in
|
||||||
|
packaging==21.3
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# pytest
|
||||||
|
pathspec==0.9.0
|
||||||
|
# via black
|
||||||
|
pbr==5.8.1
|
||||||
|
# via stevedore
|
||||||
|
pep517==0.12.0
|
||||||
|
# via pip-tools
|
||||||
|
pip-tools==6.5.1
|
||||||
|
# via -r dev.in
|
||||||
|
pluggy==1.0.0
|
||||||
|
# via pytest
|
||||||
|
pprintpp==0.4.0
|
||||||
|
# via pytest-icdiff
|
||||||
|
py==1.11.0
|
||||||
|
# via
|
||||||
|
# pytest
|
||||||
|
# pytest-forked
|
||||||
|
pycodestyle==2.7.0
|
||||||
|
# via
|
||||||
|
# autopep8
|
||||||
|
# flake8
|
||||||
|
pyfakefs==4.5.5
|
||||||
|
# via -r dev.in
|
||||||
|
pyflakes==2.3.1
|
||||||
|
# via flake8
|
||||||
|
pygments==2.11.2
|
||||||
|
# via
|
||||||
|
# django-silk
|
||||||
|
# snoop
|
||||||
|
pyinstrument==4.0.3
|
||||||
|
# via -r dev.in
|
||||||
|
pyparsing==3.0.7
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# packaging
|
||||||
|
pyrsistent==0.18.1
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# jsonschema
|
||||||
|
pytest==6.2.5
|
||||||
|
# via
|
||||||
|
# -r dev.in
|
||||||
|
# pytest-asyncio
|
||||||
|
# pytest-django
|
||||||
|
# pytest-env
|
||||||
|
# pytest-forked
|
||||||
|
# pytest-html
|
||||||
|
# pytest-icdiff
|
||||||
|
# pytest-metadata
|
||||||
|
# pytest-mock
|
||||||
|
# pytest-ordering
|
||||||
|
# pytest-split
|
||||||
|
# pytest-xdist
|
||||||
|
pytest-asyncio==0.15.1
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-django==4.4.0
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-env==0.6.2
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-forked==1.4.0
|
||||||
|
# via pytest-xdist
|
||||||
|
pytest-html==3.1.1
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-icdiff==0.5
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-metadata==1.11.0
|
||||||
|
# via pytest-html
|
||||||
|
pytest-mock==3.6.1
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-ordering==0.6
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-split==0.6.0
|
||||||
|
# via -r dev.in
|
||||||
|
pytest-xdist==2.3.0
|
||||||
|
# via -r dev.in
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# django-silk
|
||||||
|
# freezegun
|
||||||
|
pytz==2021.3
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# django
|
||||||
|
# django-silk
|
||||||
|
pyyaml==6.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# bandit
|
||||||
|
# openapi-spec-validator
|
||||||
|
regex==2021.8.3
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# black
|
||||||
|
requests==2.26.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# django-silk
|
||||||
|
# responses
|
||||||
|
responses==0.13.4
|
||||||
|
# via -r dev.in
|
||||||
|
six==1.16.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# asttokens
|
||||||
|
# python-dateutil
|
||||||
|
# responses
|
||||||
|
# snoop
|
||||||
|
smmap==5.0.0
|
||||||
|
# via gitdb
|
||||||
|
snoop==0.4.1
|
||||||
|
# via -r dev.in
|
||||||
|
sqlparse==0.4.2
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# django
|
||||||
|
# django-silk
|
||||||
|
stevedore==3.5.0
|
||||||
|
# via bandit
|
||||||
|
toml==0.10.2
|
||||||
|
# via
|
||||||
|
# autopep8
|
||||||
|
# pytest
|
||||||
|
tomli==1.2.3
|
||||||
|
# via
|
||||||
|
# black
|
||||||
|
# pep517
|
||||||
|
typed-ast==1.5.2
|
||||||
|
# via black
|
||||||
|
typing-extensions==4.1.1
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# asgiref
|
||||||
|
# black
|
||||||
|
# gitpython
|
||||||
|
# importlib-metadata
|
||||||
|
# jsonschema
|
||||||
|
urllib3==1.26.8
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# requests
|
||||||
|
# responses
|
||||||
|
watchdog==2.1.4
|
||||||
|
# via -r dev.in
|
||||||
|
wheel==0.37.1
|
||||||
|
# via pip-tools
|
||||||
|
zipp==3.5.0
|
||||||
|
# via
|
||||||
|
# -c base.txt
|
||||||
|
# importlib-metadata
|
||||||
|
# importlib-resources
|
||||||
|
# pep517
|
||||||
|
|
||||||
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
|
# pip
|
||||||
|
# setuptools
|
||||||
|
|
|
@ -1,156 +0,0 @@
|
||||||
advocate==1.0.0
|
|
||||||
aioredis==1.3.1
|
|
||||||
amqp==5.1.0
|
|
||||||
antlr4-python3-runtime==4.8
|
|
||||||
appdirs==1.4.4
|
|
||||||
argh==0.26.2
|
|
||||||
asgiref==3.4.1
|
|
||||||
asttokens==2.0.5
|
|
||||||
async-timeout==4.0.2
|
|
||||||
attrs==21.4.0
|
|
||||||
autobahn==22.2.2
|
|
||||||
Automat==20.2.0
|
|
||||||
autopep8==1.5.7
|
|
||||||
bandit==1.7.2
|
|
||||||
billiard==3.6.4.0
|
|
||||||
black==21.7b0
|
|
||||||
boto3==1.20.38
|
|
||||||
botocore==1.23.54
|
|
||||||
cached-property==1.5.2
|
|
||||||
celery==5.2.3
|
|
||||||
celery-redbeat==2.0.0
|
|
||||||
certifi==2021.10.8
|
|
||||||
cffi==1.15.0
|
|
||||||
channels==3.0.4
|
|
||||||
channels-redis==3.3.0
|
|
||||||
charset-normalizer==2.0.12
|
|
||||||
cheap-repr==0.5.1
|
|
||||||
click==8.0.4
|
|
||||||
click-didyoumean==0.3.0
|
|
||||||
click-plugins==1.1.1
|
|
||||||
click-repl==0.2.0
|
|
||||||
constantly==15.1.0
|
|
||||||
coverage==6.2
|
|
||||||
cryptography==36.0.1
|
|
||||||
daphne==3.0.2
|
|
||||||
Deprecated==1.2.13
|
|
||||||
dj-database-url==0.5.0
|
|
||||||
Django==3.2.12
|
|
||||||
django-appconf==1.0.5
|
|
||||||
django-celery-beat==2.2.1
|
|
||||||
django-celery-email==3.0.0
|
|
||||||
django-cors-headers==3.8.0
|
|
||||||
django-extensions==3.1.5
|
|
||||||
django-health-check==3.16.5
|
|
||||||
django-redis==5.2.0
|
|
||||||
django-silk==4.2.0
|
|
||||||
django-storages==1.12.3
|
|
||||||
django-timezone-field==4.2.3
|
|
||||||
djangorestframework==3.13.1
|
|
||||||
drf-jwt==1.19.1
|
|
||||||
drf-spectacular==0.21.2
|
|
||||||
execnet==1.9.0
|
|
||||||
executing==0.8.3
|
|
||||||
Faker==8.11.0
|
|
||||||
flake8==3.9.2
|
|
||||||
freezegun==1.1.0
|
|
||||||
gitdb==4.0.9
|
|
||||||
GitPython==3.1.27
|
|
||||||
gprof2dot==2021.2.21
|
|
||||||
gunicorn==20.1.0
|
|
||||||
h11==0.13.0
|
|
||||||
hiredis==2.0.0
|
|
||||||
httptools==0.2.0
|
|
||||||
hyperlink==21.0.0
|
|
||||||
icdiff==2.0.4
|
|
||||||
idna==3.3
|
|
||||||
importlib-metadata==4.11.2
|
|
||||||
importlib-resources==5.4.0
|
|
||||||
incremental==21.3.0
|
|
||||||
inflection==0.5.1
|
|
||||||
iniconfig==1.1.1
|
|
||||||
itsdangerous==2.0.1
|
|
||||||
Jinja2==3.0.3
|
|
||||||
jmespath==0.10.0
|
|
||||||
jsonschema==4.4.0
|
|
||||||
kombu==5.2.4
|
|
||||||
MarkupSafe==2.1.0
|
|
||||||
mccabe==0.6.1
|
|
||||||
msgpack==1.0.3
|
|
||||||
mypy-extensions==0.4.3
|
|
||||||
ndg-httpsclient==0.5.1
|
|
||||||
netifaces==0.11.0
|
|
||||||
openapi-schema-validator==0.2.3
|
|
||||||
openapi-spec-validator==0.4.0
|
|
||||||
packaging==21.3
|
|
||||||
pathspec==0.9.0
|
|
||||||
pbr==5.8.1
|
|
||||||
Pillow==9.0.0
|
|
||||||
pluggy==1.0.0
|
|
||||||
pprintpp==0.4.0
|
|
||||||
prompt-toolkit==3.0.28
|
|
||||||
psutil==5.9.0
|
|
||||||
psycopg2==2.9.1
|
|
||||||
py==1.11.0
|
|
||||||
pyasn1==0.4.8
|
|
||||||
pyasn1-modules==0.2.8
|
|
||||||
pycodestyle==2.7.0
|
|
||||||
pycparser==2.21
|
|
||||||
pyfakefs==4.5.0
|
|
||||||
pyflakes==2.3.1
|
|
||||||
Pygments==2.11.2
|
|
||||||
pyinstrument==4.0.3
|
|
||||||
PyJWT==2.3.0
|
|
||||||
pyOpenSSL==22.0.0
|
|
||||||
pyparsing==3.0.7
|
|
||||||
pyrsistent==0.18.1
|
|
||||||
pytest==6.2.5
|
|
||||||
pytest-asyncio==0.15.1
|
|
||||||
pytest-django==4.4.0
|
|
||||||
pytest-env==0.6.2
|
|
||||||
pytest-forked==1.4.0
|
|
||||||
pytest-html==3.1.1
|
|
||||||
pytest-icdiff==0.5
|
|
||||||
pytest-metadata==1.11.0
|
|
||||||
pytest-mock==3.6.1
|
|
||||||
pytest-ordering==0.6
|
|
||||||
pytest-split==0.6.0
|
|
||||||
pytest-xdist==2.3.0
|
|
||||||
python-crontab==2.6.0
|
|
||||||
python-dateutil==2.8.2
|
|
||||||
python-dotenv==0.19.2
|
|
||||||
pytz==2021.3
|
|
||||||
PyYAML==6.0
|
|
||||||
redis==4.1.4
|
|
||||||
regex==2021.8.3
|
|
||||||
requests==2.26.0
|
|
||||||
responses==0.13.4
|
|
||||||
s3transfer==0.5.2
|
|
||||||
service-identity==21.1.0
|
|
||||||
six==1.16.0
|
|
||||||
smmap==5.0.0
|
|
||||||
snoop==0.4.1
|
|
||||||
sqlparse==0.4.2
|
|
||||||
stevedore==3.5.0
|
|
||||||
tenacity==8.0.1
|
|
||||||
text-unidecode==1.3
|
|
||||||
toml==0.10.2
|
|
||||||
tomli==1.2.3
|
|
||||||
tqdm==4.62.3
|
|
||||||
Twisted==22.1.0
|
|
||||||
txaio==22.2.1
|
|
||||||
typed-ast==1.5.2
|
|
||||||
typing_extensions==4.1.1
|
|
||||||
unicodecsv==0.14.1
|
|
||||||
uritemplate==4.1.1
|
|
||||||
urllib3==1.26.8
|
|
||||||
uvicorn==0.15.0
|
|
||||||
uvloop==0.16.0
|
|
||||||
vine==5.0.0
|
|
||||||
watchdog==2.1.4
|
|
||||||
watchgod==0.7
|
|
||||||
wcwidth==0.2.5
|
|
||||||
websockets==10.2
|
|
||||||
wrapt==1.13.3
|
|
||||||
zipp==3.5.0
|
|
||||||
zope.interface==5.4.0
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
* Added group context menu to sidebar.
|
* Added group context menu to sidebar.
|
||||||
* Fixed Airtable import bug where the import would fail if a row is empty.
|
* Fixed Airtable import bug where the import would fail if a row is empty.
|
||||||
|
* Pin backend python dependencies using pip-tools.
|
||||||
|
|
||||||
## Released (2022-03-03 1.9.1)
|
## Released (2022-03-03 1.9.1)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue