Hope Core Dependencies
Full updated list of dependencies can be checked in the project's pyproject.toml ⧉
Here a brief list of the relevant technologies
- Django
- Elasticsearch
- Graphene
- Celery
- Django REST Framework
- PIL
- React
- Tesseract
pyproject.toml
[tool.black]
line-length = 120
include = '\.pyi?$'
exclude = '''
/(
\.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| venv
| _build
| buck-out
| build
| dist
| migrations
| snapshots
| __pypackages__
| frontend
| uv-cache
)/
'''
# TODO: remove migrations exclude rule once it won't create much conflicts between feature branches and develop
[tool.isort]
py_version = 312
profile = "black"
default_section = "THIRDPARTY"
known_first_party = [
"account",
"core",
"grievance",
"household",
"id_management",
"intervention",
"payment",
"program",
"targeting.apps.TargetingConfig",
"utils",
"registration_datahub",
"mptt",
"django_extensions",
"registration_data",
"sanction_list",
"accountability",
]
known_django = "django"
sections = ["FUTURE", "STDLIB", "DJANGO", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
include_trailing_comma = true
skip = ["migrations", "snapshots", "venv", ".venv", "__pypackages__", "frontend", ".tox", "uv-cache"]
[tool.mypy]
python_version = 3.13
show_error_codes = true
exclude = [
"migrations",
"venv",
"snapshots",
"__pypackages__",
"build",
"uv-cache",
"manage.py"
]
strict = true
ignore_missing_imports = true # TODO
follow_imports = "skip"
# TODO: remove one, fix errors, repeat
disable_error_code = [
"var-annotated", # this enforces Django Model fields to have type annotations
"attr-defined",
"misc", # cannot subclass DjangoObjectType
"union-attr",
"type-arg", # this misses type parameters for graphene.ObjectType
"no-any-return", # this enforces adding return None for function that returns None
]
[tool.django-stubs]
django_settings_module = "hct_mis_api.settings"
[tool.uv]
package = true
[dependency-groups]
dev = [
"mypy==0.982",
"django-stubs~=1.12.0",
"django-stubs-ext<1.0.0,>=0.7.0",
"djangorestframework-stubs~=1.7.0",
"argh<1.0,>=0.28",
"django-webtest<2.0.0,>=1.9.10",
"faker<18,>=17",
"flake8<7,>=6",
"flake8-absolute-import<2.0.0.0,>=1.0.0.1",
"flake8-bugbear<23.0.0,>=22.9.23",
"flake8-formatter-junit-xml<1.0.0,>=0.0.6",
"freezegun",
"graphene-stubs<1.0,>=0.15",
"ipdb<1.0.0,>=0.13.9",
"isort<6.0.0,>=5.10.1",
"openpyxl-stubs<1.0.0,>=0.1.24",
"parameterized<1.0.0,>=0.8.1",
"parso<1.0.0,>=0.8.3",
"pytest<8.0.0,>=7.4.4",
"pytest-django<5.0.0,>=4.5.2",
"pytest-echo<2.0.0,>=1.7.1",
"selenium==4.29.0",
"webdriver-manager==4.0.2",
"requests-mock<2.0.0,>=1.9.3",
"responses<1.0,>=0.22",
"snapshottest<2.0.0,>=1.0.0a0",
"types-freezegun",
"types-requests==2.31.0.6",
"types-python-dateutil<3.0.0.0,>=2.8.19.2",
"types-pytz<2023.0.0.0,>=2022.4.0.0",
"types-redis<5.0.0.0,>=4.3.21.2",
"unittest-xml-reporting<4.0.0,>=3.2.0",
"watchdog<3.0.0,>=2.1.8",
"wasmer<2.0.0,>=1.1.0",
"pre-commit<4.0.0,>=3.1.1",
"pytest-rerunfailures<14.0,>=13.0",
"pytest-randomly<4.0.0,>=3.15.0",
"pytest-cov<5.0.0,>=4.1.0",
"pytest-xdist<4.0.0,>=3.5.0",
"pytest-repeat<1.0.0,>=0.9.3",
"pytest-html>=4.1.1",
"pytest-vcr>=1.0.2",
"pytest-html-reporter>=0.2.9",
"flaky<4.0.0,>=3.8.1",
"coverage<8.0.0,>=7.3.2",
"tox>=4.25.0",
"tox-uv>=1.25.0",
]
docs = [
"cairosvg>=2.7.1",
"markupsafe>=2.1.5",
"mdx-gh-links>=0.4",
"mkdocs-autolinks-plugin>=0.7.1",
"mkdocs-awesome-pages-plugin>=2.9.3",
"mkdocs-click>=0.8.1",
"mkdocs-ezglossary-plugin>=1.6.10",
"mkdocs-ezlinks-plugin>=0.1.14",
"mkdocs-gen-files>=0.5.0",
"mkdocs-get-deps>=0.2.0",
"mkdocs-link-marker>=0.1.3",
"mkdocs-material>=9.5.15",
"mkdocs-simple-hooks>=0.1.5",
"mkdocs>=1.5.3",
"mkdocstrings[python]>=0.24.1",
"pymdown-extensions>=10.7.1",
"mkdocs-embed-external-markdown>=3.0.2",
"mkdocs-include-markdown-plugin>=6.2.2",
"mkdocs-alias-plugin>=0.8.1",
"pillow>=10.4.0",
"requests>=2.32.3",
"django-environ>=0.11.2",
"mkdocs-pdf-export-plugin>=0.5.10",
"mike>=2.1.3",
"mkdocs-gitsnippet-plugin>=1.2.0",
"mkdocs-macros-plugin>=1.2.0",
"mkdocs-panzoom-plugin>=0.1.1",
]
[project]
name = "hope"
version = "3.2.5"
description = "HCT MIS is UNICEF's humanitarian cash transfer platform."
authors = [
{ name = "Tivix" },
]
dependencies = [
"setuptools==71.1.0",
"defusedxml==0.7.0rc1",
"Django~=3.2.15",
"elasticsearch~=8.14.0",
"graphene-django~=2.14.0",
"openpyxl==3.1.5",
"Jinja2<4.0.0,>=3.1.3",
"MarkupSafe<3.0.0,>=2.1.1",
"PyJWT<3.0.0,>=2.4.0",
"PyYAML<7.0,>=6.0",
"black<24,>=23",
"celery[redis]<6.0.0,>=5.2.7",
"coreapi<3.0.0,>=2.3.3",
"django-admin-cursor-paginator<1.0.0,>=0.1.3",
"django-admin-extra-buttons<2.0.0,>=1.5.4",
"django-admin-sync<1.0,>=0.7",
"django-adminactions<3.0,>=2.1",
"django-adminfilters==2.4.2",
"django-advanced-filters<3.0.0,>=2.0.0",
"django-auditlog<3.0.0,>=2.1.1",
"django-celery-beat<3.0.0,>=2.3.0",
"django-celery-results<3.0.0,>=2.3.1",
"django-concurrency<3.0,>=2.4",
"django-constance[redis]<3.0,>=2.9",
"django-cors-headers<4.0.0,>=3.13.0",
"django-countries<8.0.0,>=7.3.2",
"django-csp<4.0,>=3.7",
"django-elasticsearch-dsl<9.0,>=8.0",
"django-environ<1.0.0,>=0.10.0",
"django-extensions<4.0.0,>=3.1.5",
"django-filter<23,>=22",
"django-flags<6.0.0,>=5.0.12",
"django-front-door<1.0,>=0.10",
"django-fsm<3.0.0,>=2.8.0",
"django-hijack<4.0.0,>=3.2.1",
"django-import-export<3.0.0,>=2.8.0",
"django-import-export-celery<2.0,>=1.2",
"django-jsoneditor<1.0.0,>=0.2.2",
"django-markdownify<1.0.0,>=0.9.2",
"django-model-utils<5.0.0,>=4.2.0",
"django-mptt<1.0,>=0.14",
"django-multiselectfield==0.1.12",
"django-phonenumber-field<8,>=7",
"django-redis<6.0.0,>=5.2.0",
"django-reversion<6.0.0,>=5.0.2",
"django-silk<6.0.0,>=5.0.1",
"django-smart-admin<3,>=2",
"django-smart-env",
"django-sql-explorer[xls]<4,>=3",
"django-storages[azure]<2.0.0,>=1.12.3",
"django-strategy-field<4.0,>=3.0",
"django-sysinfo<3.0.0,>=2.6.0",
"django-compressor<5.0,>=4.0",
"django-querysetsequence<1.0,>=0.16",
"djangorestframework<4.0.0,>=3.13.1",
"drf-jwt<2.0.0,>=1.19.2",
"drf-spectacular[sidecar]<1.0,>=0.27",
"drf-extensions==0.7.1",
"elasticsearch-dsl~=8.14.0",
"gevent",
"graphene-file-upload<2.0.0,>=1.3.0",
"gunicorn<21.0.0,>=20.1.0",
"ipython<9.0.0,>=8.4.0",
"jedi<1.0.0,>=0.18.1",
"jmespath<2.0.0,>=1.0.1",
"natural-keys<3.0.0,>=2.0.0",
"openpyxl-image-loader<2.0.0,>=1.0.5",
"phonenumbers<9.0.0,>=8.12.49",
"pillow<11.0.0,>=10.2.0",
"prompt-toolkit<4.0.0,>=3.0.29",
"psycopg2-binary>=2.9.3",
"ptyprocess<1.0.0,>=0.7.0",
"pycountry<23.0,>=22.3",
"pygments<3.0.0,>=2.12.0",
"pytesseract<1.0.0,>=0.3.9",
"pytz<2023.0,>=2022.1",
"single-source<1.0.0,>=0.3.0",
"social-auth-app-django<6.0.0,>=5.0.0",
"social-auth-core<5.0.0,>=4.2.0",
"sorl-thumbnail==12.9",
"swapper<2.0.0,>=1.3.0",
"tblib<2.0.0,>=1.7.0",
"update<1.0.0,>=0.0.1",
"urllib3<2.0.0,>=1.26.9",
"xlrd<2.0,>=1.2",
"weasyprint<60.0,>=59.0",
"tomli<3.0.0,>=2.0.1",
"sentry-sdk==2.8.0",
"django-debug-toolbar<5.0.0,>=4.3.0",
"django-graphiql-debug-toolbar<1.0.0,>=0.2.0",
"django-rest-extensions>=0.2.0",
"pydyf==0.10.0",
"elastic-transport==8.13.0",
"flower>=2.0.1",
"factory-boy<4,>=3",
"django-fernet-fields>=0.6",
"msoffcrypto-tool>=5.4.2",
"pyzipper>=0.3.6",
]
requires-python = "==3.13.*"
readme = "README.md"
license = { text = "None" }
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
package-dir = { "" = "src" }
[tool.setuptools.packages.find]
where = ["src"]