typeddjango / django-stubs

PEP-484 stubs for Django
MIT License
1.6k stars 450 forks source link

Maximum semantic analysis iteration count reached error with django-stubs 5.0.3 & 5.0.4 #2373

Open Alexerson opened 1 month ago

Alexerson commented 1 month ago

Bug report

What's wrong

When running django-stubs 5.0.2, mypy goes through without error. But when updating django-stubs to 5.0.3, I’m getting the following error: error: INTERNAL ERROR: maximum semantic analysis iteration count reached.

The traceback is huge, and not really helping, so my next step is to have a minimal reproduction, but I wanted to raise the bug in case someone else is running into this as well. I’ll also try to review what’s happening between the 2 versions to understand where the issue can be.

System information

It works fine with:

flaeppe commented 1 month ago

If I understand you correctly you can reproduce with the code you have? Essentially that your code triggers a regression between the versions?

Could you perhaps run a git bisect between 5.0.2 and 5.0.3 to pin point which commit introduced the issue?

You could also try out master to see if the issue exists there too.

Alexerson commented 1 month ago

Correct. My next plan was indeed to do a git bisect but didn’t have plan to complete. Will do (hopefully) today.

christianbundy commented 1 month ago

I'm having the same issue fwiw, it starts like this:

``` Deferral trace: django_stubs_ext.aliases:4 django_stubs_ext.aliases:-1 django_stubs_ext.aliases:5 django_stubs_ext.aliases:-1 django_stubs_ext.aliases:6 django_stubs_ext.aliases:-1 django_stubs_ext.aliases:9 django_stubs_ext.aliases:9 django_stubs_ext.aliases:-1 django_stubs_ext.aliases:10 django_stubs_ext.aliases:10 django_stubs_ext.aliases:-1 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:5 django.db.models.fields.proxy:-1 django.template.loader_tags:4 django.template.loader_tags:-1 django.template.loader_tags:4 django.template.loader_tags:-1 django.template.loader_tags:4 django.template.loader_tags:-1 django.template.loader_tags:4 django.template.loader_tags:-1 django.template.loader_tags:4 django.template.loader_tags:-1 django.template.loader_tags:5 django.template.loader_tags:-1 django.template.loader_tags:8 django.template.loader_tags:-1 django.template.loader_tags:8 django.template.loader_tags:-1 django.template.loader_tags:14 django.template.loader_tags:14 django.template.loader_tags:21 django.template.loader_tags:21 django.template.loader_tags:21 django.template.loader_tags:-1 django.template.loader_tags:32 django.template.loader_tags:32 django.template.loader_tags:32 django.template.loader_tags:-1 django.template.loader_tags:48 django.template.loader_tags:48 django.template.loader_tags:48 django.template.loader_tags:-1 django.template.backends.jinja2:5 django.template.backends.jinja2:-1 django.template.backends.jinja2:6 django.template.backends.jinja2:-1 django.template.backends.jinja2:8 django.template.backends.jinja2:-1 django.template.backends.jinja2:10 django.template.backends.jinja2:10 django.template.backends.jinja2:10 django.template.backends.jinja2:-1 django.template.backends.jinja2:24 django.template.backends.jinja2:24 django.template.backends.django:4 django.template.backends.django:-1 django.template.backends.django:5 django.template.backends.django:-1 django.template.backends.django:6 django.template.backends.django:-1 django.template.backends.django:7 django.template.backends.django:-1 django.template.backends.django:9 django.template.backends.django:-1 django.template.backends.django:9 django.template.backends.django:-1 django.template.backends.django:11 django.template.backends.django:11 django.template.backends.django:11 django.template.backends.django:-1 django.template.backends.django:22 django.template.backends.django:22 django.template.backends.django:22 django.template.backends.django:-1 django.db.models.sql.datastructures:3 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:4 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:5 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:5 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:6 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:6 django.db.models.sql.datastructures:-1 django.db.models.sql.datastructures:10 django.db.models.sql.datastructures:10 django.db.models.sql.datastructures:21 django.db.models.sql.datastructures:21 django.db.models.sql.datastructures:23 django.db.models.sql.datastructures:23 django.db.models.utils:4 django.db.models.utils:-1 django.core.files.images:3 django.core.files.images:-1 django.core.files.images:6 django.core.files.images:6 django.core.files.images:6 django.core.files.images:-1 django.conf.urls:6 django.conf.urls:-1 django.conf.urls:6 django.conf.urls:-1 django.conf.urls:7 django.conf.urls:-1 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:15 django.conf.urls:-1 django.db.backends.base.validation:3 django.db.backends.base.validation:-1 django.db.backends.base.validation:4 django.db.backends.base.validation:-1 django.db.backends.base.validation:7 django.db.backends.base.validation:7 django.db.backends.base.operations:9 django.db.backends.base.operations:-1 django.db.backends.base.operations:11 django.db.backends.base.operations:-1 django.db.backends.base.operations:13 django.db.backends.base.operations:-1 django.db.backends.base.operations:13 django.db.backends.base.operations:-1 django.db.backends.base.operations:13 django.db.backends.base.operations:-1 django.db.backends.base.operations:14 django.db.backends.base.operations:-1 django.db.backends.base.operations:15 django.db.backends.base.operations:-1 django.db.backends.base.operations:29 django.db.backends.base.operations:29 django.db.backends.base.introspection:5 django.db.backends.base.introspection:-1 django.db.backends.base.introspection:7 django.db.backends.base.introspection:-1 django.db.backends.base.introspection:18 django.db.backends.base.introspection:18 django.db.backends.base.features:4 django.db.backends.base.features:-1 django.db.backends.base.features:5 django.db.backends.base.features:-1 django.db.backends.base.features:6 django.db.backends.base.features:-1 django.db.backends.base.features:6 django.db.backends.base.features:-1 django.db.backends.base.features:7 django.db.backends.base.features:-1 django.db.backends.base.features:82 django.db.backends.base.features:82 django.db.backends.base.features:138 django.db.backends.base.features:138 django.db.backends.base.features:145 django.db.backends.base.features:145 django.db.backends.base.features:147 django.db.backends.base.features:149 django.db.backends.base.features:151 django.db.backends.base.creation:3 django.db.backends.base.creation:-1 django.db.backends.base.creation:8 django.db.backends.base.creation:8 django.db.backends.base.client:4 django.db.backends.base.client:-1 django.db.backends.base.client:8 django.db.backends.base.client:8 django.core.files.storage.memory:3 django.core.files.storage.memory:-1 django.core.files.storage.memory:5 django.core.files.storage.memory:-1 django.core.files.storage.memory:8 django.core.files.storage.memory:8 django.core.files.storage.memory:8 django.core.files.storage.memory:-1 django.core.files.storage.handler:3 django.core.files.storage.handler:-1 django.core.files.storage.handler:4 django.core.files.storage.handler:-1 django.core.files.storage.handler:6 django.core.files.storage.handler:-1 django.core.files.storage.handler:8 django.core.files.storage.handler:8 django.core.files.storage.handler:8 django.core.files.storage.handler:-1 django.core.files.storage.handler:12 django.core.files.storage.filesystem:3 django.core.files.storage.filesystem:-1 django.core.files.storage.filesystem:5 django.core.files.storage.filesystem:-1 django.core.files.storage.filesystem:8 django.core.files.storage.filesystem:8 django.core.files.storage.filesystem:8 django.core.files.storage.filesystem:-1 django.core.files.storage.base:4 django.core.files.storage.base:-1 django.db.models.sql.subqueries:4 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:5 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:6 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:7 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:8 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:10 django.db.models.sql.subqueries:10 django.db.models.sql.subqueries:10 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:17 django.db.models.sql.subqueries:17 django.db.models.sql.subqueries:17 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:28 django.db.models.sql.subqueries:28 django.db.models.sql.subqueries:28 django.db.models.sql.subqueries:-1 django.db.models.sql.subqueries:38 django.db.models.sql.subqueries:38 django.db.models.sql.subqueries:38 django.db.models.sql.subqueries:-1 django.template.backends.base:4 django.template.backends.base:-1 django.template.backends.base:5 django.template.backends.base:-1 django.template.backends.base:6 django.template.backends.base:-1 django.template.backends.base:18 django.core.checks.registry:4 django.core.checks.registry:-1 django.utils.connection:4 django.utils.connection:-1 django.utils.connection:22 django.template.exceptions:2 django.template.exceptions:-1 django.template.exceptions:6 django.template.exceptions:6 django.template.library:4 django.template.library:-1 django.template.library:4 django.template.library:-1 django.template.library:4 django.template.library:-1 django.template.library:4 django.template.library:-1 django.template.library:5 django.template.library:-1 django.template.library:8 django.template.library:-1 django.template.library:8 django.template.library:-1 django.template.library:43 django.template.library:43 django.template.library:43 django.template.library:-1 django.template.library:57 django.template.library:57 django.template.library:57 django.template.library:-1 django.template.library:74 django.template.library:74 django.template.library:74 django.template.library:-1 django.template.engine:4 django.template.engine:-1 django.template.engine:6 django.template.engine:-1 django.template.engine:7 django.template.engine:-1 django.template.engine:11 django.template.engine:-1 django.template.engine:44 django.template.engine:48 django.template.context:6 django.template.context:-1 django.template.context:7 django.template.context:-1 django.template.context:7 django.template.context:-1 django.template.context:7 django.template.context:-1 django.template.context:48 django.template.context:-1 django.template.context:8 django.template.context:11 django.template.context:11 django.template.context:11 django.template.context:11 django.template.context:-1 django.template.context:13 django.template.context:13 django.template.context:-1 django.template.context:18 django.template.context:18 django.template.context:18 django.template.context:18 django.template.context:18 django.template.context:50 django.template.context:50 django.template.context:50 django.template.context:50 django.template.context:50 django.template.context:51 django.template.context:51 django.template.context:64 django.template.context:64 django.template.context:65 django.template.context:65 django.template.context:76 django.template.context:76 django.template.context:86 django.template.context:86 django.template.loaders.base:4 django.template.loaders.base:-1 django.template.loaders.base:4 django.template.loaders.base:-1 django.db.models.fields.related_descriptors:4 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:5 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:6 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:7 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:7 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:7 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:8 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:8 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:8 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:9 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:9 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:10 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:11 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:12 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:15 django.db.models.fields.related_descriptors:15 django.db.models.fields.related_descriptors:15 django.db.models.fields.related_descriptors:16 django.db.models.fields.related_descriptors:16 django.db.models.fields.related_descriptors:16 django.db.models.fields.related_descriptors:17 django.db.models.fields.related_descriptors:17 django.db.models.fields.related_descriptors:17 django.db.models.fields.related_descriptors:18 django.db.models.fields.related_descriptors:18 django.db.models.fields.related_descriptors:18 django.db.models.fields.related_descriptors:18 django.db.models.fields.related_descriptors:18 django.db.models.fields.related_descriptors:19 django.db.models.fields.related_descriptors:19 django.db.models.fields.related_descriptors:19 django.db.models.fields.related_descriptors:21 django.db.models.fields.related_descriptors:21 django.db.models.fields.related_descriptors:21 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:24 django.db.models.fields.related_descriptors:25 django.db.models.fields.related_descriptors:27 django.db.models.fields.related_descriptors:44 django.db.models.fields.related_descriptors:47 django.db.models.fields.related_descriptors:47 django.db.models.fields.related_descriptors:57 django.db.models.fields.related_descriptors:57 django.db.models.fields.related_descriptors:59 django.db.models.fields.related_descriptors:76 django.db.models.fields.related_descriptors:86 django.db.models.fields.related_descriptors:86 django.db.models.fields.related_descriptors:87 django.db.models.fields.related_descriptors:87 django.db.models.fields.related_descriptors:89 django.db.models.fields.related_descriptors:99 django.db.models.fields.related_descriptors:99 django.db.models.fields.related_descriptors:99 django.db.models.fields.related_descriptors:99 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:115 django.db.models.fields.related_descriptors:115 django.db.models.fields.related_descriptors:115 django.db.models.fields.related_descriptors:-1 django.db.models.fields.related_descriptors:142 django.db.models.fields.related_descriptors:142 django.db.models.fields.related_descriptors:142 django.db.models.fields.related_descriptors:142 django.db.models.fields.related_descriptors:-1 django.contrib.sites.models:4 django.contrib.sites.models:-1 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:8 django.contrib.sites.models:-1 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:13 django.contrib.sites.models:-1 django.db.models.fields.reverse_related:4 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:5 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:5 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:5 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:5 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:5 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:6 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:6 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:6 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:6 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:7 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:7 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:7 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:8 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:8 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:9 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:10 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:12 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:20 django.db.models.fields.reverse_related:20 django.db.models.fields.reverse_related:20 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:89 django.db.models.fields.reverse_related:89 django.db.models.fields.reverse_related:89 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:105 django.db.models.fields.reverse_related:105 django.db.models.fields.reverse_related:105 django.db.models.fields.reverse_related:-1 django.db.models.fields.reverse_related:119 django.db.models.fields.reverse_related:119 django.db.models.fields.reverse_related:119 django.db.models.fields.reverse_related:-1 django.forms.renderers:3 django.forms.renderers:-1 django.forms.renderers:11 django.forms.renderers:-1 django.forms.renderers:5 django.forms.renderers:10 django.forms.renderers:-1 django.forms.renderers:6 django.forms.renderers:7 django.forms.renderers:-1 django.forms.renderers:8 django.forms.renderers:-1 django.forms.renderers:21 django.forms.renderers:25 django.forms.renderers:25 django.forms.renderers:28 django.db.models.sql.where:4 django.db.models.sql.where:-1 django.db.models.sql.where:5 django.db.models.sql.where:-1 django.db.models.sql.where:6 django.db.models.sql.where:-1 django.db.models.sql.where:7 django.db.models.sql.where:-1 django.db.models.sql.where:7 django.db.models.sql.where:-1 django.db.models.sql.where:8 django.db.models.sql.where:-1 django.db.models.sql.where:10 django.db.models.sql.where:-1 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:15 django.db.models.sql.where:-1 django.db.models.sql.where:57 django.db.models.sql.where:57 django.db.models.sql.query:7 django.db.models.sql.query:-1 django.db.models.sql.query:7 django.db.models.sql.query:-1 django.db.models.sql.query:7 django.db.models.sql.query:-1 django.db.models.sql.query:7 django.db.models.sql.query:-1 django.db.models.sql.query:8 django.db.models.sql.query:-1 django.db.models.sql.query:8 django.db.models.sql.query:-1 django.db.models.sql.query:8 django.db.models.sql.query:-1 django.db.models.sql.query:8 django.db.models.sql.query:-1 django.db.models.sql.query:9 django.db.models.sql.query:-1 django.db.models.sql.query:9 django.db.models.sql.query:-1 django.db.models.sql.query:10 django.db.models.sql.query:-1 django.db.models.sql.query:11 django.db.models.sql.query:-1 django.db.models.sql.query:15 django.db.models.sql.query:-1 django.db.models.sql.query:13 django.db.models.sql.query:14 django.db.models.sql.query:-1 django.db.models.sql.query:35 django.db.models.sql.query:35 django.db.models.sql.query:35 django.db.models.sql.query:-1 django.db.models.options:4 django.db.models.options:-1 django.db.models.options:5 django.db.models.options:-1 django.db.models.options:6 django.db.models.options:-1 django.db.models.options:7 django.db.models.options:-1 django.db.models.options:8 django.db.models.options:-1 django.db.models.options:9 django.db.models.options:-1 django.db.models.options:9 django.db.models.options:-1 django.db.models.options:10 django.db.models.options:-1 django.db.models.options:10 django.db.models.options:-1 django.db.models.options:11 django.db.models.options:-1 django.db.models.options:11 django.db.models.options:-1 django.db.models.options:20 django.db.models.options:-1 django.db.models.options:12 django.db.models.options:13 django.db.models.options:-1 django.db.models.options:14 django.db.models.options:-1 django.db.models.options:16 django.db.models.options:-1 django.db.models.options:16 django.db.models.options:-1 django.db.models.options:37 django.db.models.options:37 django.db.models.options:37 django.db.models.options:39 django.db.models.options:40 django.db.models.options:40 django.db.models.options:44 django.db.models.options:44 django.db.models.options:45 django.db.models.options:45 django.db.models.options:47 django.db.models.options:47 django.db.models.options:51 django.db.models.options:51 django.db.models.options:52 django.db.models.options:52 django.db.models.options:69 django.db.models.options:69 django.db.models.options:70 django.db.models.options:70 django.db.models.options:74 django.db.models.options:74 django.db.models.options:75 django.db.models.options:75 django.db.models.options:77 django.db.models.options:77 django.db.models.options:77 django.db.models.options:77 django.db.models.options:80 django.db.models.options:80 django.db.models.options:82 django.db.models.options:82 django.db.models.options:104 django.db.models.options:106 django.db.models.options:108 django.db.models.options:110 django.db.models.options:112 django.db.models.options:114 django.db.models.options:133 django.db.models.options:135 django.db.models.sql.compiler:7 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:9 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:10 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:10 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:10 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:35 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:11 django.db.models.sql.compiler:38 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:12 django.db.models.sql.compiler:10 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:12 django.db.models.sql.compiler:28 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:12 django.db.models.sql.compiler:17 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:12 django.db.models.sql.compiler:13 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:21 django.db.models.sql.compiler:21 django.db.models.sql.compiler:21 django.db.models.sql.compiler:-1 django.db.models.sql.compiler:25 django.db.models.sql.compiler:25 django.db.models.sql.compiler:26 django.db.models.sql.compiler:26 django.db.models.sql.compiler:123 django.db.models.sql.compiler:123 django.db.models.sql.compiler:136 django.db.models.sql.compiler:136 django.db.models.sql.compiler:137 django.db.models.sql.compiler:139 django.db.models.sql.compiler:144 django.db.models.sql.compiler:144 django.db.models.sql.compiler:150 django.db.models.sql.compiler:150 django.db.models.indexes:4 django.db.models.indexes:-1 django.db.models.indexes:5 django.db.models.indexes:-1 django.db.models.indexes:7 django.db.models.indexes:-1 django.db.models.indexes:8 django.db.models.indexes:-1 django.db.models.indexes:8 django.db.models.indexes:-1 django.db.models.indexes:8 django.db.models.indexes:-1 django.db.models.indexes:8 django.db.models.indexes:-1 django.db.models.indexes:9 django.db.models.indexes:-1 django.db.models.indexes:13 django.db.models.indexes:13 django.db.models.indexes:21 django.db.models.indexes:21 django.db.models.indexes:22 django.db.models.indexes:22 django.db.models.indexes:22 django.db.models.indexes:44 django.db.models.indexes:44 django.db.models.indexes:44 django.db.models.indexes:-1 django.db.models.constraints:5 django.db.models.constraints:-1 django.db.models.constraints:6 django.db.models.constraints:-1 django.db.models.constraints:7 django.db.models.constraints:-1 django.db.models.constraints:7 django.db.models.constraints:-1 django.db.models.constraints:8 django.db.models.constraints:-1 django.db.models.constraints:9 django.db.models.constraints:-1 django.db.models.constraints:19 django.db.models.constraints:19 django.db.models.constraints:20 django.db.models.constraints:20 django.db.models.constraints:46 django.db.models.constraints:46 django.db.models.constraints:46 django.db.models.constraints:47 django.db.models.constraints:47 django.db.models.constraints:47 django.db.models.constraints:70 django.db.models.constraints:70 django.db.models.constraints:70 django.db.models.constraints:72 django.db.models.constraints:72 django.db.models.fields.json:5 django.db.models.fields.json:-1 django.db.models.fields.json:7 django.db.models.fields.json:-1 django.db.models.fields.json:8 django.db.models.fields.json:-1 django.db.models.fields.json:9 django.db.models.fields.json:-1 django.db.models.fields.json:9 django.db.models.fields.json:-1 django.db.models.fields.json:11 django.db.models.fields.json:-1 django.db.models.fields.json:14 django.db.models.fields.json:-1 django.db.models.fields.json:15 django.db.models.fields.json:-1 django.db.models.fields.json:22 django.db.models.fields.json:22 django.db.models.fields.json:22 django.db.models.fields.json:22 django.db.models.fields.json:-1 django.db.models.fields.json:35 django.db.models.fields.json:35 django.db.models.fields.json:35 django.db.models.fields.json:-1 django.db.models.fields.json:36 django.db.models.fields.json:36 django.db.models.fields.json:36 django.db.models.fields.json:-1 django.db.models.fields.json:38 django.db.models.fields.json:38 django.db.models.fields.json:38 django.db.models.fields.json:-1 django.db.models.fields.json:42 django.db.models.fields.json:42 django.db.models.fields.json:42 django.db.models.fields.json:-1 django.db.models.fields.json:45 django.db.models.fields.json:45 django.db.models.fields.json:45 django.db.models.fields.json:-1 django.db.models.fields.json:49 django.db.models.fields.json:49 django.db.models.fields.json:49 django.db.models.fields.json:-1 django.db.models.fields.json:53 django.db.models.fields.json:53 django.db.models.fields.json:53 django.db.models.fields.json:-1 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:54 django.db.models.fields.json:-1 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:56 django.db.models.fields.json:-1 django.db.models.fields.json:58 django.db.models.fields.json:58 django.db.models.fields.json:58 django.db.models.fields.json:-1 django.db.models.fields.json:65 django.db.models.fields.json:65 django.db.models.fields.json:65 django.db.models.fields.json:-1 django.db.models.fields.json:72 django.db.models.fields.json:72 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:77 django.db.models.fields.json:-1 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:78 django.db.models.fields.json:-1 django.db.models.fields.json:79 django.db.models.fields.json:79 django.db.models.fields.json:79 django.db.models.fields.json:-1 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:80 django.db.models.fields.json:-1 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:81 django.db.models.fields.json:-1 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:82 django.db.models.fields.json:-1 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:83 django.db.models.fields.json:-1 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:84 django.db.models.fields.json:-1 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:85 django.db.models.fields.json:-1 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:86 django.db.models.fields.json:-1 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:87 django.db.models.fields.json:-1 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:89 django.db.models.fields.json:-1 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:90 django.db.models.fields.json:-1 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:91 django.db.models.fields.json:-1 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:92 django.db.models.fields.json:-1 django.db.models.fields.generated:3 django.db.models.fields.generated:-1 django.db.models.fields.generated:5 django.db.models.fields.generated:-1 django.db.models.fields.generated:6 django.db.models.fields.generated:-1 django.db.models.fields.generated:7 django.db.models.fields.generated:-1 django.db.models.fields.generated:8 django.db.models.fields.generated:-1 django.db.models.fields.generated:11 django.db.models.fields.generated:-1 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:13 django.db.models.fields.generated:-1 django.db.models.fields.files:5 django.db.models.fields.files:-1 django.db.models.fields.files:6 django.db.models.fields.files:-1 django.db.models.fields.files:6 django.db.models.fields.files:7 django.db.models.fields.files:-1 django.db.models.fields.files:8 django.db.models.fields.files:-1 django.db.models.fields.files:9 django.db.models.fields.files:-1 django.db.models.fields.files:10 django.db.models.fields.files:-1 django.db.models.fields.files:10 django.db.models.fields.files:-1 django.db.models.fields.files:10 django.db.models.fields.files:-1 django.db.models.fields.files:11 django.db.models.fields.files:-1 django.db.models.fields.files:15 django.db.models.fields.files:-1 django.db.models.fields.files:18 django.db.models.fields.files:18 django.db.models.fields.files:18 django.db.models.fields.files:-1 django.db.models.fields.files:41 django.db.models.fields.files:41 django.db.models.fields.files:41 django.db.models.fields.files:-1 django.db.models.fields.files:46 django.db.models.fields.files:46 django.db.models.fields.files:46 django.db.models.fields.files:49 django.db.models.fields.files:52 django.db.models.fields.files:52 django.db.models.fields.files:52 django.db.models.fields.files:-1 django.db.models.fields.files:94 django.db.models.fields.files:94 django.db.models.fields.files:94 django.db.models.fields.files:-1 django.db.models.fields.files:98 django.db.models.fields.files:98 django.db.models.fields.files:98 django.db.models.fields.files:98 django.db.models.fields.files:98 django.db.models.fields.files:-1 django.db.models.fields.files:102 django.db.models.fields.files:102 django.db.models.fields.files:102 django.db.models.fields.files:-1 django.urls.resolvers:7 django.urls.resolvers:-1 django.urls.resolvers:9 django.urls.resolvers:-1 django.urls.resolvers:45 django.urls.resolvers:45 django.urls.resolvers:45 django.urls.resolvers:45 django.urls.resolvers:-1 django.urls.resolvers:87 django.urls.resolvers:87 django.urls.resolvers:100 django.urls.resolvers:104 django.urls.resolvers:104 django.urls.resolvers:105 django.urls.resolvers:105 django.urls.resolvers:126 django.urls.resolvers:128 django.urls.exceptions:1 django.urls.exceptions:-1 django.urls.exceptions:3 django.urls.exceptions:3 django.urls.exceptions:3 django.urls.exceptions:-1 django.urls.conf:5 django.urls.conf:-1 django.urls.conf:5 django.urls.conf:-1 django.urls.conf:5 django.urls.conf:-1 django.urls.conf:6 django.urls.conf:-1 django.urls.conf:15 django.urls.conf:-1 django.urls.conf:9 django.urls.conf:12 django.urls.conf:12 django.urls.conf:12 django.urls.conf:12 django.urls.conf:12 django.urls.conf:-1 django.db.models.manager:5 django.db.models.manager:-1 django.db.models.manager:6 django.db.models.manager:-1 django.db.models.manager:6 django.db.models.manager:-1 django.db.models.manager:7 django.db.models.manager:-1 django.db.models.manager:7 django.db.models.manager:-1 django.db.models.manager:10 django.db.models.manager:10 django.db.models.manager:10 django.db.models.manager:12 django.db.models.manager:17 django.db.models.manager:148 django.db.models.manager:158 django.db.backends.base.base:12 django.db.backends.base.base:-1 django.db.backends.base.base:15 django.db.backends.base.base:-1 django.db.backends.base.base:16 django.db.backends.base.base:-1 django.db.backends.base.base:34 django.db.backends.base.base:34 django.db.backends.base.base:66 django.db.backends.base.base:66 django.db.backends.base.base:69 django.db.backends.base.base:71 django.forms.widgets:5 django.forms.widgets:-1 django.forms.widgets:7 django.forms.widgets:-1 django.forms.widgets:7 django.forms.widgets:-1 django.forms.formsets:4 django.forms.formsets:-1 django.forms.formsets:5 django.forms.formsets:-1 django.forms.formsets:5 django.forms.formsets:-1 django.forms.formsets:7 django.forms.formsets:-1 django.forms.formsets:7 django.forms.formsets:-1 django.forms.formsets:7 django.forms.formsets:-1 django.forms.formsets:7 django.forms.formsets:-1 django.forms.formsets:9 django.forms.formsets:-1 django.forms.formsets:21 django.forms.formsets:21 django.forms.formsets:21 django.forms.formsets:23 django.forms.formsets:23 django.forms.formsets:23 django.forms.formsets:-1 django.forms.formsets:28 django.forms.formsets:28 django.forms.formsets:28 django.forms.formsets:28 django.forms.formsets:-1 django.forms.boundfield:4 django.forms.boundfield:-1 django.forms.boundfield:5 django.forms.boundfield:-1 django.forms.boundfield:7 django.forms.boundfield:-1 django.forms.boundfield:7 django.forms.boundfield:-1 django.forms.boundfield:9 django.forms.boundfield:-1 django.forms.boundfield:9 django.forms.boundfield:-1 django.forms.boundfield:15 django.forms.boundfield:15 django.forms.boundfield:15 django.forms.boundfield:-1 django.apps.config:4 django.apps.config:-1 django.apps.config:5 django.apps.config:-1 django.apps.config:6 django.apps.config:-1 django.apps.config:6 django.apps.config:-1 django.apps.config:14 django.apps.config:14 django.apps.config:16 django.apps.config:16 django.apps.config:21 django.apps.config:21 django.apps.config:23 django.apps.config:23 django.db.models.base:5 django.db.models.base:-1 django.db.models.base:6 django.db.models.base:-1 django.db.models.base:6 django.db.models.base:-1 django.db.models.base:7 django.db.models.base:-1 django.db.models.base:7 django.db.models.base:-1 django.db.models.base:7 django.db.models.base:-1 django.db.models.base:12 django.db.models.base:12 django.db.models.base:-1 django.db.models.base:37 django.db.models.base:37 django.db.models.base:38 django.db.models.base:38 django.db.models.lookups:4 django.db.models.lookups:-1 django.db.models.lookups:6 django.db.models.lookups:-1 django.db.models.lookups:6 django.db.models.lookups:-1 django.db.models.lookups:6 django.db.models.lookups:-1 django.db.models.lookups:7 django.db.models.lookups:-1 django.db.models.lookups:8 django.db.models.lookups:-1 django.db.models.lookups:11 django.db.models.lookups:-1 django.db.models.lookups:15 django.db.models.lookups:15 django.db.models.lookups:15 django.db.models.lookups:-1 django.db.models.lookups:47 django.db.models.lookups:47 django.db.models.lookups:47 django.db.models.lookups:47 django.db.models.lookups:-1 django.db.models.lookups:53 django.db.models.lookups:53 django.db.models.lookups:53 django.db.models.lookups:-1 django.db.models.lookups:70 django.db.models.lookups:70 django.db.models.lookups:70 django.db.models.lookups:-1 django.db.models.lookups:74 django.db.models.lookups:74 django.db.models.lookups:74 django.db.models.lookups:-1 django.db.models.lookups:75 django.db.models.lookups:75 django.db.models.lookups:75 django.db.models.lookups:-1 django.db.models.lookups:76 django.db.models.lookups:76 django.db.models.lookups:76 django.db.models.lookups:-1 django.db.models.lookups:77 django.db.models.lookups:77 django.db.models.lookups:77 django.db.models.lookups:-1 django.db.models.lookups:78 django.db.models.lookups:78 django.db.models.lookups:78 django.db.models.lookups:-1 django.db.models.lookups:79 django.db.models.lookups:79 django.db.models.lookups:79 django.db.models.lookups:-1 django.db.models.lookups:82 django.db.models.lookups:82 django.db.models.lookups:83 django.db.models.lookups:83 django.db.models.lookups:90 django.db.models.lookups:90 django.db.models.lookups:90 django.db.models.lookups:-1 django.db.models.lookups:91 django.db.models.lookups:91 django.db.models.lookups:91 django.db.models.lookups:-1 django.db.models.lookups:92 django.db.models.lookups:92 django.db.models.lookups:92 django.db.models.lookups:-1 django.db.models.lookups:93 django.db.models.lookups:93 django.db.models.lookups:93 django.db.models.lookups:-1 django.db.models.lookups:94 django.db.models.lookups:94 django.db.models.lookups:94 django.db.models.lookups:-1 django.db.models.lookups:96 django.db.models.lookups:96 django.db.models.lookups:96 django.db.models.lookups:-1 django.db.models.lookups:99 django.db.models.lookups:99 django.db.models.lookups:99 django.db.models.lookups:-1 django.db.models.lookups:102 django.db.models.lookups:102 django.db.models.lookups:102 django.db.models.lookups:-1 django.db.models.lookups:103 django.db.models.lookups:103 django.db.models.lookups:103 django.db.models.lookups:-1 django.db.models.lookups:104 django.db.models.lookups:104 django.db.models.lookups:104 django.db.models.lookups:-1 django.db.models.lookups:105 django.db.models.lookups:105 django.db.models.lookups:105 django.db.models.lookups:-1 django.db.models.lookups:106 django.db.models.lookups:106 django.db.models.lookups:106 django.db.models.lookups:-1 django.db.models.lookups:107 django.db.models.lookups:107 django.db.models.lookups:107 django.db.models.lookups:-1 django.db.models.lookups:108 django.db.models.lookups:108 django.db.models.lookups:108 django.db.models.lookups:-1 django.db.models.lookups:109 django.db.models.lookups:109 django.db.models.lookups:109 django.db.models.lookups:-1 django.db.models.lookups:110 django.db.models.lookups:110 django.db.models.lookups:110 django.db.models.lookups:-1 django.db.models.lookups:111 django.db.models.lookups:111 django.db.models.lookups:111 django.db.models.lookups:-1 django.db.models.lookups:113 django.db.models.lookups:113 django.db.models.lookups:113 django.db.models.lookups:-1 django.db.models.lookups:118 django.db.models.lookups:118 django.db.models.lookups:118 django.db.models.lookups:118 django.db.models.lookups:118 django.db.models.lookups:-1 django.db.models.lookups:121 django.db.models.lookups:121 django.db.models.lookups:121 django.db.models.lookups:121 django.db.models.lookups:121 django.db.models.lookups:-1 django.db.models.lookups:124 django.db.models.lookups:124 django.db.models.lookups:124 django.db.models.lookups:124 django.db.models.lookups:124 django.db.models.lookups:-1 django.db.models.lookups:127 django.db.models.lookups:127 django.db.models.lookups:127 django.db.models.lookups:127 django.db.models.lookups:127 django.db.models.lookups:-1 django.db.models.lookups:130 django.db.models.lookups:130 django.db.models.lookups:130 django.db.models.lookups:130 django.db.models.lookups:130 django.db.models.lookups:-1 django.db.models.lookups:137 django.db.models.lookups:137 django.db.models.lookups:137 django.db.models.lookups:-1 django.db.models.lookups:138 django.db.models.lookups:138 django.db.models.lookups:138 django.db.models.lookups:-1 django.db.models.lookups:139 django.db.models.lookups:139 django.db.models.lookups:139 django.db.models.lookups:-1 django.db.models.lookups:140 django.db.models.lookups:140 django.db.models.lookups:140 django.db.models.lookups:-1 django.db.models.lookups:141 django.db.models.lookups:141 django.db.models.lookups:141 django.db.models.lookups:-1 django.db.models.lookups:142 django.db.models.lookups:142 django.db.models.lookups:142 django.db.models.lookups:-1 django.db.models.lookups:143 django.db.models.lookups:143 django.db.models.lookups:143 django.db.models.lookups:-1 django.db.utils:5 django.db.utils:-1 django.db.utils:7 django.db.utils:-1 django.db.utils:9 django.db.utils:-1 django.db.utils:46 django.core.files.storage:1 django.core.files.storage:-1 django.core.files.storage:8 django.core.files.storage:-1 django.core.files.storage:4 django.core.files.storage:8 django.core.files.storage:-1 django.core.files.storage:5 django.core.files.storage:8 django.core.files.storage:-1 django.core.files.storage:6 django.core.files.storage:24 django.core.files.storage:24 django.core.files.storage:24 django.core.files.storage:-1 django.contrib.auth.validators:1 django.contrib.auth.validators:-1 django.contrib.auth.validators:3 django.contrib.auth.validators:3 django.contrib.auth.validators:3 django.contrib.auth.validators:-1 django.contrib.auth.validators:4 django.contrib.auth.validators:4 django.contrib.auth.validators:4 django.contrib.auth.validators:-1 django.db.models.fields:10 django.db.models.fields:-1 django.db.models.fields:12 django.db.models.fields:-1 django.db.models.fields:13 django.db.models.fields:-1 django.db.models.fields:13 django.db.models.fields:-1 django.db.models.fields:13 django.db.models.fields:-1 django.db.models.fields:13 django.db.models.fields:-1 django.db.models.fields:20 django.db.models.fields:-1 django.db.models.fields:14 django.db.models.fields:15 django.db.models.fields:-1 django.db.models.fields:15 django.db.models.fields:-1 django.db.models.fields:16 django.db.models.fields:-1 django.db.models.fields:19 django.db.models.fields:-1 django.db.models.fields:19 django.db.models.fields:-1 django.db.models.fields:19 django.db.models.fields:-1 django.db.models.fields:28 django.db.models.fields:28 django.db.models.fields:28 django.db.models.fields:28 django.db.models.fields:-1 django.db.models.fields:30 django.db.models.fields:30 django.db.models.fields:-1 django.db.models.fields:33 django.db.models.fields:33 django.db.models.fields:33 django.db.models.fields:-1 django.db.models.fields:42 django.db.models.fields:42 django.db.models.fields:42 django.db.models.fields:43 django.db.models.fields:43 django.db.models.fields:43 django.db.models.fields:43 django.db.models.fields:43 django.db.models.fields:-1 django.db.models.fields:44 django.db.models.fields:44 django.db.models.fields:44 django.db.models.fields:44 django.db.models.fields:44 django.db.models.fields:-1 django.db.models.fields:51 django.db.models.fields:51 django.db.models.fields:51 django.db.models.fields:-1 django.db.models.fields:239 django.db.models.fields:239 django.db.models.fields:239 django.db.models.fields:-1 django.db.models.fields:247 django.db.models.fields:247 django.db.models.fields:247 django.db.models.fields:-1 django.db.models.fields:249 django.db.models.fields:249 django.db.models.fields:249 django.db.models.fields:-1 django.db.models.fields:252 django.db.models.fields:252 django.db.models.fields:252 django.db.models.fields:-1 django.db.models.fields:253 django.db.models.fields:253 django.db.models.fields:253 django.db.models.fields:-1 django.db.models.fields:254 django.db.models.fields:254 django.db.models.fields:254 django.db.models.fields:-1 django.db.models.fields:256 django.db.models.fields:256 django.db.models.fields:256 django.db.models.fields:-1 django.db.models.fields:261 django.db.models.fields:261 django.db.models.fields:261 django.db.models.fields:-1 django.db.models.fields:294 django.db.models.fields:294 django.db.models.fields:294 django.db.models.fields:-1 django.db.models.fields:328 django.db.models.fields:328 django.db.models.fields:328 django.db.models.fields:-1 django.db.models.fields:330 django.db.models.fields:330 django.db.models.fields:330 django.db.models.fields:-1 django.db.models.fields:360 django.db.models.fields:360 django.db.models.fields:360 django.db.models.fields:-1 django.db.models.fields:363 django.db.models.fields:363 django.db.models.fields:363 django.db.models.fields:-1 django.db.models.fields:393 django.db.models.fields:393 django.db.models.fields:393 django.db.models.fields:-1 django.db.models.fields:427 django.db.models.fields:427 django.db.models.fields:427 django.db.models.fields:-1 django.db.models.fields:432 django.db.models.fields:432 django.db.models.fields:432 django.db.models.fields:-1 django.db.models.fields:437 django.db.models.fields:437 django.db.models.fields:437 django.db.models.fields:-1 django.db.models.fields:441 django.db.models.fields:441 django.db.models.fields:441 django.db.models.fields:-1 django.db.models.fields:475 django.db.models.fields:475 django.db.models.fields:475 django.db.models.fields:-1 django.db.models.fields:508 django.db.models.fields:508 django.db.models.fields:508 django.db.models.fields:-1 django.db.models.fields:539 django.db.models.fields:539 django.db.models.fields:539 django.db.models.fields:-1 django.db.models.fields:544 django.db.models.fields:544 django.db.models.fields:544 django.db.models.fields:-1 django.db.models.fields:577 django.db.models.fields:577 django.db.models.fields:577 django.db.models.fields:-1 django.db.models.fields:613 django.db.models.fields:613 django.db.models.fields:613 django.db.models.fields:-1 django.db.models.fields:616 django.db.models.fields:616 django.db.models.fields:616 django.db.models.fields:-1 django.db.models.fields:625 django.db.models.fields:625 django.db.models.fields:625 django.db.models.fields:-1 django.db.models.fields:630 django.db.models.fields:630 django.db.models.fields:630 django.db.models.fields:-1 django.db.models.fields:631 django.db.models.fields:631 django.db.models.fields:631 django.db.models.fields:-1 django.contrib.auth.base_user:5 django.contrib.auth.base_user:-1 django.contrib.auth.base_user:427 django.contrib.auth.base_user:-1 django.contrib.auth.base_user:6 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:11 django.contrib.auth.base_user:-1 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:17 django.contrib.auth.base_user:-1 django.contrib.auth.base_user:49 django.contrib.auth.base_user:49 django.contrib.auth.base_user:49 django.contrib.auth.base_user:-1 django.db.models.sql:35 django.db.models.sql:-1 django.db.models.sql:1 django.db.models.sql:38 django.db.models.sql:-1 django.db.models.sql:3 django.db.models.sql:10 django.db.models.sql:-1 django.db.models.sql:4 django.db.models.sql:28 django.db.models.sql:-1 django.db.models.sql:5 django.db.models.sql:17 django.db.models.sql:-1 django.db.models.sql:6 django.forms.fields:8 django.forms.fields:-1 django.forms.fields:9 django.forms.fields:-1 django.forms.fields:44 django.forms.fields:-1 django.forms.fields:10 django.forms.fields:43 django.forms.fields:-1 django.forms.fields:10 django.forms.fields:15 django.forms.fields:-1 django.forms.fields:11 django.forms.fields:12 django.forms.fields:-1 django.forms.fields:16 django.forms.fields:-1 django.forms.fields:30 django.forms.fields:30 django.forms.fields:34 django.forms.fields:34 django.forms.fields:35 django.forms.fields:35 django.forms.fields:38 django.forms.fields:38 django.forms.fields:42 django.forms.fields:42 django.forms.fields:43 django.forms.fields:43 django.forms.fields:550 django.forms.fields:550 django.db.models.fields.related:7 django.db.models.fields.related:-1 django.db.models.fields.related:7 django.db.models.fields.related:-1 django.db.models.fields.related:51 django.db.models.fields.related:-1 django.db.models.fields.related:8 django.db.models.fields.related:43 django.db.models.fields.related:-1 django.db.models.fields.related:8 django.db.models.fields.related:28 django.db.models.fields.related:-1 django.db.models.fields.related:8 django.db.models.fields.related:9 django.db.models.fields.related:-1 django.db.models.fields.related:142 django.db.models.fields.related:-1 django.db.models.fields.related:12 django.db.models.fields.related:115 django.db.models.fields.related:-1 django.db.models.fields.related:13 django.db.models.fields.related:20 django.db.models.fields.related:-1 django.db.models.fields.related:16 django.db.models.fields.related:119 django.db.models.fields.related:-1 django.db.models.fields.related:17 django.db.models.fields.related:89 django.db.models.fields.related:-1 django.db.models.fields.related:18 django.db.models.fields.related:105 django.db.models.fields.related:-1 django.db.models.fields.related:19 django.db.models.fields.related:20 django.db.models.fields.related:-1 django.db.models.fields.related:20 django.db.models.fields.related:-1 django.db.models.fields.related:20 django.db.models.fields.related:-1 django.db.models.fields.related:22 django.db.models.fields.related:-1 django.db.models.fields.related:22 django.db.models.fields.related:-1 django.db.models.fields.related:34 django.db.models.fields.related:34 django.db.models.fields.related:34 django.db.models.fields.related:34 django.db.models.fields.related:-1 django.db.models.fields.related:88 django.db.models.fields.related:88 django.db.models.fields.related:88 django.db.models.fields.related:-1 django.db.models.fields.related:148 django.db.models.fields.related:148 django.db.models.fields.related:148 django.db.models.fields.related:-1 django.db.models.fields.related:190 django.db.models.fields.related:190 django.db.models.fields.related:190 django.db.models.fields.related:-1 django.db.models.fields.related:244 django.db.models.fields.related:244 django.db.models.fields.related:244 django.db.models.fields.related:-1 django.db.models.fields.mixins:4 django.db.models.fields.mixins:-1 django.db.models.fields.mixins:10 django.forms.forms:4 django.forms.forms:-1 django.forms.forms:15 django.forms.forms:-1 django.forms.forms:5 django.forms.forms:8 django.forms.forms:-1 django.forms.forms:8 django.forms.forms:-1 django.forms.forms:8 django.forms.forms:-1 django.forms.forms:8 django.forms.forms:-1 django.forms.forms:8 django.forms.forms:-1 django.forms.forms:10 django.forms.forms:-1 django.forms.forms:10 django.forms.forms:-1 django.forms.forms:14 django.forms.forms:14 django.forms.forms:14 django.forms.forms:-1 django.forms.forms:74 django.forms.forms:74 django.forms.forms:74 django.forms.forms:-1 django.forms.models:6 django.forms.models:-1 django.forms.models:28 django.forms.models:-1 django.forms.models:8 django.forms.models:10 django.forms.models:-1 django.forms.models:14 django.forms.models:-1 django.forms.models:12 django.forms.models:28 django.forms.models:-1 django.forms.models:13 django.forms.models:15 django.forms.models:-1 django.forms.models:15 django.forms.models:-1 django.forms.models:15 django.forms.models:-1 django.forms.models:19 django.forms.models:-1 django.forms.models:30 django.forms.models:30 django.forms.models:-1 django.forms.models:66 django.forms.models:66 django.forms.models:71 django.forms.models:71 django.forms.models:71 django.forms.models:-1 django.forms.models:92 django.forms.models:92 django.forms.models:92 django.forms.models:-1 django.forms.models:109 django.forms.models:109 django.forms.models:109 django.forms.models:111 django.forms.models:111 django.forms.models:111 django.forms.models:111 django.forms.models:-1 django.forms.models:174 django.forms.models:174 django.forms.models:174 django.forms.models:174 django.forms.models:-1 django.forms.models:226 django.forms.models:226 django.forms.models:248 django.forms.models:248 django.forms.models:248 django.forms.models:248 django.forms.models:248 django.forms.models:249 django.forms.models:249 django.forms.models:258 django.forms.models:258 django.forms.models:263 django.forms.models:263 django.forms.models:264 django.forms.models:264 django.forms.models:265 django.forms.models:295 django.forms.models:295 django.forms.models:296 django.forms.models:296 django.template.base:52 django.template.base:52 django.template.base:52 django.template.base:52 django.template.base:52 django.contrib.contenttypes.fields:4 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:7 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:51 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:8 django.contrib.contenttypes.fields:88 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:10 django.contrib.contenttypes.fields:20 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:12 django.contrib.contenttypes.fields:13 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:14 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:14 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:15 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:15 django.contrib.contenttypes.fields:19 django.contrib.contenttypes.fields:19 django.contrib.contenttypes.fields:57 django.contrib.contenttypes.fields:57 django.contrib.contenttypes.fields:57 django.contrib.contenttypes.fields:-1 django.contrib.contenttypes.fields:68 django.contrib.contenttypes.fields:68 django.contrib.contenttypes.fields:68 django.contrib.contenttypes.fields:-1 django.http.request:49 django.http.request:-1 django.http.request:7 django.http.request:8 django.http.request:-1 django.http.request:13 django.http.request:-1 django.http.request:10 django.http.request:12 django.http.request:-1 django.http.request:14 django.http.request:-1 django.http.request:23 django.http.request:23 django.http.request:23 django.http.request:-1 django.http.request:41 django.http.request:41 django.http.request:41 django.http.request:41 django.http.request:41 django.http.request:42 django.http.request:42 django.http.request:42 django.http.request:42 django.http.request:42 django.http.request:45 django.http.request:45 django.http.request:45 django.http.request:45 django.http.request:49 django.http.request:49 django.http.request:58 django.http.request:58 django.http.request:58 django.http.request:60 django.http.request:60 django.http.request:60 django.http.request:64 django.http.request:64 django.http.request:95 django.http.request:100 django.http.request:110 django.http.request:110 django.http.request:110 django.http.request:110 django.http.request:110 django.http.request:111 django.http.request:111 django.http.request:111 django.http.request:111 django.http.request:111 django.db.models.aggregates:3 django.db.models.aggregates:-1 django.db.models.aggregates:239 django.db.models.aggregates:-1 django.db.models.aggregates:4 django.db.models.aggregates:7 django.db.models.aggregates:7 django.db.models.aggregates:7 django.db.models.aggregates:-1 django.db.models.aggregates:14 django.db.models.aggregates:14 django.db.models.aggregates:14 django.db.models.aggregates:-1 django.db.models.aggregates:16 django.db.models.aggregates:16 django.db.models.aggregates:16 django.db.models.aggregates:-1 django.db.models.aggregates:19 django.db.models.aggregates:19 django.db.models.aggregates:19 django.db.models.aggregates:-1 django.db.models.aggregates:20 django.db.models.aggregates:20 django.db.models.aggregates:20 django.db.models.aggregates:-1 django.db.models.aggregates:21 django.db.models.aggregates:21 django.db.models.aggregates:21 django.db.models.aggregates:-1 django.db.models.aggregates:22 django.db.models.aggregates:22 django.db.models.aggregates:22 django.db.models.aggregates:-1 django.db.models.aggregates:23 django.db.models.aggregates:23 django.db.models.aggregates:23 django.db.models.aggregates:-1 django.core.files.uploadedfile:3 django.core.files.uploadedfile:-1 django.core.files.uploadedfile:6 django.core.files.uploadedfile:6 django.core.files.uploadedfile:6 django.core.files.uploadedfile:-1 django.core.files.uploadedfile:22 django.core.files.uploadedfile:22 django.core.files.uploadedfile:22 django.core.files.uploadedfile:-1 django.core.files.uploadedfile:33 django.core.files.uploadedfile:33 django.core.files.uploadedfile:33 django.core.files.uploadedfile:-1 django.core.files.uploadedfile:47 django.core.files.uploadedfile:47 django.core.files.uploadedfile:47 django.core.files.uploadedfile:-1 django.forms.utils:6 django.forms.utils:-1 django.forms.utils:6 django.forms.utils:-1 django.forms.utils:7 django.forms.utils:10 django.forms.utils:-1 django.forms.utils:16 django.forms.utils:16 django.forms.utils:16 django.forms.utils:16 django.forms.utils:50 django.forms.utils:50 django.forms.utils:50 django.forms.utils:50 django.forms.utils:-1 django.forms.utils:60 django.forms.utils:60 django.forms.utils:60 django.forms.utils:60 django.forms.utils:60 django.forms.utils:60 django.forms.utils:60 django.forms.utils:-1 django.db.backends.base.schema:51 django.db.backends.base.schema:-1 django.db.backends.base.schema:11 django.db.models.query_utils:8 django.db.models.query_utils:-1 django.db.models.query_utils:51 django.db.models.query_utils:-1 django.db.models.query_utils:9 django.db.models.query_utils:15 django.db.models.query_utils:-1 django.db.models.query_utils:11 django.db.models.query_utils:47 django.db.models.query_utils:-1 django.db.models.query_utils:11 django.db.models.query_utils:35 django.db.models.query_utils:-1 django.db.models.query_utils:13 django.db.models.query_utils:15 django.db.models.query_utils:-1 django.db.models.query_utils:14 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:26 django.db.models.query_utils:-1 django.db.models.query_utils:52 django.db.models.query_utils:52 django.db.models.query_utils:80 django.db.models.query_utils:80 django.db.models.query_utils:80 django.db.models.query_utils:90 django.db.models.query_utils:90 django.core.files:1 django.core.files:-1 django.db.models.expressions:7 django.db.models.expressions:-1 django.db.models.expressions:51 django.db.models.expressions:-1 django.db.models.expressions:8 django.db.models.expressions:15 django.db.models.expressions:-1 django.db.models.expressions:9 django.db.models.expressions:47 django.db.models.expressions:-1 django.db.models.expressions:9 django.db.models.expressions:10 django.db.models.expressions:-1 django.db.models.expressions:35 django.db.models.expressions:-1 django.db.models.expressions:12 django.db.models.expressions:128 django.db.models.expressions:128 django.db.models.expressions:128 django.db.models.expressions:216 django.db.models.expressions:216 django.db.models.expressions:232 django.db.models.expressions:232 django.db.models.expressions:232 django.db.models.expressions:234 django.db.models.expressions:236 django.db.models.expressions:238 django.db.models.expressions:261 django.db.models.expressions:261 django.db.models.expressions:266 django.db.models.expressions:266 django.db.models.expressions:266 django.db.models.query:6 django.db.models.query:-1 django.db.models.query:35 django.db.models.query:-1 django.db.models.query:9 django.db.models.query:16 django.db.models.query:16 django.db.models.query:-1 django.db.models.query:23 django.db.models.query:23 django.db.models.query:23 django.db.models.query:23 django.db.models.query:23 django.db.models.query:49 django.db.models.query:49 django.db.models.deletion:5 django.db.models.deletion:-1 django.db.models.deletion:51 django.db.models.deletion:-1 django.db.models.deletion:7 django.db.models.deletion:51 django.db.models.deletion:51 django.db.models.deletion:51 django.db.models.deletion:-1 django.db.models.deletion:55 django.db.models.deletion:55 django.db.models.deletion:55 django.db.models.deletion:-1 django.db.models.deletion:63 django.db.models.deletion:63 django.db.models.deletion:64 django.db.models.deletion:64 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:7 django.contrib.contenttypes.models:-1 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:14 django.contrib.contenttypes.models:-1 django.db.models:7 django.db.models:-1 django.db.models:3 django.db.models:14 django.db.models:-1 django.db.models:4 django.db.models:16 django.db.models:-1 django.db.models:5 django.db.models:19 django.db.models:-1 django.db.models:6 django.db.models:20 django.db.models:-1 django.db.models:7 django.db.models:21 django.db.models:-1 django.db.models:8 django.db.models:22 django.db.models:-1 django.db.models:9 django.db.models:23 django.db.models:-1 django.db.models:10 django.db.models:51 django.db.models:-1 django.db.models:23 django.db.models:55 django.db.models:-1 django.db.models:24 django.db.models:625 django.db.models:-1 django.db.models:45 django.db.models:630 django.db.models:-1 django.db.models:46 django.db.models:249 django.db.models:-1 django.db.models:47 django.db.models:613 django.db.models:-1 django.db.models:48 django.db.models:427 django.db.models:-1 django.db.models:49 django.db.models:294 django.db.models:-1 django.db.models:50 django.db.models:328 django.db.models:-1 django.db.models:51 django.db.models:475 django.db.models:-1 django.db.models:52 django.db.models:539 django.db.models:-1 django.db.models:53 django.db.models:261 django.db.models:-1 django.db.models:54 django.db.models:616 django.db.models:-1 django.db.models:55 django.db.models:360 django.db.models:-1 django.db.models:56 django.db.models:51 django.db.models:-1 django.db.models:57 django.db.models:577 django.db.models:-1 django.db.models:58 django.db.models:256 django.db.models:-1 django.db.models:59 django.db.models:441 django.db.models:-1 django.db.models:60 django.db.models:239 django.db.models:-1 django.db.models:61 django.db.models:437 django.db.models:-1 django.db.models:62 django.db.models:432 django.db.models:-1 django.db.models:63 django.db.models:254 django.db.models:-1 django.db.models:64 django.db.models:252 django.db.models:-1 django.db.models:65 django.db.models:253 django.db.models:-1 django.db.models:66 django.db.models:330 django.db.models:-1 django.db.models:67 django.db.models:631 django.db.models:-1 django.db.models:68 django.db.models:247 django.db.models:-1 django.db.models:69 django.db.models:393 django.db.models:-1 django.db.models:70 django.db.models:508 django.db.models:-1 django.db.models:71 django.db.models:363 django.db.models:-1 django.db.models:72 django.db.models:544 django.db.models:-1 django.db.models:73 django.db.models:52 django.db.models:-1 django.db.models:74 django.db.models:102 django.db.models:-1 django.db.models:75 django.db.models:13 django.db.models:-1 django.db.models:76 django.db.models:22 django.db.models:-1 django.db.models:77 django.db.models:5 django.db.models:-1 django.db.models:78 django.db.models:148 django.db.models:-1 django.db.models:79 django.db.models:88 django.db.models:-1 django.db.models:80 django.db.models:16 django.db.models:-1 django.db.models:81 django.db.models:244 django.db.models:-1 django.db.models:82 django.db.models:17 django.db.models:-1 django.db.models:83 django.db.models:18 django.db.models:-1 django.db.models:84 django.db.models:190 django.db.models:-1 django.db.models:85 django.db.models:19 django.db.models:-1 django.db.models:86 django.db.models:15 django.db.models:-1 django.db.models:88 django.db.models:47 django.db.models:-1 django.db.models:89 django.db.models:26 django.db.models:-1 django.db.models:96 django.urls:3 django.urls:-1 django.urls:26 django.contrib.auth.models:17 django.contrib.auth.models:-1 django.contrib.auth.models:4 django.contrib.auth.models:11 django.contrib.auth.models:-1 django.contrib.auth.models:5 django.contrib.auth.models:4 django.contrib.auth.models:-1 django.contrib.auth.models:6 django.contrib.auth.models:14 django.contrib.auth.models:-1 django.contrib.auth.models:7 django.contrib.auth.models:15 django.contrib.auth.models:15 django.contrib.auth.models:-1 django.contrib.auth.models:19 django.contrib.auth.models:19 django.contrib.auth.models:19 django.contrib.auth.models:19 django.contrib.auth.models:-1 django.contrib.auth.models:24 django.contrib.auth.models:24 django.contrib.auth.models:24 django.contrib.auth.models:26 django.contrib.auth.models:27 django.contrib.auth.models:27 django.contrib.auth.models:28 django.contrib.auth.models:29 django.contrib.auth.models:29 django.contrib.auth.models:29 django.contrib.auth.models:29 django.contrib.auth.models:29 django.contrib.auth.models:29 django.contrib.auth.models:31 django.contrib.auth.models:31 django.contrib.auth.models:31 django.contrib.auth.models:31 django.contrib.auth.models:-1 django.contrib.auth.models:35 django.contrib.auth.models:35 django.contrib.auth.models:35 django.contrib.auth.models:37 django.contrib.auth.models:38 django.contrib.auth.models:39 django.contrib.auth.models:39 django.contrib.auth.models:39 django.contrib.auth.models:39 django.contrib.auth.models:39 django.contrib.auth.models:43 django.contrib.auth.models:43 django.contrib.auth.models:43 django.contrib.auth.models:-1 django.contrib.auth.models:60 django.contrib.auth.models:61 django.contrib.auth.models:62 django.contrib.auth.models:69 django.contrib.auth.models:69 django.contrib.auth.models:71 django.contrib.auth.models:71 django.contrib.auth.models:71 django.contrib.auth.models:-1 django.contrib.auth.models:93 django.contrib.auth.models:93 django.contrib.auth.models:93 django.contrib.auth.models:-1 django.forms:15 django.forms:-1 django.forms:3 django.forms:14 django.forms:-1 django.forms:33 django.forms:74 django.forms:-1 django.forms:34 django.forms:28 django.forms:-1 django.forms:35 django.forms:174 django.forms:-1 django.forms:38 django.forms:71 django.forms:-1 django.forms:39 django.forms:111 django.forms:-1 django.forms:40 django.forms:92 django.forms:-1 django.forms:44 django.core.files.uploadhandler:22 django.core.files.uploadhandler:-1 django.core.files.uploadhandler:5 django.core.files.uploadhandler:6 django.core.files.uploadhandler:-1 django.core.files.uploadhandler:5 django.core.files.uploadhandler:51 django.core.files.uploadhandler:51 django.utils.tree:7 django.utils.tree:7 django.utils.tree:-1 django.utils.tree:10 django.utils.tree:10 ```

