From caec7260373278557573040e77b1ccc4d3f7bf6e Mon Sep 17 00:00:00 2001 From: Fredrik Jonsson Date: Thu, 19 Feb 2026 14:41:30 +0100 Subject: [PATCH] Add django-model-info. --- hypha/settings/dev.py | 6 ++++++ pyproject.toml | 1 + requirements/dev.txt | 30 +++++++++++++++++++++++---- uv.lock | 47 +++++++++++++++++++++++++++++++++++++++---- 4 files changed, 76 insertions(+), 8 deletions(-) diff --git a/hypha/settings/dev.py b/hypha/settings/dev.py index 2041918055..3bec63f1c8 100644 --- a/hypha/settings/dev.py +++ b/hypha/settings/dev.py @@ -159,4 +159,10 @@ "SHOW_COLLAPSED": True, } +# Add django-model-info. +INSTALLED_APPS = [ + *INSTALLED_APPS, + "django_model_info.apps.DjangoModelInfoConfig", +] + SENTRY_DENY_URLS += ["__reload__", "/favicon.ico", "/media/", "/static/", "__debug__"] diff --git a/pyproject.toml b/pyproject.toml index 8d8e1a5cc0..d643cc0d92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,6 +74,7 @@ dependencies = [ "django-coverage-plugin>=3.2.0", "django-debug-toolbar>=6.1.0", "django-dynamic-fixture>=4.0.1", + "django-model-info>=2024.11.5", "djhtml>=3.0.10", "dslr>=0.6.0", "factory_boy>=3.3.3", diff --git a/requirements/dev.txt b/requirements/dev.txt index 5ca35af24b..e1d6656498 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -518,6 +518,7 @@ django==5.2.11 \ # django-heroku # django-hijack # django-htmx + # django-model-info # django-modelcluster # django-nh3 # django-otp @@ -605,6 +606,9 @@ django-htmx==1.27.0 \ --hash=sha256:036e5da801bfdf5f1ca815f21592cfb9f004a898f330c842f15e55c70e301a75 \ --hash=sha256:13e1e13b87d39b57f95aae6e4987cb3df056d0b1373a41f4a94504a00298ffd8 # via hypha +django-model-info==2024.11.5 \ + --hash=sha256:3ceffa8f9b8d6f98fef9e0d4bad7a6f35694315f3fdb30f21e687ecba79bc071 \ + --hash=sha256:fe8497cb71cd045b929d79548bf7f5f3f5261e15c8b585005d684838363d9f7d django-modelcluster==6.4.1 \ --hash=sha256:ccc190cd9e22c24900ea2410bff64d444d48f43f0f4aedeed0f6cd94e2536698 \ --hash=sha256:e736fcee925f83b63218dbf9c869ab50618b0f5e98869a5aa497f7a5331aa263 @@ -1260,6 +1264,14 @@ natsort==8.4.0 \ --hash=sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581 \ --hash=sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c # via mkdocs-awesome-pages-plugin +networkx==3.4.2 ; python_full_version < '3.11' \ + --hash=sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1 \ + --hash=sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f + # via django-model-info +networkx==3.6.1 ; python_full_version >= '3.11' \ + --hash=sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509 \ + --hash=sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762 + # via django-model-info nh3==0.3.3 \ --hash=sha256:0d5eb734a78ac364af1797fef718340a373f626a9ff6b4fb0b4badf7927e7b81 \ --hash=sha256:185ed41b88c910b9ca8edc89ca3b4be688a12cb9de129d84befa2f74a0039fee \ @@ -1597,6 +1609,10 @@ pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementatio --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 # via cffi +pydot==4.0.1 \ + --hash=sha256:869c0efadd2708c0be1f916eb669f3d664ca684bc57ffb7ecc08e70d5e93fee6 \ + --hash=sha256:c2148f681c4a33e08bf0e26a9e5f8e4099a82e0e2a068098f32ce86577364ad5 + # via django-model-info pygments==2.19.2 \ --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b @@ -1624,6 +1640,10 @@ pymdown-extensions==10.21 \ # via # mkdocs-material # mkdocstrings +pyparsing==3.3.2 \ + --hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \ + --hash=sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc + # via pydot pypdf==6.7.1 \ --hash=sha256:6b7a63be5563a0a35d54c6d6b550d75c00b8ccf36384be96365355e296e6b3b0 \ --hash=sha256:a02ccbb06463f7c334ce1612e91b3e68a8e827f3cee100b9941771e6066b094e @@ -1860,7 +1880,9 @@ responses==0.25.8 \ rich==13.9.4 \ --hash=sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098 \ --hash=sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90 - # via dslr + # via + # django-model-info + # dslr ruff==0.15.1 \ --hash=sha256:1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899 \ --hash=sha256:1fe5c41ab43e3a06778844c586251eb5a510f67125427625f9eb2b9526535779 \ @@ -2202,9 +2224,9 @@ vine==5.1.0 \ # amqp # celery # kombu -virtualenv==20.37.0 \ - --hash=sha256:5d3951c32d57232ae3569d4de4cc256c439e045135ebf43518131175d9be435d \ - --hash=sha256:6f7e2064ed470aa7418874e70b6369d53b66bcd9e9fd5389763e96b6c94ccb7c +virtualenv==20.38.0 \ + --hash=sha256:94f39b1abaea5185bf7ea5a46702b56f1d0c9aa2f41a6c2b8b0af4ddc74c10a7 \ + --hash=sha256:d6e78e5889de3a4742df2d3d44e779366325a90cf356f15621fddace82431794 # via pre-commit wagtail==7.0.5 \ --hash=sha256:83851ff26ca451d56b26c4d162eddfe6fa8f876e26acb610d5480c1d042c4c2f \ diff --git a/uv.lock b/uv.lock index 8f7bbf394b..d76d7ac665 100644 --- a/uv.lock +++ b/uv.lock @@ -969,6 +969,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/ac/25d28489dc43224e260f4ebee7565f7ef1efe12af0f284a89500c19f75e2/django_htmx-1.27.0-py3-none-any.whl", hash = "sha256:13e1e13b87d39b57f95aae6e4987cb3df056d0b1373a41f4a94504a00298ffd8", size = 62126, upload-time = "2025-11-28T23:18:53.57Z" }, ] +[[package]] +name = "django-model-info" +version = "2024.11.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pydot" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/2d/d1652745a2d91af5110a474df69afacf4e6676fdb769136c58676a08c71d/django_model_info-2024.11.5.tar.gz", hash = "sha256:3ceffa8f9b8d6f98fef9e0d4bad7a6f35694315f3fdb30f21e687ecba79bc071", size = 65638, upload-time = "2024-11-28T06:26:21.717Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/9b/20a6dcb0bb7ce0904e4914592a9fae621e4d37e828c355d8e8c10f71e756/django_model_info-2024.11.5-py3-none-any.whl", hash = "sha256:fe8497cb71cd045b929d79548bf7f5f3f5261e15c8b585005d684838363d9f7d", size = 51939, upload-time = "2024-11-28T06:26:20.329Z" }, +] + [[package]] name = "django-modelcluster" version = "6.4.1" @@ -1308,7 +1324,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -1632,6 +1648,7 @@ dev = [ { name = "django-coverage-plugin" }, { name = "django-debug-toolbar" }, { name = "django-dynamic-fixture" }, + { name = "django-model-info" }, { name = "djhtml" }, { name = "dslr" }, { name = "factory-boy" }, @@ -1733,6 +1750,7 @@ dev = [ { name = "django-coverage-plugin", specifier = ">=3.2.0" }, { name = "django-debug-toolbar", specifier = ">=6.1.0" }, { name = "django-dynamic-fixture", specifier = ">=4.0.1" }, + { name = "django-model-info", specifier = ">=2024.11.5" }, { name = "djhtml", specifier = ">=3.0.10" }, { name = "dslr", specifier = ">=0.6.0" }, { name = "factory-boy", specifier = ">=3.3.3" }, @@ -3264,6 +3282,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, ] +[[package]] +name = "pydot" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/35/b17cb89ff865484c6a20ef46bf9d95a5f07328292578de0b295f4a6beec2/pydot-4.0.1.tar.gz", hash = "sha256:c2148f681c4a33e08bf0e26a9e5f8e4099a82e0e2a068098f32ce86577364ad5", size = 162594, upload-time = "2025-06-17T20:09:56.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl", hash = "sha256:869c0efadd2708c0be1f916eb669f3d664ca684bc57ffb7ecc08e70d5e93fee6", size = 37087, upload-time = "2025-06-17T20:09:55.25Z" }, +] + [[package]] name = "pygments" version = "2.19.2" @@ -3334,6 +3364,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl", hash = "sha256:91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f", size = 268877, upload-time = "2026-02-15T20:44:05.464Z" }, ] +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + [[package]] name = "pypdf" version = "6.7.1" @@ -4473,7 +4512,7 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.37.0" +version = "20.38.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -4481,9 +4520,9 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c1/ef/d9d4ce633df789bf3430bd81fb0d8b9d9465dfc1d1f0deb3fb62cd80f5c2/virtualenv-20.37.0.tar.gz", hash = "sha256:6f7e2064ed470aa7418874e70b6369d53b66bcd9e9fd5389763e96b6c94ccb7c", size = 5864710, upload-time = "2026-02-16T16:17:59.42Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/03/a94d404ca09a89a7301a7008467aed525d4cdeb9186d262154dd23208709/virtualenv-20.38.0.tar.gz", hash = "sha256:94f39b1abaea5185bf7ea5a46702b56f1d0c9aa2f41a6c2b8b0af4ddc74c10a7", size = 5864558, upload-time = "2026-02-19T07:48:02.385Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl", hash = "sha256:5d3951c32d57232ae3569d4de4cc256c439e045135ebf43518131175d9be435d", size = 5837480, upload-time = "2026-02-16T16:17:57.341Z" }, + { url = "https://files.pythonhosted.org/packages/42/d7/394801755d4c8684b655d35c665aea7836ec68320304f62ab3c94395b442/virtualenv-20.38.0-py3-none-any.whl", hash = "sha256:d6e78e5889de3a4742df2d3d44e779366325a90cf356f15621fddace82431794", size = 5837778, upload-time = "2026-02-19T07:47:59.778Z" }, ] [[package]]