Skip to content

Commit 37ef686

Browse files
committed
Init django polymorphic types
1 parent 90d8559 commit 37ef686

29 files changed

+627
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SECRET_KEY = "1"
2+
3+
INSTALLED_APPS = (
4+
"django.contrib.contenttypes",
5+
"django.contrib.sites",
6+
"django.contrib.sessions",
7+
"django.contrib.messages",
8+
"django.contrib.admin.apps.SimpleAdminConfig",
9+
"django.contrib.staticfiles",
10+
"django.contrib.auth",
11+
"polymorphic",
12+
)
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# Module-level metadata
2+
polymorphic.__license__
3+
polymorphic.__title__
4+
5+
# Child classes for inline admin (runtime-only helper classes)
6+
polymorphic.admin.GenericPolymorphicInlineModelAdmin.Child
7+
polymorphic.admin.PolymorphicInlineModelAdmin.Child
8+
polymorphic.admin.generic.GenericPolymorphicInlineModelAdmin.Child
9+
polymorphic.admin.inlines.PolymorphicInlineModelAdmin.Child
10+
11+
# Admin __init__ methods with *args
12+
polymorphic.admin.PolymorphicChildModelAdmin.__init__
13+
polymorphic.admin.PolymorphicParentModelAdmin.__init__
14+
polymorphic.admin.childadmin.PolymorphicChildModelAdmin.__init__
15+
polymorphic.admin.parentadmin.PolymorphicParentModelAdmin.__init__
16+
17+
# Admin get_form - stub includes change parameter for compatibility with Django base class
18+
polymorphic.admin.PolymorphicChildModelAdmin.get_form
19+
polymorphic.admin.childadmin.PolymorphicChildModelAdmin.get_form
20+
21+
# QuerySet methods - version-specific Django parameters
22+
polymorphic.base.PolymorphicQuerySet.__repr__
23+
polymorphic.base.PolymorphicQuerySet.bulk_create
24+
polymorphic.query.PolymorphicQuerySet.__repr__
25+
polymorphic.query.PolymorphicQuerySet.bulk_create
26+
polymorphic.managers.PolymorphicQuerySet.__repr__
27+
polymorphic.managers.PolymorphicQuerySet.bulk_create
28+
29+
# Formset factory functions - too complex to type precisely
30+
polymorphic.formsets.generic_polymorphic_inlineformset_factory
31+
polymorphic.formsets.polymorphic_inlineformset_factory
32+
polymorphic.formsets.polymorphic_modelformset_factory
33+
polymorphic.formsets.polymorphic_child_forms_factory
34+
polymorphic.formsets.generic.generic_polymorphic_inlineformset_factory
35+
polymorphic.formsets.models.polymorphic_child_forms_factory
36+
polymorphic.formsets.models.polymorphic_inlineformset_factory
37+
polymorphic.formsets.models.polymorphic_modelformset_factory
38+
39+
# PolymorphicFormSetChild - runtime implementation details
40+
polymorphic.formsets.PolymorphicFormSetChild.__init__
41+
polymorphic.formsets.PolymorphicFormSetChild.content_type
42+
polymorphic.formsets.PolymorphicFormSetChild.get_form
43+
polymorphic.formsets.GenericPolymorphicFormSetChild.__init__
44+
polymorphic.formsets.GenericPolymorphicFormSetChild.get_form
45+
polymorphic.formsets.generic.GenericPolymorphicFormSetChild.__init__
46+
polymorphic.formsets.generic.GenericPolymorphicFormSetChild.get_form
47+
polymorphic.formsets.models.PolymorphicFormSetChild.__init__
48+
polymorphic.formsets.models.PolymorphicFormSetChild.content_type
49+
polymorphic.formsets.models.PolymorphicFormSetChild.get_form
50+
51+
# BasePolymorphicModelFormSet - runtime helpers
52+
polymorphic.formsets.BasePolymorphicModelFormSet.child_forms
53+
polymorphic.formsets.BasePolymorphicModelFormSet.empty_forms
54+
polymorphic.formsets.BasePolymorphicModelFormSet.get_form_class
55+
polymorphic.formsets.models.BasePolymorphicModelFormSet.child_forms
56+
polymorphic.formsets.models.BasePolymorphicModelFormSet.empty_forms
57+
polymorphic.formsets.models.BasePolymorphicModelFormSet.get_form_class
58+
59+
# Model attributes - Django auto-generated
60+
polymorphic.models.PolymorphicModel.DoesNotExist
61+
polymorphic.models.PolymorphicModel.MultipleObjectsReturned
62+
polymorphic.models.PolymorphicModel.polymorphic_ctype_id
63+
polymorphic.models.PolymorphicModel.translate_polymorphic_Q_object
64+
polymorphic.utils.PolymorphicModel.DoesNotExist
65+
polymorphic.utils.PolymorphicModel.MultipleObjectsReturned
66+
polymorphic.utils.PolymorphicModel.polymorphic_ctype_id
67+
polymorphic.utils.PolymorphicModel.translate_polymorphic_Q_object
68+
69+
# Type annotation helpers (not runtime classes)
70+
polymorphic.models.PolymorphicModel@AnnotatedWith
71+
72+
# ShowFieldBase private methods (internal helpers)
73+
polymorphic.showfields.ShowFieldBase._showfields_add_annotated_fields
74+
polymorphic.showfields.ShowFieldBase._showfields_add_deferred_fields
75+
polymorphic.showfields.ShowFieldBase._showfields_add_extra_select_fields
76+
77+
# Optional dependencies - contrib modules may require additional packages
78+
polymorphic.contrib.extra_views
79+
80+
# Template properties - read-only at runtime
81+
polymorphic.admin.PolymorphicChildModelAdmin.change_form_template
82+
polymorphic.admin.PolymorphicChildModelAdmin.delete_confirmation_template
83+
polymorphic.admin.PolymorphicChildModelAdmin.object_history_template
84+
polymorphic.admin.PolymorphicParentModelAdmin.change_list_template
85+
polymorphic.admin.childadmin.PolymorphicChildModelAdmin.change_form_template
86+
polymorphic.admin.childadmin.PolymorphicChildModelAdmin.delete_confirmation_template
87+
polymorphic.admin.childadmin.PolymorphicChildModelAdmin.object_history_template
88+
polymorphic.admin.parentadmin.PolymorphicParentModelAdmin.change_list_template
89+
90+
# __all__ differences - stub uses list for easier editing
91+
polymorphic.admin.__all__
92+
polymorphic.formsets.__all__
93+
polymorphic.managers.__all__
94+
95+
# Descriptor vs typed value - normal for stubs
96+
polymorphic.models.PolymorphicModel.objects
97+
polymorphic.models.PolymorphicModel.polymorphic_ctype
98+
polymorphic.utils.PolymorphicModel.objects
99+
polymorphic.utils.PolymorphicModel.polymorphic_ctype
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
version = "4.4.*"
2+
upstream_repository = "https://github.com/jazzband/django-polymorphic"
3+
requires = ["django-stubs"]
4+
5+
[tool.stubtest]
6+
mypy_plugins = ["mypy_django_plugin.main"]
7+
mypy_plugins_config = {"django-stubs" = {"django_settings_module" = "@tests.django_settings"}}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
VERSION: str
2+
__version__ = VERSION
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from .childadmin import PolymorphicChildModelAdmin as PolymorphicChildModelAdmin
2+
from .filters import PolymorphicChildModelFilter as PolymorphicChildModelFilter
3+
from .forms import PolymorphicModelChoiceForm as PolymorphicModelChoiceForm
4+
from .generic import (
5+
GenericPolymorphicInlineModelAdmin as GenericPolymorphicInlineModelAdmin,
6+
GenericStackedPolymorphicInline as GenericStackedPolymorphicInline,
7+
)
8+
from .helpers import (
9+
PolymorphicInlineAdminForm as PolymorphicInlineAdminForm,
10+
PolymorphicInlineAdminFormSet as PolymorphicInlineAdminFormSet,
11+
PolymorphicInlineSupportMixin as PolymorphicInlineSupportMixin,
12+
)
13+
from .inlines import (
14+
PolymorphicInlineModelAdmin as PolymorphicInlineModelAdmin,
15+
StackedPolymorphicInline as StackedPolymorphicInline,
16+
)
17+
from .parentadmin import PolymorphicParentModelAdmin as PolymorphicParentModelAdmin
18+
19+
__all__ = [
20+
"PolymorphicParentModelAdmin",
21+
"PolymorphicChildModelAdmin",
22+
"PolymorphicModelChoiceForm",
23+
"PolymorphicChildModelFilter",
24+
"PolymorphicInlineAdminForm",
25+
"PolymorphicInlineAdminFormSet",
26+
"PolymorphicInlineSupportMixin",
27+
"PolymorphicInlineModelAdmin",
28+
"StackedPolymorphicInline",
29+
"GenericPolymorphicInlineModelAdmin",
30+
"GenericStackedPolymorphicInline",
31+
]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from collections.abc import Sequence
2+
from typing import Any, ClassVar
3+
4+
from django.contrib import admin
5+
from django.db import models
6+
from django.forms import Form, ModelForm
7+
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
8+
9+
class ParentAdminNotRegistered(RuntimeError): ...
10+
11+
class PolymorphicChildModelAdmin(admin.ModelAdmin[Any]):
12+
base_model: type[models.Model] | None
13+
base_form: type[Form] | None
14+
base_fieldsets: Sequence[tuple[str | None, dict[str, Any]]] | None
15+
extra_fieldset_title: str
16+
show_in_index: bool
17+
change_form_template: ClassVar[list[str]]
18+
delete_confirmation_template: ClassVar[list[str]]
19+
object_history_template: ClassVar[list[str]]
20+
def get_form(
21+
self, request: HttpRequest, obj: Any | None = None, change: bool = False, **kwargs: Any
22+
) -> type[ModelForm[Any]]: ...
23+
def get_model_perms(self, request: HttpRequest) -> dict[str, bool]: ...
24+
def get_base_fieldsets(self, request: HttpRequest, obj: Any = None) -> list[tuple[str | None, dict[str, Any]]] | None: ...
25+
def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> list[tuple[str | None, dict[str, Any]]]: ... # type: ignore[override]
26+
def get_subclass_fields(self, request: HttpRequest, obj: Any = None) -> list[str]: ...
27+
def response_post_save_add(self, request: HttpRequest, obj: Any) -> HttpResponseRedirect: ...
28+
def response_post_save_change(self, request: HttpRequest, obj: Any) -> HttpResponseRedirect: ...
29+
def render_change_form(
30+
self,
31+
request: HttpRequest,
32+
context: dict[str, Any],
33+
add: bool = False,
34+
change: bool = False,
35+
form_url: str = "",
36+
obj: Any = None,
37+
) -> HttpResponse: ...
38+
def delete_view(self, request: HttpRequest, object_id: str, context: dict[str, Any] | None = None) -> HttpResponse: ...
39+
def history_view(self, request: HttpRequest, object_id: str, extra_context: dict[str, Any] | None = None) -> HttpResponse: ...
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from collections.abc import Iterable
2+
from typing import Any
3+
4+
from django.contrib.admin import ModelAdmin, SimpleListFilter
5+
from django.db.models import QuerySet
6+
from django.http import HttpRequest
7+
8+
class PolymorphicChildModelFilter(SimpleListFilter):
9+
title: str
10+
parameter_name: str
11+
def lookups(self, request: HttpRequest, model_admin: ModelAdmin[Any]) -> Iterable[tuple[str, str]]: ...
12+
def queryset(self, request: HttpRequest, queryset: QuerySet[Any]) -> QuerySet[Any]: ...
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from typing import Any
2+
3+
from django import forms
4+
5+
class PolymorphicModelChoiceForm(forms.Form):
6+
type_label: str
7+
ct_id: forms.ChoiceField
8+
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from typing import Any
2+
3+
from django.contrib.contenttypes.admin import GenericInlineModelAdmin
4+
from django.http import HttpRequest
5+
6+
from ..formsets import BaseGenericPolymorphicInlineFormSet
7+
from .inlines import PolymorphicInlineModelAdmin
8+
9+
class GenericPolymorphicInlineModelAdmin(PolymorphicInlineModelAdmin, GenericInlineModelAdmin):
10+
formset: type[BaseGenericPolymorphicInlineFormSet] # type: ignore[assignment]
11+
def get_formset(self, request: HttpRequest, obj: Any = None, **kwargs: Any) -> type[BaseGenericPolymorphicInlineFormSet]: ... # type: ignore[override]
12+
13+
class GenericStackedPolymorphicInline(GenericPolymorphicInlineModelAdmin):
14+
template: str
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections.abc import Iterator
2+
from typing import Any
3+
4+
from django.contrib.admin.helpers import AdminField, InlineAdminForm, InlineAdminFormSet
5+
from django.http import HttpRequest
6+
7+
class PolymorphicInlineAdminForm(InlineAdminForm):
8+
def polymorphic_ctype_field(self) -> AdminField: ...
9+
@property
10+
def is_empty(self) -> bool: ...
11+
12+
class PolymorphicInlineAdminFormSet(InlineAdminFormSet):
13+
request: HttpRequest | None
14+
obj: Any | None
15+
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
16+
def __iter__(self) -> Iterator[PolymorphicInlineAdminForm]: ...
17+
def get_child_fieldsets(self, child_inline: Any) -> list[tuple[str | None, dict[str, Any]]]: ...
18+
def get_child_readonly_fields(self, child_inline: Any) -> list[str]: ...
19+
def get_child_prepopulated_fields(self, child_inline: Any) -> dict[str, Any]: ...
20+
def inline_formset_data(self) -> str: ...
21+
22+
class PolymorphicInlineSupportMixin:
23+
def get_inline_formsets(
24+
self, request: HttpRequest, formsets: list[Any], inline_instances: list[Any], obj: Any = None, *args: Any, **kwargs: Any
25+
) -> list[InlineAdminFormSet]: ...

0 commit comments

Comments
 (0)