Then it lists a bunch of my files, starting with this one:

from __future__ import annotations
from enum import Enum
from typing import TYPE_CHECKING, TypeVar

if TYPE_CHECKING:
    from pydantic import BaseModel

    from foo import FooRequest
    from bar import BaseBar
    from baz import BaseBaz

BaseModelT = TypeVar("BaseModelT", bound="BaseModel")
BaseBarT = TypeVar("BaseBarT", bound="BaseBarModel", covariant=True)
BaseBazT = TypeVar("BaseBazT", bound="BaseBaz", covariant=True)
EnumT = TypeVar("EnumT", bound=Enum)
FooRequestT = TypeVar("FooRequestT", bound="FooRequest")

(Redacted model names, apologies.)

My best guess is that this used to barely work, and now is no longer working? Or it could be a red herring. 🤷

Alexerson commented 1 month ago

Sorry, I didn’t get the time to finish my explorations. Also, it’s a weird bug, because changing versions sometimes give me bugs with different configurations… The bug might be in mypy and not django-stubs in the end, not sure... I’ll try to find more time this week to keep exploring.

christianbundy commented 1 month ago

Bisect complete:

git bisect start
# status: waiting for both good and bad commits
# bad: [ffcebb3f0a71c4a2c3fd5038d29b3a5bcbf73248] Add django 5.1 to the test matrix and add its classifier (#2380)
git bisect bad ffcebb3f0a71c4a2c3fd5038d29b3a5bcbf73248
# status: waiting for good commit(s), bad commit known
# good: [5118c5dfbe99504e1cca57ea00bf38bd14014e4f] Bump `django-stubs-ext` dependency to latest (#2186)
git bisect good 5118c5dfbe99504e1cca57ea00bf38bd14014e4f
# bad: [d60e31ed0ac4e4115f9ef20041521c201391d592] Prepare for a release `5.0.4` (#2285)
git bisect bad d60e31ed0ac4e4115f9ef20041521c201391d592
# good: [3830fa9b76901c0fb76cd28aa900349d1ead344c] fix handling of explicit `objects` annotation (#2241)
git bisect good 3830fa9b76901c0fb76cd28aa900349d1ead344c
# good: [b2b1afac196e622ec725248cad1c22a6557253d0] Allow single generic param for Field in ForeignKey (#2261)
git bisect good b2b1afac196e622ec725248cad1c22a6557253d0
# skip: [d747285f9597eb0942cd2e5049ed2cec6a0ac90a] Improve stackoverflow link
git bisect skip d747285f9597eb0942cd2e5049ed2cec6a0ac90a
# bad: [59ebe6f1523c4d321b9e5ecba6c6458ace813489] fill QuerySet generics using the manager's model type (#2281)
git bisect bad 59ebe6f1523c4d321b9e5ecba6c6458ace813489
# bad: [0022c598d478d5e6714e21b103ccf408b0a4ba40] Bump pyright from 1.1.372 to 1.1.373 (#2273)
git bisect bad 0022c598d478d5e6714e21b103ccf408b0a4ba40
# bad: [94846987415e16f508df73ff7439993bbf2e41e3] add `Path` type argument to tuple returned by `get_app_template_dirs` (#2266)
git bisect bad 94846987415e16f508df73ff7439993bbf2e41e3
# bad: [3f0da4f9d28fcaa20cb6d9c7d71b589dd46722f7] Bump pyright from 1.1.371 to 1.1.372 (#2264)
git bisect bad 3f0da4f9d28fcaa20cb6d9c7d71b589dd46722f7
# bad: [ac36393ba31ebafbd436b140576d8f828d8c7474] Unify plugin check for model type info (#2263)
git bisect bad ac36393ba31ebafbd436b140576d8f828d8c7474
# first bad commit: [ac36393ba31ebafbd436b140576d8f828d8c7474] Unify plugin check for model type info (#2263)

