Skip to content

Commit

Permalink
Update versions + dependencies, support arm/m1/aarch64 (#34)
Browse files Browse the repository at this point in the history
Updated versions/dependencies:
* Updates Python to 3.9
* Updates Kafka to 3.1
* Updates container from buster to bullseye to pull in latest stable
* Updates sqlalchemy and psycopg2-binary to pull in newer versions fixing dependencies
* Minor flask update
* Update mypy to address dependency errors
* Update test cases for coroutines/async functions

Updates to be able to build on non-amd64 architectures like aarch64 and M1 macs:
* Add build-essential to container setup to bring in gcc, make, etc
* Pull in librdkafka dev headers and files for containers building against kafka
* Make sure we have the latest python setuptools

Updated README to point to the right FIDS port number (8080)
  • Loading branch information
polastre authored Mar 29, 2022
1 parent c4a9f55 commit d0012e9
Show file tree
Hide file tree
Showing 26 changed files with 501 additions and 396 deletions.
11 changes: 6 additions & 5 deletions .github/workflows/dockerimage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
strategy:
matrix:
node-version: [12.16.3]
python-version: [3.7]
python-version: [3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
Expand All @@ -32,8 +32,8 @@ jobs:
node-version: ${{ matrix.node-version }}
- name: Connector
env:
INIT_CMD_TIME: "pitr 1584126630"
INIT_CMD_ARGS: "events \"flightplan departure arrival cancellation\""
INIT_CMD_TIME: "pitr 1647160200"
INIT_CMD_ARGS: "events \"flifo\""
KAFKA_TOPIC_NAME: feed1
run: |
cd connector
Expand All @@ -59,7 +59,8 @@ jobs:
env:
INIT_CMD_ARGS: "events \"flightplan departure arrival cancellation position\""
run: |
docker-compose up -d --build
docker-compose build --parallel
docker-compose up -d
python3 -m pip install webdriver-manager
python3 -m pip install selenium
python3 ci_ping_frontend.py
Expand All @@ -71,6 +72,6 @@ jobs:
INIT_CMD_TIME: "pitr 1577880000"
INIT_CMD_ARGS: "events \"flightplan departure arrival cancellation position\""
run: |
docker-compose up -d --build
docker-compose up -d
./ci_performance_regression_test.sh
2 changes: 1 addition & 1 deletion Makefile.inc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ venv: venv/bin/activate

venv/bin/activate:
test -d venv || $(PYTHON) -m venv venv
. venv/bin/activate && $(PYTHON) -m pip install pip-tools
. venv/bin/activate && $(PYTHON) -m pip install pip-tools && $(PYTHON) -m pip install --upgrade setuptools

pip-compile: venv
. venv/bin/activate && make -C requirements all
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ each container. The services will log periodically as Firehose messages are
received, while the sample webapps will produce some initial log output and
then only log as requests are made to them.

You can test out the FIDS sample application by visiting http://localhost:5000
You can test out the FIDS sample application by visiting http://localhost:8080
in your web browser (if not running Docker locally, use the Docker host's
address). The map sample application can be accessed at http://localhost:5001.

If you are running on Mac OS Monterrey or later, disable "AirPlay Receiver"
in System Preferences > Sharing > AirPlay Receiver. It runs on port 5000,
which is the same port as the FIDS backend application.


## Firestarter Components

Expand Down
8 changes: 5 additions & 3 deletions ci_performance_regression_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ start=$(date +%s)

sleep 300

flights_count=$(docker exec -i $(docker ps | grep firestarter_db-updater_1 | awk 'NF>1{print $NF}') sqlite3 /home/firestarter/app/db/flights.db 'SELECT COUNT(*) FROM flights')
dbupdater_container=$(docker ps | grep firestarter_db-updater_1 | awk 'NF>1{print $NF}')
flights_count=$(docker exec -i ${dbupdater_container} sqlite3 /home/firestarter/app/db/flights.db 'SELECT COUNT(*) FROM flights')

positions_count=$(docker exec -i $(docker ps | grep firestarter_timescaledb_1 | awk 'NF>1{print $NF}') psql -qAt -U postgres -c 'SELECT COUNT(*) FROM positions')
timescaledb_container=$(docker ps | grep firestarter_timescaledb_1 | awk 'NF>1{print $NF}')
positions_count=$(docker exec -i ${timescaledb_container} psql -qAt -U postgres -c 'SELECT COUNT(*) FROM positions')

positions_time_processed=$(docker exec -i $(docker ps | grep firestarter_timescaledb_1 | awk 'NF>1{print $NF}') psql -qAt -U postgres -c 'SELECT MAX(extract(epoch from time)) - MIN(extract(epoch from time)) as time_diff FROM positions' | tr -d '\r')
positions_time_processed=$(docker exec -i ${timescaledb_container} psql -qAt -U postgres -c 'SELECT MAX(extract(epoch from time)) - MIN(extract(epoch from time)) as time_diff FROM positions' | tr -d '\r')

end=$(date +%s)

Expand Down
4 changes: 2 additions & 2 deletions connector/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FROM python:3.8-slim-buster
FROM python:3.9-slim-bullseye

LABEL org.opencontainers.image.source=https://github.com/flightaware/firestarter

RUN apt-get update && apt-get install -y make
RUN apt-get update && apt-get install -y build-essential librdkafka-dev
RUN id -u firestarter || useradd -u 8081 firestarter -c "FIRESTARTER User" -m -s /bin/sh
USER firestarter
WORKDIR /home/firestarter
Expand Down
2 changes: 1 addition & 1 deletion connector/requirements/base.in
Original file line number Diff line number Diff line change
@@ -1 +1 @@
confluent-kafka==1.4.2
confluent-kafka==1.8.2
47 changes: 19 additions & 28 deletions connector/requirements/base.txt
Original file line number Diff line number Diff line change
@@ -1,34 +1,25 @@
#
# This file is autogenerated by pip-compile
# This file is autogenerated by pip-compile with python 3.9
# To update, run:
#
# pip-compile --generate-hashes --output-file=base.txt base.in
#
confluent-kafka==1.4.2 \
--hash=sha256:1b10a9e4ede8c7ee382c16075b55275963d3fe9b8eec3fc511d0868847cc6eed \
--hash=sha256:1c46cbc2eb0876f0cdbd33ed7ea684ed1b009a25b65cf87736d3506d2f4ae57e \
--hash=sha256:2500a78334d642e49b98710722e548c0e3d5dc4c6eae63f02d66448678ed2922 \
--hash=sha256:2515771b18d190df2182881abcf02fe8fde0aab567402ff36295b35cd495de65 \
--hash=sha256:3150c8875511e2cea4086206f3c10448f744c9c35f9033fd0874c8c55f7b87e2 \
--hash=sha256:4b0a3c47f9183570e9ee77ae8c36080fbc1996045251e25772944e4dadf1db21 \
--hash=sha256:4f875798bbc766767b9c6ed95b084fde851e0bf074527ab0daffa87f4e750635 \
--hash=sha256:515049659b045b99e0464d5ff5def4785478490563bc5ac1341a4f29dc335e82 \
--hash=sha256:52088adf1abdf3a384a54ec7a3bfaa0b61e5da8cc03a2e26a8351bbbf49f72a9 \
--hash=sha256:5342d3ff348b8082eaa4c63f4c82a72f3bf0ef8efa12a8580c890fa6e160f761 \
--hash=sha256:55734905c5a8642e596cf1e60ec4d86f05d31a185cbc71d1c73430bb0c08db19 \
--hash=sha256:624349587e97135996383c58edd8d53b38c57d653e6536c1f816049fc75faea3 \
--hash=sha256:804a7d71b3cb61444930af67986064c9555b8c33f05a27003ea314d6c847e522 \
--hash=sha256:931231853cec933addfafa27772177dcfab899d82e2e39fe7485c0602088daf7 \
--hash=sha256:a4f5edc1d7958bbf5f12ba83c1f83e22a66daa9c4318c7f28c5bb1db9289fe09 \
--hash=sha256:a591936a90095144451f041315239b2c823b7a15fa820cf45e45c422591345d6 \
--hash=sha256:a6eb8f3f553e98a6ef0d00f9cf8e4e8dde73c914a43a00fecef97330de80bcea \
--hash=sha256:aa48215edcf16071d44ba29951c82c5f541d5ec915590aff0b4240e8e13f3ba3 \
--hash=sha256:bfacb9fa0e3a5e31a5ac9a5da15de656e95e7153e022ec5620095b76a6098ec0 \
--hash=sha256:bfbcbe7068690369ac2de3fe953854de34ad5e901157e96bcb990ca8b86d1d93 \
--hash=sha256:c2660807e5c1ecd723e280f76918794c3fd84595000c1e8de1f254f5d89a785c \
--hash=sha256:c42ff838ee5e248f95f65b5adca4e2fdd4a2817fa26cede36d83a426e0f1370c \
--hash=sha256:c5b741764d8ea2b8334fdaf4b56297c5bab780142f1c0cad0bd642cac30cb89e \
--hash=sha256:dac33a04f73093de275953867a05de244560aa9842def6316cbb52bc0f02eff3 \
--hash=sha256:f1695a00789795f9f798588bb62688b563baf471a76ca20fa01c957844938d7d \
--hash=sha256:f25836e03559a381ba74b9a6940b716e61ba8ae2db2d5d3a40accbc60617e1af \
confluent-kafka==1.8.2 \
--hash=sha256:02b78bb6d1199ea350240eae1f4415f22014896199a46edf85f779a69751f984 \
--hash=sha256:039c68379f9a5ece6e45a683ec7abebb95a9dac904ec4e2f9d93738e1cf6fab2 \
--hash=sha256:1df83fa20e4fe032651ad73ce0ba85dd14a7fabff6066c9cb20e944d2748e72b \
--hash=sha256:3d66e8c1a6a15144ca5b176170adbf30207c27813c76202c56abf52ef2b475e1 \
--hash=sha256:4f26052ef53212752039cd1d9e932b2feb6a0975d717ab070af323629a72a0b9 \
--hash=sha256:585bc8e8aa7d6fbd46dc0b2da3d4b1fd8457555288fee1ecba6af2c97ab738cc \
--hash=sha256:748813f47641dd65dd8d3bae8dcb3ce96a3e455c12b467d4b35e1fc880362d01 \
--hash=sha256:ac7155e1b9a94445ed8eecf691c80c61407148813808a2aa1cba0babbe197e77 \
--hash=sha256:add05db627435697d4ed8f81b3ce1081931770813a989fd775910865f07d694d \
--hash=sha256:ae75d3f4bc3d2109663912d77911c45aaa2939bde3694fc05e75842c806fa760 \
--hash=sha256:b679c3f9f555e87a9cbb043c676473c30d12182609e075be85afd98f84bcc863 \
--hash=sha256:b79e836c3554bc51c6837a8a0152f7521c9bf31342f5b8e21eba6b28044fa585 \
--hash=sha256:b7cb6fa3d44972e3670e0b3b054186a6006e6fd664600cfe70e008fad2443d16 \
--hash=sha256:d50b091770d277714766943d885ad6b2c5c427e67328706cfd33dc86eef540c9 \
--hash=sha256:e49382a943fb47813f421e913cc6c87cd1d4bfdecad1785efa0dacada7003d84 \
--hash=sha256:ead7f18c516f7bcb886b643fa78ff2a2142270adaf931ba0311b62e9a047e6ca \
--hash=sha256:f843680e183479f6e0732b593ea3235c836a5bb2de6be3819a11b891b6af1dde
# via -r base.in
4 changes: 2 additions & 2 deletions connector/requirements/dev.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-c base.txt
mypy==0.740
mypy
black
pylint==2.4.4
pylint
94 changes: 55 additions & 39 deletions connector/requirements/dev.txt
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
#
# This file is autogenerated by pip-compile
# This file is autogenerated by pip-compile with python 3.9
# To update, run:
#
# pip-compile --generate-hashes --output-file=dev.txt dev.in
#
appdirs==1.4.3 \
--hash=sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92 \
--hash=sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e \
--hash=sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e
# via black
astroid==2.3.3 \
--hash=sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a \
--hash=sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42 \
--hash=sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42
# via pylint
black==20.8b1 \
--hash=sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea \
--hash=sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea
# via -r dev.in
click==7.1.2 \
--hash=sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a \
--hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc \
--hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc
# via black
isort==4.3.21 \
--hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \
--hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd \
--hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd
# via pylint
lazy-object-proxy==1.4.3 \
--hash=sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d \
Expand All @@ -44,39 +44,50 @@ lazy-object-proxy==1.4.3 \
--hash=sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a \
--hash=sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357 \
--hash=sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4 \
--hash=sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0 \
--hash=sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0
# via astroid
mccabe==0.6.1 \
--hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \
--hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \
--hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f
# via pylint
mypy==0.942 \
--hash=sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e \
--hash=sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16 \
--hash=sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2 \
--hash=sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c \
--hash=sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67 \
--hash=sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5 \
--hash=sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b \
--hash=sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6 \
--hash=sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58 \
--hash=sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d \
--hash=sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17 \
--hash=sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0 \
--hash=sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca \
--hash=sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6 \
--hash=sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322 \
--hash=sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534 \
--hash=sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3 \
--hash=sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db \
--hash=sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904 \
--hash=sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c \
--hash=sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46 \
--hash=sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8 \
--hash=sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee
# via -r dev.in
mypy-extensions==0.4.3 \
--hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
--hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \
# via black, mypy
mypy==0.740 \
--hash=sha256:1521c186a3d200c399bd5573c828ea2db1362af7209b2adb1bb8532cea2fb36f \
--hash=sha256:31a046ab040a84a0fc38bc93694876398e62bc9f35eca8ccbf6418b7297f4c00 \
--hash=sha256:3b1a411909c84b2ae9b8283b58b48541654b918e8513c20a400bb946aa9111ae \
--hash=sha256:48c8bc99380575deb39f5d3400ebb6a8a1cb5cc669bbba4d3bb30f904e0a0e7d \
--hash=sha256:540c9caa57a22d0d5d3c69047cc9dd0094d49782603eb03069821b41f9e970e9 \
--hash=sha256:672e418425d957e276c291930a3921b4a6413204f53fe7c37cad7bc57b9a3391 \
--hash=sha256:6ed3b9b3fdc7193ea7aca6f3c20549b377a56f28769783a8f27191903a54170f \
--hash=sha256:9371290aa2cad5ad133e4cdc43892778efd13293406f7340b9ffe99d5ec7c1d9 \
--hash=sha256:ace6ac1d0f87d4072f05b5468a084a45b4eda970e4d26704f201e06d47ab2990 \
--hash=sha256:b428f883d2b3fe1d052c630642cc6afddd07d5cd7873da948644508be3b9d4a7 \
--hash=sha256:d5bf0e6ec8ba346a2cf35cb55bf4adfddbc6b6576fcc9e10863daa523e418dbb \
--hash=sha256:d7574e283f83c08501607586b3167728c58e8442947e027d2d4c7dcd6d82f453 \
--hash=sha256:dc889c84241a857c263a2b1cd1121507db7d5b5f5e87e77147097230f374d10b \
--hash=sha256:f4748697b349f373002656bf32fede706a0e713d67bfdcf04edf39b1f61d46eb \
# via -r dev.in
--hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
# via
# black
# mypy
pathspec==0.8.0 \
--hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \
--hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 \
--hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061
# via black
pylint==2.4.4 \
--hash=sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd \
--hash=sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4 \
--hash=sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4
# via -r dev.in
regex==2020.4.4 \
--hash=sha256:08119f707f0ebf2da60d2f24c2f39ca616277bb67ef6c92b72cbf90cbe3a556b \
Expand All @@ -99,16 +110,20 @@ regex==2020.4.4 \
--hash=sha256:ccccdd84912875e34c5ad2d06e1989d890d43af6c2242c6fcfa51556997af6cd \
--hash=sha256:e91ba11da11cf770f389e47c3f5c30473e6d85e06d7fd9dcba0017d2867aab4a \
--hash=sha256:ea4adf02d23b437684cd388d557bf76e3afa72f7fed5bbc013482cc00c816948 \
--hash=sha256:fb95debbd1a824b2c4376932f2216cc186912e389bdb0e27147778cf6acb3f89 \
--hash=sha256:fb95debbd1a824b2c4376932f2216cc186912e389bdb0e27147778cf6acb3f89
# via black
six==1.14.0 \
--hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \
--hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c \
--hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c
# via astroid
toml==0.10.2 \
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via black
tomli==2.0.1 \
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
# via mypy
typed-ast==1.4.1 \
--hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \
--hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \
Expand All @@ -130,13 +145,14 @@ typed-ast==1.4.1 \
--hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \
--hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \
--hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \
--hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \
# via black, mypy
typing-extensions==3.7.4.2 \
--hash=sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5 \
--hash=sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae \
--hash=sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392 \
# via black, mypy
--hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7
# via black
typing-extensions==4.1.1 \
--hash=sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42 \
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
# via
# black
# mypy
wrapt==1.11.2 \
--hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 \
--hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1
# via astroid
Loading

0 comments on commit d0012e9

Please sign in to comment.