diff --git a/TODO.md b/TODO.md index 530dce0e..32f8cde9 100644 --- a/TODO.md +++ b/TODO.md @@ -13,7 +13,6 @@ - Upgrade REDIS server on RADIS - Unfix pyright and its VS code extension -- Move over to Celery with Redis backend and get rid of RabbitMQ - Replace sherlock on RADIS - Use DicomLogEntry during C-STORE - Allow to restart or cancel specific dicom task @@ -116,7 +115,7 @@ - Get rid of 7z archive feature. It think it was never used. - Allow to search multiple source servers with one query (maybe only in dicom explorer) - Bring everything behind Nginx as reverse proxy - -- Orthanc, Flower, Rabbit Management Console should then be directly behind Nginx (without Django-revproxy) + -- Orthanc and Flower should then be directly behind Nginx (without Django-revproxy) -- Use authentication module of nginx -- -- @@ -144,7 +143,7 @@ - Rewrite dicom_connector to use asyncio (wrap all pynetdicom calls in asyncio.to_thread) -- I don't think that this will gain any performance improvements, so maybe not worth it - Look out for a django-revproxy fix (see ) - -- Flower and Rabbit Management Console are running behind a Django internal reverse proxy (django-revproxy) so that only admins can access them + -- Flower is running behind a Django internal reverse proxy (django-revproxy) so that only admins can access them -- Unfortunately the last released django-revproxy is broken with latest Django -- So we use the master branch here directly from Github (see pyproject.toml) -- Alternatively we could use diff --git a/adit/core/templates/core/admin_section.html b/adit/core/templates/core/admin_section.html index 971e23f6..be791330 100644 --- a/adit/core/templates/core/admin_section.html +++ b/adit/core/templates/core/admin_section.html @@ -37,9 +37,6 @@
Admin Tools
  • Flower (Celery Monitoring)
  • -
  • - RabbitMQ Management Console -
  • Orthanc 1
  • diff --git a/adit/core/urls.py b/adit/core/urls.py index 97329304..057bd1fd 100644 --- a/adit/core/urls.py +++ b/adit/core/urls.py @@ -6,7 +6,6 @@ HomeView, Orthanc1ProxyView, Orthanc2ProxyView, - RabbitManagementProxyView, UpdatePreferencesView, admin_section, ) @@ -31,7 +30,6 @@ HomeView.as_view(), name="home", ), - RabbitManagementProxyView.as_url(), FlowerProxyView.as_url(), Orthanc1ProxyView.as_url(), Orthanc2ProxyView.as_url(), diff --git a/adit/core/views.py b/adit/core/views.py index dfc040ae..c87aa597 100644 --- a/adit/core/views.py +++ b/adit/core/views.py @@ -441,15 +441,6 @@ def as_url(cls): return re_path(rf"^{cls.url_prefix}/(?P.*)$", cls.as_view()) # type: ignore -class RabbitManagementProxyView(AdminProxyView): - upstream = ( - f"http://{settings.RABBIT_MANAGEMENT_HOST}:" - f"{settings.RABBIT_MANAGEMENT_PORT}" # type: ignore - ) - url_prefix = "rabbit" - rewrite = ((rf"^/{url_prefix}$", r"/"),) - - class FlowerProxyView(AdminProxyView): upstream = f"http://{settings.FLOWER_HOST}:{settings.FLOWER_PORT}" # type: ignore url_prefix = "flower" diff --git a/adit/settings/base.py b/adit/settings/base.py index be7e44c7..a51fd6c9 100644 --- a/adit/settings/base.py +++ b/adit/settings/base.py @@ -295,21 +295,14 @@ # Channels ASGI_APPLICATION = "adit.asgi.application" -# RabbitMQ is used as Celery message broker -RABBITMQ_URL = env.str("RABBITMQ_URL", default="amqp://localhost") # type: ignore - -# Rabbit Management console is integrated in ADIT by using an reverse -# proxy (django-revproxy).This allows to use the authentication of ADIT. -# But as RabbitMQ authentication can't be disabled we have to login -# there with "guest" as username and password again. -RABBIT_MANAGEMENT_HOST = env.str("RABBIT_MANAGEMENT_HOST", default="localhost") # type: ignore -RABBIT_MANAGEMENT_PORT = env.int("RABBIT_MANAGEMENT_PORT", default=15672) # type: ignore +# Redis is used as the Celery backend and for distributed locks +REDIS_URL = env.str("REDIS_URL", default="redis://localhost:6379/0") # type: ignore # Celery # see https://github.com/celery/celery/issues/5026 for how to name configs if USE_TZ: CELERY_TIMEZONE = TIME_ZONE -CELERY_BROKER_URL = RABBITMQ_URL +CELERY_BROKER_URL = REDIS_URL CELERY_WORKER_HIJACK_ROOT_LOGGER = False CELERY_IGNORE_RESULT = True CELERY_TASK_DEFAULT_QUEUE = "default_queue" @@ -325,9 +318,6 @@ FLOWER_HOST = env.str("FLOWER_HOST", default="localhost") # type: ignore FLOWER_PORT = env.int("FLOWER_PORT", default=5555) # type: ignore -# Redis is used for distributed locks -REDIS_URL = env.str("REDIS_URL", default="redis://localhost:6379/0") # type: ignore - # Orthanc servers are integrated in ADIT by using a reverse proxy (django-revproxy). ORTHANC1_HOST = env.str("ORTHANC1_HOST", default="localhost") # type: ignore ORTHANC1_HTTP_PORT = env.int("ORTHANC1_HTTP_PORT", default=6501) # type: ignore diff --git a/compose/docker-compose.base.yml b/compose/docker-compose.base.yml index e350b548..a90c2646 100644 --- a/compose/docker-compose.base.yml +++ b/compose/docker-compose.base.yml @@ -5,16 +5,12 @@ x-app: &default-app - /mnt:/mnt depends_on: - postgres - - rabbit - redis environment: USE_DOCKER: 1 DATABASE_URL: "psql://postgres:postgres@postgres:5432/postgres" - RABBITMQ_URL: "amqp://rabbit" REDIS_URL: "redis://redis:6379/0" DJANGO_STATIC_ROOT: "/var/www/adit/static/" - RABBIT_MANAGEMENT_HOST: "rabbit" - RABBIT_MANAGEMENT_PORT: "15672" FLOWER_HOST: "flower" FLOWER_PORT: "5555" ORTHANC1_HOST: "orthanc1" @@ -65,25 +61,10 @@ services: - "5555" command: > bash -c " - wait-for-it -s rabbit:5672 -t 60 && - celery --broker=amqp://rabbit/ flower --url_prefix=flower + wait-for-it -s redis:6379 -t 60 && + celery --broker=redis://redis:6379/0 flower --url_prefix=flower " - # RabbitMQ authentication can't be disabled. So when we try to log into - # the management console we have to use "guest" as username and password. - # The real authentication happens by ADIT itself, because the management - # console is behind a ProxyView. - rabbit: - image: rabbitmq:3.12.2-management - expose: - - "5672" - - "15672" - configs: - - source: rabbit_config - target: /etc/rabbitmq/rabbitmq.conf - volumes: - - rabbit_data:/var/lib/rabbitmq - redis: image: redis:7.2.3 expose: @@ -114,8 +95,6 @@ services: - orthanc2_data:/var/lib/orthanc/db configs: - rabbit_config: - file: ./rabbitmq/rabbitmq.conf orthanc1_config: file: ./orthanc/orthanc1.json orthanc2_config: @@ -124,7 +103,6 @@ configs: volumes: adit_data: postgres_data: - rabbit_data: redis_data: flower_data: orthanc1_data: diff --git a/compose/docker-compose.dev.yml b/compose/docker-compose.dev.yml index 90a1defe..68d84696 100644 --- a/compose/docker-compose.dev.yml +++ b/compose/docker-compose.dev.yml @@ -86,11 +86,6 @@ services: - full - extra - rabbit: - profiles: - - full - - extra - redis: profiles: - full diff --git a/compose/docker-compose.prod.yml b/compose/docker-compose.prod.yml index e926eadd..27c95ca2 100644 --- a/compose/docker-compose.prod.yml +++ b/compose/docker-compose.prod.yml @@ -69,11 +69,6 @@ services: deploy: replicas: 1 - rabbit: - restart: always - deploy: - replicas: 1 - redis: restart: always deploy: diff --git a/compose/rabbitmq/rabbitmq.conf b/compose/rabbitmq/rabbitmq.conf deleted file mode 100644 index 81397025..00000000 --- a/compose/rabbitmq/rabbitmq.conf +++ /dev/null @@ -1,13 +0,0 @@ -# https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbit/docs/rabbitmq.conf.example - -# The defaults used in the docker image -loopback_users.guest = false -listeners.tcp.default = 5672 -management.tcp.port = 15672 - -# Extend the consumer timeout (the default is 30 minutes) as otherwise workers get killed -# that take longer to acknowledge a task. But in our case this is mostly the case as -# other (maybe higher priortized) DICOM tasks are before them in the queue or the DICOM -# task was scheduled. -# https://www.rabbitmq.com/consumers.html#acknowledgement-timeout -consumer_timeout = 2419200000 # 4 weeks diff --git a/poetry.lock b/poetry.lock index 211989ea..3ccc926d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -271,6 +271,7 @@ click-plugins = ">=1.1.1" click-repl = ">=0.2.0" kombu = ">=5.3.3,<6.0" python-dateutil = ">=2.8.2" +redis = {version = ">=4.5.2,<4.5.5 || >4.5.5,<6.0.0", optional = true, markers = "extra == \"redis\""} tzdata = ">=2022.7" vine = ">=5.1.0,<6.0" @@ -1834,6 +1835,49 @@ files = [ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, ] +[[package]] +name = "numpy" +version = "1.26.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, + {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, + {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, + {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, + {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, + {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, + {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, + {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, + {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, + {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, +] + [[package]] name = "openpyxl" version = "3.1.2" @@ -1859,64 +1903,6 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -[[package]] -name = "pandas" -version = "2.1.0" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pandas-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40dd20439ff94f1b2ed55b393ecee9cb6f3b08104c2c40b0cb7186a2f0046242"}, - {file = "pandas-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4f38e4fedeba580285eaac7ede4f686c6701a9e618d8a857b138a126d067f2f"}, - {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e6a0fe052cf27ceb29be9429428b4918f3740e37ff185658f40d8702f0b3e09"}, - {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d81e1813191070440d4c7a413cb673052b3b4a984ffd86b8dd468c45742d3cc"}, - {file = "pandas-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb20252720b1cc1b7d0b2879ffc7e0542dd568f24d7c4b2347cb035206936421"}, - {file = "pandas-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:38f74ef7ebc0ffb43b3d633e23d74882bce7e27bfa09607f3c5d3e03ffd9a4a5"}, - {file = "pandas-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cda72cc8c4761c8f1d97b169661f23a86b16fdb240bdc341173aee17e4d6cedd"}, - {file = "pandas-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d97daeac0db8c993420b10da4f5f5b39b01fc9ca689a17844e07c0a35ac96b4b"}, - {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c58b1113892e0c8078f006a167cc210a92bdae23322bb4614f2f0b7a4b510f"}, - {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629124923bcf798965b054a540f9ccdfd60f71361255c81fa1ecd94a904b9dd3"}, - {file = "pandas-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:70cf866af3ab346a10debba8ea78077cf3a8cd14bd5e4bed3d41555a3280041c"}, - {file = "pandas-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d53c8c1001f6a192ff1de1efe03b31a423d0eee2e9e855e69d004308e046e694"}, - {file = "pandas-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86f100b3876b8c6d1a2c66207288ead435dc71041ee4aea789e55ef0e06408cb"}, - {file = "pandas-2.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28f330845ad21c11db51e02d8d69acc9035edfd1116926ff7245c7215db57957"}, - {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a6ccf0963db88f9b12df6720e55f337447aea217f426a22d71f4213a3099a6"}, - {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99e678180bc59b0c9443314297bddce4ad35727a1a2656dbe585fd78710b3b9"}, - {file = "pandas-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b31da36d376d50a1a492efb18097b9101bdbd8b3fbb3f49006e02d4495d4c644"}, - {file = "pandas-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0164b85937707ec7f70b34a6c3a578dbf0f50787f910f21ca3b26a7fd3363437"}, - {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, -] - -[package.dependencies] -numpy = {version = ">=1.23.2", markers = "python_version >= \"3.11\""} -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.1" - -[package.extras] -all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] -aws = ["s3fs (>=2022.05.0)"] -clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] -compression = ["zstandard (>=0.17.0)"] -computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2022.05.0)"] -gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] -hdf5 = ["tables (>=3.7.0)"] -html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] -mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] -spss = ["pyreadstat (>=1.1.5)"] -sql-other = ["SQLAlchemy (>=1.4.36)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.8.0)"] - [[package]] name = "pandas" version = "2.1.3" @@ -1952,7 +1938,10 @@ files = [ ] [package.dependencies] -numpy = {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""} +numpy = [ + {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, +] python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.1" @@ -3710,4 +3699,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "bbbb31079d91f77013a4a90157d60245ed2137b4f8ef858aa2005e25651e132d" +content-hash = "fad6b4f210ee91329631779faa3fcf434deb8c6e0f7d681527a79b4cd4f43f02" diff --git a/pyproject.toml b/pyproject.toml index afb7ba31..c3446e92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ license = "GPL-3.0-or-later" adrf = "^0.1.1" aiofiles = "^23.1.0" asyncinotify = "^4.0.1" -celery = "^5.2.7" +celery = {extras = ["redis"], version = "^5.3.5"} channels = "^4.0.0" channels-redis = "^4.0.0" cryptography = "^41.0.1"