It seems that the issue started with ac36393ba31ebafbd436b140576d8f828d8c7474, though when I revert it on top of master (currently ffcebb3f0a71c4a2c3fd5038d29b3a5bcbf73248) I still see the same issue. It could be an issue with my testing methodology, as I'm doing pip install git+file:///tmp/django-stubs and seeing some "requirement already satisfied":

Collecting git+file:/tmp/django-stubs
  Cloning file:///tmp/django-stubs to /tmp/pip-req-build-1ha3uzw8
  Running command git clone --filter=blob:none --quiet file:///tmp/django-stubs /tmp/pip-req-build-1ha3uzw8
  warning: filtering not recognized by server, ignoring
  Resolved file:///tmp/django-stubs to commit 496df6a7d3fd78c93739974892ccbf64fbc456a2
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: django in /.venv/lib/python3.12/site-packages (from django-stubs==5.1.0) (5.1.1)
Requirement already satisfied: asgiref in /.venv/lib/python3.12/site-packages (from django-stubs==5.1.0) (3.8.1)
Requirement already satisfied: django-stubs-ext>=5.1.0 in /.venv/lib/python3.12/site-packages (from django-stubs==5.1.0) (5.1.0)
Requirement already satisfied: typing-extensions>=4.11.0 in /.venv/lib/python3.12/site-packages (from django-stubs==5.1.0) (4.12.2)
Requirement already satisfied: types-PyYAML in /.venv/lib/python3.12/site-packages (from django-stubs==5.1.0) (6.0.12.20240917)
Requirement already satisfied: sqlparse>=0.3.1 in /.venv/lib/python3.12/site-packages (from django->django-stubs==5.1.0) (0.5.1)

I'm testing with Mypy 1.11.2, in case that's helpful -- unless I'm making some mistakes, it looks to me like this is specific django-stubs[-ext].

christianbundy commented 1 month ago

Interesting, I just triggered the same bug when upgrading dependencies in CI, even though django-stubs and django-stubs-ext are pinned. The only relevant changes:

Odd, I wonder if the same problem was merged into DRF-stubs?

Alexerson commented 1 month ago

Ok, so I spent some time trying that out again this morning.

9a5ef9acfa37bc5a5e7338c1bad693a8bb19e25d seems to be the issue. Reverting it on top of master fixes the issue.

I will read more about this commit and the issue mentioned in the comment to see if I can see what’s possible.

Alexerson commented 1 month ago

Finding that the problematic commit was about managers and from_queryset, I looked at our codebase and I was able to find a manager that depends on a queryset that depends on a model that depends on the manager.

I’m trying to write a minimal reproduction, but I have a workaround in our case.

christianbundy commented 1 month ago

I looked at our codebase and I was able to find a manager that depends on a queryset that depends on a model that depends on the manager.

Do you mean something like:

class MyQuerySet(QuerySet[MyModel]):
    ...

MyManager = Manager.from_queryset(MyQuerySet)

class MyModel(Model):
    objects = MyManager()
Alexerson commented 1 month ago

Yes. More specifically, something like (but more complicated, because I’m inheriting from custom QuerySet and Manager):

class MyQuerySet(models.QuerySet):
    ...

class MyManager(models.Manager):
    ...

class MyModel(models.Model):
    objects = MyManager['MyModel'].from_queryset(MyQuerySet)
    ...

I removed the ['MyModel'] in the objects = line and added it to the MyQuerySet and it seems to work fine (it’s even showing me more real type errors in other places of the codebase). It was even more convoluted to be honest. I feel whoever wrote that code back in the day (= most likely me…) didn’t quite understand what it was doing.

It’s still unexpected that it would break because it used to be fine, but I’m not sure it’s a bug really. (I’m not saying "work", because I feel mypy was just ignoring some stuff that he’s now understanding and properly checking).

christianbundy commented 1 month ago

Thanks! Do you have any advice on finding the culprit? The stack trace is huge, and I couldn't make sense of it, and I can't find anywhere that I'm doing anything likeobjects = MyManager['MyModel'].from_queryset(MyQuerySet).