Use pip-tools to handle Python deps (#3892)
[pip-tools](https://github.com/jazzband/pip-tools) helps making builds deterministic, controlling deps (and indirect deps) upgrades (and versions consistency) avoiding unexpected (and potentially breaking) changes. We keep our direct deps in `requirements.in` from which we generate the `requirements.txt` (where *all* deps are pinned). We also constrain dev (and enterprise) deps based on base requirements. Check how to [update deps](https://github.com/jazzband/pip-tools?tab=readme-ov-file#updating-requirements).
This commit is contained in:
parent
0599c8f918
commit
c1b279aab8
8 changed files with 751 additions and 80 deletions
18
.github/workflows/linting-and-tests.yml
vendored
18
.github/workflows/linting-and-tests.yml
vendored
|
|
@ -127,7 +127,8 @@ jobs:
|
|||
# makemigrations --check = Exit with a non-zero status if model changes are missing migrations
|
||||
# and don't actually write them.
|
||||
run: |
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt requirements-dev.txt
|
||||
python manage.py makemigrations --check
|
||||
python manage.py lintmigrations
|
||||
|
||||
|
|
@ -184,7 +185,8 @@ jobs:
|
|||
working-directory: engine
|
||||
run: |
|
||||
apt-get update && apt-get install -y netcat-traditional
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt requirements-dev.txt
|
||||
./wait_for_test_mysql_start.sh && pytest -x
|
||||
|
||||
unit-test-backend-postgresql-rabbitmq:
|
||||
|
|
@ -233,7 +235,8 @@ jobs:
|
|||
- name: Unit Test Backend
|
||||
working-directory: engine
|
||||
run: |
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt requirements-dev.txt
|
||||
pytest -x
|
||||
|
||||
unit-test-backend-sqlite-redis:
|
||||
|
|
@ -272,7 +275,8 @@ jobs:
|
|||
working-directory: engine
|
||||
run: |
|
||||
apt-get update && apt-get install -y netcat-traditional
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt requirements-dev.txt
|
||||
pytest -x
|
||||
|
||||
unit-test-pd-migrator:
|
||||
|
|
@ -288,7 +292,8 @@ jobs:
|
|||
- name: Unit Test PD Migrator
|
||||
working-directory: tools/pagerduty-migrator
|
||||
run: |
|
||||
pip install -r requirements.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt
|
||||
pytest -x
|
||||
|
||||
mypy:
|
||||
|
|
@ -306,7 +311,8 @@ jobs:
|
|||
- name: mypy Static Type Checking
|
||||
working-directory: engine
|
||||
run: |
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
pip install pip-tools
|
||||
pip-sync requirements.txt requirements-dev.txt
|
||||
mypy .
|
||||
|
||||
end-to-end-tests:
|
||||
|
|
|
|||
19
Makefile
19
Makefile
|
|
@ -28,6 +28,10 @@ DEV_HELM_FILE = $(DEV_ENV_DIR)/helm-local.yml
|
|||
DEV_HELM_USER_SPECIFIC_FILE = $(DEV_ENV_DIR)/helm-local.dev.yml
|
||||
|
||||
ENGINE_DIR = ./engine
|
||||
VENV_DIR = ./venv
|
||||
REQUIREMENTS_DEV_IN = $(ENGINE_DIR)/requirements-dev.in
|
||||
REQUIREMENTS_DEV_TXT = $(ENGINE_DIR)/requirements-dev.txt
|
||||
REQUIREMENTS_IN = $(ENGINE_DIR)/requirements.in
|
||||
REQUIREMENTS_TXT = $(ENGINE_DIR)/requirements.txt
|
||||
REQUIREMENTS_ENTERPRISE_TXT = $(ENGINE_DIR)/requirements-enterprise.txt
|
||||
SQLITE_DB_FILE = $(ENGINE_DIR)/oncall.db
|
||||
|
|
@ -237,20 +241,29 @@ backend-debug-disable: _backend-debug-disable stop start
|
|||
define backend_command
|
||||
export `grep -v '^#' $(DEV_ENV_FILE) | xargs -0` && \
|
||||
export BROKER_TYPE=$(BROKER_TYPE) && \
|
||||
. ./venv/bin/activate && \
|
||||
cd engine && \
|
||||
$(1)
|
||||
endef
|
||||
|
||||
backend-bootstrap:
|
||||
pip install -U pip wheel
|
||||
pip install -r $(REQUIREMENTS_TXT)
|
||||
python3.11 -m venv $(VENV_DIR)
|
||||
$(VENV_DIR)/bin/pip install -U pip wheel pip-tools
|
||||
$(VENV_DIR)/bin/pip-sync $(REQUIREMENTS_TXT) $(REQUIREMENTS_DEV_TXT)
|
||||
@if [ -f $(REQUIREMENTS_ENTERPRISE_TXT) ]; then \
|
||||
pip install -r $(REQUIREMENTS_ENTERPRISE_TXT); \
|
||||
$(VENV_DIR)/bin/pip install -r $(REQUIREMENTS_ENTERPRISE_TXT); \
|
||||
fi
|
||||
|
||||
backend-migrate:
|
||||
$(call backend_command,python manage.py migrate)
|
||||
|
||||
backend-compile-deps:
|
||||
pip-compile --strip-extras $(REQUIREMENTS_IN)
|
||||
pip-compile --strip-extras $(REQUIREMENTS_DEV_IN)
|
||||
|
||||
backend-upgrade-deps:
|
||||
pip-compile --strip-extras --upgrade $(REQUIREMENTS_IN)
|
||||
|
||||
run-backend-server:
|
||||
$(call backend_command,python manage.py runserver 0.0.0.0:8080)
|
||||
|
||||
|
|
|
|||
2
Tiltfile
2
Tiltfile
|
|
@ -44,7 +44,7 @@ docker_build_sub(
|
|||
live_update=[
|
||||
sync("./engine/", "/etc/app"),
|
||||
run(
|
||||
"cd /etc/app && pip install -r requirements.txt",
|
||||
"cd /etc/app && pip install pip-tools && pip-sync",
|
||||
trigger="./engine/requirements.txt",
|
||||
),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -189,13 +189,11 @@ See the `django-silk` documentation [here](https://github.com/jazzband/django-si
|
|||
By default everything runs inside Docker. If you would like to run the backend services outside of Docker
|
||||
(for integrating w/ PyCharm for example), follow these instructions:
|
||||
|
||||
1. Create a Python 3.11 virtual environment using a method of your choosing (ex.
|
||||
[venv](https://docs.python.org/3.11/library/venv.html) or [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv)).
|
||||
Make sure the virtualenv is "activated".
|
||||
1. Make sure you have Python 3.11 installed.
|
||||
2. `postgres` is a dependency on some of our Python dependencies (notably `psycopg2`
|
||||
([docs](https://www.psycopg.org/docs/install.html#prerequisites))). Please visit
|
||||
[here](https://www.postgresql.org/download/) for installation instructions.
|
||||
3. `make backend-bootstrap` - installs all backend dependencies
|
||||
3. `make backend-bootstrap` - will create the virtual env and install all backend dependencies
|
||||
4. Modify your `.env.dev` by copying the contents of one of `.env.mysql.dev`, `.env.postgres.dev`,
|
||||
or `.env.sqlite.dev` into `.env.dev` (you should exclude the `GF_` prefixed environment variables).
|
||||
|
||||
|
|
@ -209,6 +207,22 @@ By default everything runs inside Docker. If you would like to run the backend s
|
|||
- `make run-backend-server` - runs the HTTP server
|
||||
- `make run-backend-celery` - runs Celery workers
|
||||
|
||||
### Adding or updating Python dependencies
|
||||
|
||||
We are using [pip-tools](https://github.com/jazzband/pip-tools) to manage our dependencies. It helps
|
||||
making builds deterministic, controlling deps (and indirect deps) upgrades (and versions consistency)
|
||||
avoiding unexpected (and potentially breaking) changes.
|
||||
|
||||
We keep our direct deps in `requirements.in` from which we generate (through `pip-compile`) the
|
||||
`requirements.txt` (where all deps are pinned). We also constrain dev (and enterprise) deps based
|
||||
on our base requirements. Check [how to update deps](https://github.com/jazzband/pip-tools?tab=readme-ov-file#updating-requirements).
|
||||
|
||||
`pip install -r requirements.txt` will keep working (the difference is that this should never
|
||||
bring additional dependencies or different versions not listed there), and when starting an env
|
||||
from scratch, it would be the same as running `pip-sync`. `pip-sync` on the other hand will also
|
||||
ensure to clean up any deps not listed in the requirements, keeping the env exactly as described
|
||||
in `requirements.txt`.
|
||||
|
||||
## UI E2E Tests
|
||||
|
||||
We've developed a suite of "end-to-end" integration tests using [Playwright](https://playwright.dev/). These tests
|
||||
|
|
|
|||
16
engine/requirements-dev.in
Normal file
16
engine/requirements-dev.in
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-c requirements.txt
|
||||
celery-types==0.18.0
|
||||
django-filter-stubs==0.1.3
|
||||
django-stubs[compatible-mypy]==4.2.2
|
||||
djangorestframework-stubs[compatible-mypy]==3.14.2
|
||||
httpretty==1.1.4
|
||||
mypy==1.4.1
|
||||
pre-commit==2.15.0
|
||||
pytest==7.3.1
|
||||
pytest-django==4.5.2
|
||||
pytest-xdist[psutil]==3.5.0
|
||||
pytest_factoryboy==2.5.1
|
||||
types-beautifulsoup4==4.12.0.5
|
||||
types-PyMySQL==1.0.19.7
|
||||
types-python-dateutil==2.8.19.13
|
||||
types-requests==2.31.0.1
|
||||
|
|
@ -1,15 +1,169 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile with Python 3.11
|
||||
# by the following command:
|
||||
#
|
||||
# pip-compile --strip-extras ./engine/requirements-dev.in
|
||||
#
|
||||
asgiref==3.7.2
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# django
|
||||
celery-types==0.18.0
|
||||
# via -r ./engine/requirements-dev.in
|
||||
certifi==2024.2.2
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# requests
|
||||
cfgv==3.4.0
|
||||
# via pre-commit
|
||||
charset-normalizer==3.3.2
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# requests
|
||||
distlib==0.3.8
|
||||
# via virtualenv
|
||||
django==4.2.10
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# django-stubs
|
||||
# django-stubs-ext
|
||||
django-filter-stubs==0.1.3
|
||||
django-stubs[compatible-mypy]==4.2.2
|
||||
djangorestframework-stubs[compatible-mypy]==3.14.2
|
||||
mypy==1.4.1
|
||||
pre-commit==2.15.0
|
||||
pytest==7.3.1
|
||||
pytest-django==4.5.2
|
||||
pytest_factoryboy==2.5.1
|
||||
types-beautifulsoup4==4.12.0.5
|
||||
types-PyMySQL==1.0.19.7
|
||||
types-python-dateutil==2.8.19.13
|
||||
types-requests==2.31.0.1
|
||||
# via -r ./engine/requirements-dev.in
|
||||
django-stubs==4.2.2
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# django-filter-stubs
|
||||
# django-stubs
|
||||
# djangorestframework-stubs
|
||||
django-stubs-ext==4.2.7
|
||||
# via django-stubs
|
||||
djangorestframework-stubs==3.14.2
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# django-filter-stubs
|
||||
# djangorestframework-stubs
|
||||
execnet==2.0.2
|
||||
# via pytest-xdist
|
||||
factory-boy==2.12.0
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# pytest-factoryboy
|
||||
faker==23.1.0
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# factory-boy
|
||||
filelock==3.13.1
|
||||
# via virtualenv
|
||||
httpretty==1.1.4
|
||||
pytest-xdist[psutil]==3.5.0
|
||||
# via -r ./engine/requirements-dev.in
|
||||
identify==2.5.34
|
||||
# via pre-commit
|
||||
idna==3.6
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# requests
|
||||
inflection==0.5.1
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# pytest-factoryboy
|
||||
iniconfig==2.0.0
|
||||
# via pytest
|
||||
mypy==1.4.1
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# django-filter-stubs
|
||||
# django-stubs
|
||||
# djangorestframework-stubs
|
||||
mypy-extensions==1.0.0
|
||||
# via mypy
|
||||
nodeenv==1.8.0
|
||||
# via pre-commit
|
||||
packaging==23.2
|
||||
# via pytest
|
||||
platformdirs==4.2.0
|
||||
# via virtualenv
|
||||
pluggy==1.4.0
|
||||
# via pytest
|
||||
pre-commit==2.15.0
|
||||
# via -r ./engine/requirements-dev.in
|
||||
psutil==5.9.4
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# pytest-xdist
|
||||
pytest==7.3.1
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# pytest-django
|
||||
# pytest-factoryboy
|
||||
# pytest-xdist
|
||||
pytest-django==4.5.2
|
||||
# via -r ./engine/requirements-dev.in
|
||||
pytest-factoryboy==2.5.1
|
||||
# via -r ./engine/requirements-dev.in
|
||||
pytest-xdist==3.5.0
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# pytest-xdist
|
||||
python-dateutil==2.8.2
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# faker
|
||||
pyyaml==6.0.1
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# pre-commit
|
||||
requests==2.31.0
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# djangorestframework-stubs
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# python-dateutil
|
||||
sqlparse==0.4.4
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# django
|
||||
toml==0.10.2
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# pre-commit
|
||||
types-beautifulsoup4==4.12.0.5
|
||||
# via -r ./engine/requirements-dev.in
|
||||
types-html5lib==1.1.11.20240106
|
||||
# via types-beautifulsoup4
|
||||
types-pymysql==1.0.19.7
|
||||
# via -r ./engine/requirements-dev.in
|
||||
types-python-dateutil==2.8.19.13
|
||||
# via -r ./engine/requirements-dev.in
|
||||
types-pytz==2024.1.0.20240203
|
||||
# via django-stubs
|
||||
types-pyyaml==6.0.12.12
|
||||
# via
|
||||
# django-stubs
|
||||
# djangorestframework-stubs
|
||||
types-requests==2.31.0.1
|
||||
# via
|
||||
# -r ./engine/requirements-dev.in
|
||||
# djangorestframework-stubs
|
||||
types-urllib3==1.26.25.14
|
||||
# via types-requests
|
||||
typing-extensions==4.9.0
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# celery-types
|
||||
# django-filter-stubs
|
||||
# django-stubs
|
||||
# django-stubs-ext
|
||||
# djangorestframework-stubs
|
||||
# mypy
|
||||
# pytest-factoryboy
|
||||
urllib3==1.26.18
|
||||
# via
|
||||
# -c ./engine/requirements.txt
|
||||
# requests
|
||||
virtualenv==20.25.0
|
||||
# via pre-commit
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
|||
58
engine/requirements.in
Normal file
58
engine/requirements.in
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
babel==2.12.1
|
||||
beautifulsoup4==4.12.2
|
||||
celery[redis]==5.3.1
|
||||
cryptography==38.0.4 # version 39.0.0 introduced an issue - https://stackoverflow.com/a/75053968/3902555
|
||||
django==4.2.10
|
||||
django-add-default-value==0.10.0
|
||||
django-amazon-ses==4.0.1
|
||||
django-anymail==8.6
|
||||
django-cors-headers==3.7.0
|
||||
# pyroscope-io==0.8.1
|
||||
django-dbconn-retry==0.1.7
|
||||
django-debug-toolbar==4.1
|
||||
django-deprecate-fields==0.1.1
|
||||
django-filter==2.4.0
|
||||
django-ipware==4.0.2
|
||||
django-log-request-id==1.6.0
|
||||
django-migration-linter==4.1.0
|
||||
django-mirage-field==1.3.0
|
||||
django-mysql==4.6.0
|
||||
django-polymorphic==3.1.0
|
||||
django-ratelimit==2.0.0
|
||||
django-redis==5.4.0
|
||||
django-rest-polymorphic==0.1.10
|
||||
django-silk==5.0.3
|
||||
django-sns-view==0.1.2
|
||||
djangorestframework==3.14.0
|
||||
factory-boy<3.0
|
||||
drf-spectacular==0.26.5
|
||||
emoji==2.4.0
|
||||
grpcio==1.57.0
|
||||
fcm-django @ https://github.com/grafana/fcm-django/archive/refs/tags/v1.0.12r1.tar.gz#sha256=7ec7cd9d353fc9edf19a4acd4fa14090a31d83d02ac986c5e5e081dea29f564f
|
||||
hiredis==2.2.3
|
||||
humanize==0.5.1
|
||||
icalendar==5.0.10
|
||||
lxml==4.9.2
|
||||
markdown2==2.4.10
|
||||
opentelemetry-exporter-otlp-proto-grpc==1.15.0
|
||||
opentelemetry-instrumentation-celery==0.36b0
|
||||
opentelemetry-instrumentation-pymysql==0.36b0
|
||||
opentelemetry-instrumentation-wsgi==0.36b0
|
||||
phonenumbers==8.10.0
|
||||
prometheus_client==0.16.0
|
||||
psutil==5.9.4
|
||||
psycopg2==2.9.3
|
||||
pymdown-extensions==10.0
|
||||
PyMySQL==1.1.0
|
||||
python-telegram-bot==13.13
|
||||
recurring-ical-events==2.1.0
|
||||
redis==5.0.1
|
||||
regex==2021.11.2
|
||||
requests==2.31.0
|
||||
slack-export-viewer==1.1.4
|
||||
slack_sdk==3.21.3
|
||||
social-auth-app-django==5.3.0
|
||||
twilio~=6.37.0
|
||||
urllib3==1.26.18
|
||||
uwsgi==2.0.21
|
||||
whitenoise==5.3.0
|
||||
|
|
@ -1,58 +1,468 @@
|
|||
django==4.2.10
|
||||
djangorestframework==3.14.0
|
||||
slack_sdk==3.21.3
|
||||
whitenoise==5.3.0
|
||||
twilio~=6.37.0
|
||||
phonenumbers==8.10.0
|
||||
celery[amqp,redis]==5.3.1
|
||||
redis==5.0.1
|
||||
humanize==0.5.1
|
||||
uwsgi==2.0.21
|
||||
django-cors-headers==3.7.0
|
||||
django-debug-toolbar==4.1
|
||||
django-sns-view==0.1.2
|
||||
python-telegram-bot==13.13
|
||||
django-silk==5.0.3
|
||||
django-redis==5.4.0
|
||||
hiredis==2.2.3
|
||||
django-ratelimit==2.0.0
|
||||
django-filter==2.4.0
|
||||
icalendar==5.0.10
|
||||
recurring-ical-events==2.1.0
|
||||
slack-export-viewer==1.1.4
|
||||
beautifulsoup4==4.12.2
|
||||
social-auth-app-django==5.3.0
|
||||
cryptography==38.0.4 # version 39.0.0 introduced an issue - https://stackoverflow.com/a/75053968/3902555
|
||||
factory-boy<3.0
|
||||
django-log-request-id==1.6.0
|
||||
django-polymorphic==3.1.0
|
||||
django-rest-polymorphic==0.1.10
|
||||
https://github.com/grafana/fcm-django/archive/refs/tags/v1.0.12r1.tar.gz
|
||||
django-mirage-field==1.3.0
|
||||
django-mysql==4.6.0
|
||||
PyMySQL==1.1.0
|
||||
psycopg2==2.9.3
|
||||
emoji==2.4.0
|
||||
regex==2021.11.2
|
||||
psutil==5.9.4
|
||||
django-migration-linter==4.1.0
|
||||
django-add-default-value==0.10.0
|
||||
opentelemetry-instrumentation-celery==0.36b0
|
||||
opentelemetry-instrumentation-pymysql==0.36b0
|
||||
opentelemetry-instrumentation-wsgi==0.36b0
|
||||
opentelemetry-exporter-otlp-proto-grpc==1.15.0
|
||||
# pyroscope-io==0.8.1
|
||||
django-dbconn-retry==0.1.7
|
||||
django-ipware==4.0.2
|
||||
django-anymail==8.6
|
||||
django-amazon-ses==4.0.1
|
||||
django-deprecate-fields==0.1.1
|
||||
pymdown-extensions==10.0
|
||||
requests==2.31.0
|
||||
urllib3==1.26.18
|
||||
prometheus_client==0.16.0
|
||||
lxml==4.9.2
|
||||
#
|
||||
# This file is autogenerated by pip-compile with Python 3.11
|
||||
# by the following command:
|
||||
#
|
||||
# pip-compile --strip-extras ./engine/requirements.in
|
||||
#
|
||||
amqp==5.2.0
|
||||
# via kombu
|
||||
appdirs==1.4.4
|
||||
# via django-migration-linter
|
||||
apscheduler==3.6.3
|
||||
# via python-telegram-bot
|
||||
asgiref==3.7.2
|
||||
# via django
|
||||
attrs==23.2.0
|
||||
# via
|
||||
# jsonschema
|
||||
# referencing
|
||||
autopep8==2.0.4
|
||||
# via django-silk
|
||||
babel==2.12.1
|
||||
# via -r ./engine/requirements.in
|
||||
backoff==2.2.1
|
||||
# via opentelemetry-exporter-otlp-proto-grpc
|
||||
beautifulsoup4==4.12.2
|
||||
# via -r ./engine/requirements.in
|
||||
billiard==4.2.0
|
||||
# via celery
|
||||
blinker==1.7.0
|
||||
# via flask
|
||||
boto3==1.34.41
|
||||
# via django-amazon-ses
|
||||
botocore==1.34.41
|
||||
# via
|
||||
# boto3
|
||||
# s3transfer
|
||||
cachecontrol==0.14.0
|
||||
# via firebase-admin
|
||||
cachetools==4.2.2
|
||||
# via
|
||||
# google-auth
|
||||
# python-telegram-bot
|
||||
celery==5.3.1
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# celery
|
||||
certifi==2024.2.2
|
||||
# via
|
||||
# python-telegram-bot
|
||||
# requests
|
||||
cffi==1.16.0
|
||||
# via
|
||||
# cryptography
|
||||
# django-sns-view
|
||||
charset-normalizer==3.3.2
|
||||
# via requests
|
||||
click==8.1.7
|
||||
# via
|
||||
# celery
|
||||
# click-didyoumean
|
||||
# click-plugins
|
||||
# click-repl
|
||||
# flask
|
||||
# slack-export-viewer
|
||||
click-didyoumean==0.3.0
|
||||
# via celery
|
||||
click-plugins==1.1.1
|
||||
# via celery
|
||||
click-repl==0.3.0
|
||||
# via celery
|
||||
cryptography==38.0.4
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# django-mirage-field
|
||||
# pyopenssl
|
||||
# social-auth-core
|
||||
defusedxml==0.8.0rc2
|
||||
# via
|
||||
# python3-openid
|
||||
# social-auth-core
|
||||
deprecated==1.2.14
|
||||
# via opentelemetry-api
|
||||
django==4.2.10
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# django-add-default-value
|
||||
# django-amazon-ses
|
||||
# django-anymail
|
||||
# django-cors-headers
|
||||
# django-debug-toolbar
|
||||
# django-deprecate-fields
|
||||
# django-filter
|
||||
# django-log-request-id
|
||||
# django-migration-linter
|
||||
# django-mysql
|
||||
# django-polymorphic
|
||||
# django-redis
|
||||
# django-rest-polymorphic
|
||||
# django-silk
|
||||
# django-sns-view
|
||||
# djangorestframework
|
||||
# drf-spectacular
|
||||
# fcm-django
|
||||
# social-auth-app-django
|
||||
django-add-default-value==0.10.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-amazon-ses==4.0.1
|
||||
# via -r ./engine/requirements.in
|
||||
django-anymail==8.6
|
||||
# via -r ./engine/requirements.in
|
||||
django-cors-headers==3.7.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-dbconn-retry==0.1.7
|
||||
# via -r ./engine/requirements.in
|
||||
django-debug-toolbar==4.1.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-deprecate-fields==0.1.1
|
||||
# via -r ./engine/requirements.in
|
||||
django-filter==2.4.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-ipware==4.0.2
|
||||
# via -r ./engine/requirements.in
|
||||
django-log-request-id==1.6.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-migration-linter==4.1.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-mirage-field==1.3.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-mysql==4.6.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-polymorphic==3.1.0
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# django-rest-polymorphic
|
||||
django-ratelimit==2.0.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-redis==5.4.0
|
||||
# via -r ./engine/requirements.in
|
||||
django-rest-polymorphic==0.1.10
|
||||
# via -r ./engine/requirements.in
|
||||
django-silk==5.0.3
|
||||
# via -r ./engine/requirements.in
|
||||
django-sns-view==0.1.2
|
||||
# via -r ./engine/requirements.in
|
||||
djangorestframework==3.14.0
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# django-rest-polymorphic
|
||||
# drf-spectacular
|
||||
drf-spectacular==0.26.5
|
||||
# via -r ./engine/requirements.in
|
||||
emoji==2.4.0
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# slack-export-viewer
|
||||
factory-boy==2.12.0
|
||||
# via -r ./engine/requirements.in
|
||||
faker==23.1.0
|
||||
# via factory-boy
|
||||
fcm-django @ https://github.com/grafana/fcm-django/archive/refs/tags/v1.0.12r1.tar.gz#sha256=7ec7cd9d353fc9edf19a4acd4fa14090a31d83d02ac986c5e5e081dea29f564f
|
||||
# via -r ./engine/requirements.in
|
||||
firebase-admin==5.4.0
|
||||
# via fcm-django
|
||||
flask==3.0.2
|
||||
# via slack-export-viewer
|
||||
google-api-core==2.17.0
|
||||
# via
|
||||
# firebase-admin
|
||||
# google-api-core
|
||||
# google-api-python-client
|
||||
# google-cloud-core
|
||||
# google-cloud-firestore
|
||||
# google-cloud-storage
|
||||
google-api-python-client==2.118.0
|
||||
# via firebase-admin
|
||||
google-auth==2.27.0
|
||||
# via
|
||||
# google-api-core
|
||||
# google-api-python-client
|
||||
# google-auth-httplib2
|
||||
# google-cloud-core
|
||||
# google-cloud-storage
|
||||
google-auth-httplib2==0.2.0
|
||||
# via google-api-python-client
|
||||
google-cloud-core==2.4.1
|
||||
# via
|
||||
# google-cloud-firestore
|
||||
# google-cloud-storage
|
||||
google-cloud-firestore==2.14.0
|
||||
# via firebase-admin
|
||||
google-cloud-storage==2.14.0
|
||||
# via firebase-admin
|
||||
google-crc32c==1.5.0
|
||||
# via
|
||||
# google-cloud-storage
|
||||
# google-resumable-media
|
||||
google-resumable-media==2.7.0
|
||||
# via google-cloud-storage
|
||||
googleapis-common-protos==1.62.0
|
||||
# via
|
||||
# google-api-core
|
||||
# grpcio-status
|
||||
# opentelemetry-exporter-otlp-proto-grpc
|
||||
gprof2dot==2022.7.29
|
||||
# via django-silk
|
||||
grpcio==1.57.0
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# google-api-core
|
||||
# grpcio-status
|
||||
# opentelemetry-exporter-otlp-proto-grpc
|
||||
grpcio-status==1.57.0
|
||||
# via google-api-core
|
||||
hiredis==2.2.3
|
||||
# via -r ./engine/requirements.in
|
||||
httplib2==0.22.0
|
||||
# via
|
||||
# google-api-python-client
|
||||
# google-auth-httplib2
|
||||
humanize==0.5.1
|
||||
# via -r ./engine/requirements.in
|
||||
icalendar==5.0.10
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# recurring-ical-events
|
||||
# x-wr-timezone
|
||||
idna==3.6
|
||||
# via requests
|
||||
inflection==0.5.1
|
||||
# via drf-spectacular
|
||||
itsdangerous==2.1.2
|
||||
# via flask
|
||||
jinja2==3.1.3
|
||||
# via flask
|
||||
jmespath==1.0.1
|
||||
# via
|
||||
# boto3
|
||||
# botocore
|
||||
jsonschema==4.21.1
|
||||
# via drf-spectacular
|
||||
jsonschema-specifications==2023.12.1
|
||||
# via jsonschema
|
||||
kombu==5.3.5
|
||||
# via celery
|
||||
lxml==4.9.2
|
||||
# via -r ./engine/requirements.in
|
||||
markdown==3.5.2
|
||||
# via pymdown-extensions
|
||||
markdown2==2.4.10
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# slack-export-viewer
|
||||
markupsafe==2.1.5
|
||||
# via
|
||||
# jinja2
|
||||
# werkzeug
|
||||
msgpack==1.0.7
|
||||
# via cachecontrol
|
||||
oauthlib==3.2.2
|
||||
# via
|
||||
# requests-oauthlib
|
||||
# social-auth-core
|
||||
opentelemetry-api==1.15.0
|
||||
# via
|
||||
# opentelemetry-exporter-otlp-proto-grpc
|
||||
# opentelemetry-instrumentation
|
||||
# opentelemetry-instrumentation-celery
|
||||
# opentelemetry-instrumentation-dbapi
|
||||
# opentelemetry-instrumentation-pymysql
|
||||
# opentelemetry-instrumentation-wsgi
|
||||
# opentelemetry-sdk
|
||||
opentelemetry-exporter-otlp-proto-grpc==1.15.0
|
||||
# via -r ./engine/requirements.in
|
||||
opentelemetry-instrumentation==0.36b0
|
||||
# via
|
||||
# opentelemetry-instrumentation-celery
|
||||
# opentelemetry-instrumentation-dbapi
|
||||
# opentelemetry-instrumentation-pymysql
|
||||
# opentelemetry-instrumentation-wsgi
|
||||
opentelemetry-instrumentation-celery==0.36b0
|
||||
# via -r ./engine/requirements.in
|
||||
opentelemetry-instrumentation-dbapi==0.36b0
|
||||
# via opentelemetry-instrumentation-pymysql
|
||||
opentelemetry-instrumentation-pymysql==0.36b0
|
||||
# via -r ./engine/requirements.in
|
||||
opentelemetry-instrumentation-wsgi==0.36b0
|
||||
# via -r ./engine/requirements.in
|
||||
opentelemetry-proto==1.15.0
|
||||
# via opentelemetry-exporter-otlp-proto-grpc
|
||||
opentelemetry-sdk==1.15.0
|
||||
# via opentelemetry-exporter-otlp-proto-grpc
|
||||
opentelemetry-semantic-conventions==0.36b0
|
||||
# via
|
||||
# opentelemetry-instrumentation-celery
|
||||
# opentelemetry-instrumentation-dbapi
|
||||
# opentelemetry-instrumentation-wsgi
|
||||
# opentelemetry-sdk
|
||||
opentelemetry-util-http==0.36b0
|
||||
# via opentelemetry-instrumentation-wsgi
|
||||
pem==23.1.0
|
||||
# via django-sns-view
|
||||
phonenumbers==8.10.0
|
||||
# via -r ./engine/requirements.in
|
||||
prometheus-client==0.16.0
|
||||
# via -r ./engine/requirements.in
|
||||
prompt-toolkit==3.0.43
|
||||
# via click-repl
|
||||
proto-plus==1.23.0
|
||||
# via google-cloud-firestore
|
||||
protobuf==4.25.2
|
||||
# via
|
||||
# google-api-core
|
||||
# google-cloud-firestore
|
||||
# googleapis-common-protos
|
||||
# grpcio-status
|
||||
# opentelemetry-proto
|
||||
# proto-plus
|
||||
psutil==5.9.4
|
||||
# via -r ./engine/requirements.in
|
||||
psycopg2==2.9.3
|
||||
# via -r ./engine/requirements.in
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pycodestyle==2.11.1
|
||||
# via autopep8
|
||||
pycparser==2.21
|
||||
# via cffi
|
||||
pyjwt==2.8.0
|
||||
# via
|
||||
# social-auth-core
|
||||
# twilio
|
||||
pymdown-extensions==10.0
|
||||
# via -r ./engine/requirements.in
|
||||
pymysql==1.1.0
|
||||
# via -r ./engine/requirements.in
|
||||
pyopenssl==23.2.0
|
||||
# via django-sns-view
|
||||
pyparsing==3.1.1
|
||||
# via httplib2
|
||||
python-dateutil==2.8.2
|
||||
# via
|
||||
# botocore
|
||||
# celery
|
||||
# faker
|
||||
# icalendar
|
||||
# recurring-ical-events
|
||||
python-telegram-bot==13.13
|
||||
# via -r ./engine/requirements.in
|
||||
python3-openid==3.2.0
|
||||
# via social-auth-core
|
||||
pytz==2024.1
|
||||
# via
|
||||
# apscheduler
|
||||
# djangorestframework
|
||||
# icalendar
|
||||
# python-telegram-bot
|
||||
# recurring-ical-events
|
||||
# twilio
|
||||
# x-wr-timezone
|
||||
pyyaml==6.0.1
|
||||
# via
|
||||
# drf-spectacular
|
||||
# pymdown-extensions
|
||||
recurring-ical-events==2.1.0
|
||||
# via -r ./engine/requirements.in
|
||||
redis==5.0.1
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# celery
|
||||
# django-redis
|
||||
referencing==0.33.0
|
||||
# via
|
||||
# jsonschema
|
||||
# jsonschema-specifications
|
||||
regex==2021.11.2
|
||||
# via -r ./engine/requirements.in
|
||||
requests==2.31.0
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# cachecontrol
|
||||
# django-anymail
|
||||
# django-sns-view
|
||||
# google-api-core
|
||||
# google-cloud-storage
|
||||
# requests-oauthlib
|
||||
# social-auth-core
|
||||
# twilio
|
||||
requests-oauthlib==1.3.1
|
||||
# via social-auth-core
|
||||
rpds-py==0.18.0
|
||||
# via
|
||||
# jsonschema
|
||||
# referencing
|
||||
rsa==4.9
|
||||
# via google-auth
|
||||
s3transfer==0.10.0
|
||||
# via boto3
|
||||
six==1.16.0
|
||||
# via
|
||||
# apscheduler
|
||||
# django-rest-polymorphic
|
||||
# python-dateutil
|
||||
# twilio
|
||||
slack-export-viewer==1.1.4
|
||||
# via -r ./engine/requirements.in
|
||||
slack-sdk==3.21.3
|
||||
# via -r ./engine/requirements.in
|
||||
social-auth-app-django==5.3.0
|
||||
# via -r ./engine/requirements.in
|
||||
social-auth-core==4.5.2
|
||||
# via social-auth-app-django
|
||||
soupsieve==2.5
|
||||
# via beautifulsoup4
|
||||
sqlparse==0.4.4
|
||||
# via
|
||||
# django
|
||||
# django-debug-toolbar
|
||||
# django-silk
|
||||
toml==0.10.2
|
||||
# via django-migration-linter
|
||||
tornado==6.4
|
||||
# via python-telegram-bot
|
||||
tqdm==4.66.2
|
||||
# via django-mirage-field
|
||||
twilio==6.37.0
|
||||
# via -r ./engine/requirements.in
|
||||
typing-extensions==4.9.0
|
||||
# via opentelemetry-sdk
|
||||
tzdata==2024.1
|
||||
# via celery
|
||||
tzlocal==5.2
|
||||
# via apscheduler
|
||||
uritemplate==4.1.1
|
||||
# via
|
||||
# drf-spectacular
|
||||
# google-api-python-client
|
||||
urllib3==1.26.18
|
||||
# via
|
||||
# -r ./engine/requirements.in
|
||||
# botocore
|
||||
# requests
|
||||
uwsgi==2.0.21
|
||||
# via -r ./engine/requirements.in
|
||||
vine==5.1.0
|
||||
# via
|
||||
# amqp
|
||||
# celery
|
||||
# kombu
|
||||
wcwidth==0.2.13
|
||||
# via prompt-toolkit
|
||||
werkzeug==3.0.1
|
||||
# via flask
|
||||
whitenoise==5.3.0
|
||||
# via -r ./engine/requirements.in
|
||||
wrapt==1.16.0
|
||||
# via
|
||||
# deprecated
|
||||
# opentelemetry-instrumentation
|
||||
# opentelemetry-instrumentation-dbapi
|
||||
x-wr-timezone==0.0.6
|
||||
# via recurring-ical-events
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue