Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions plain-admin/plain/admin/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,23 @@ def has_permission(cls, user: Model) -> bool:
# Set dynamically by AdminViewset.get_views()
viewset: type[AdminViewset] | None = None

# Set dynamically by AdminViewset.get_views() to the sibling view's
# get_view_url, when that sibling view exists on the viewset.
def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

template_name = "admin/page.html"
cards: tuple[Card, ...] = ()

Expand Down
75 changes: 0 additions & 75 deletions plain-admin/plain/admin/views/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,21 +246,6 @@ def get_filter_names(self) -> tuple[str, ...]:
def get_object_id(self, obj: Any) -> Any:
return self.get_field_value(obj, "id")

def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

def get_object_url(self, obj: Any) -> str:
if url := self.get_detail_url(obj):
return url
Expand Down Expand Up @@ -294,21 +279,6 @@ class AdminCreateView(AdminView, CreateView):
template_name = None
nav_section = None

def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

def get_success_url(self, form: "BaseForm") -> str:
if list_url := self.get_list_url():
return list_url
Expand All @@ -335,21 +305,6 @@ def get_template_names(self) -> list[str]:
"admin/detail.html", # A generic detail view for rendering any object
]

def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

def get_fields(self) -> tuple[str, ...]:
return self.fields

Expand All @@ -372,21 +327,6 @@ class AdminUpdateView(AdminView, UpdateView):
template_name = None
nav_section = None

def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

def get_links(self) -> dict[str, str]:
links = super().get_links()

Expand Down Expand Up @@ -418,21 +358,6 @@ class AdminDeleteView(AdminView, DeleteView):
template_name = "admin/delete.html"
nav_section = None

def get_list_url(self) -> str:
return ""

def get_create_url(self) -> str:
return ""

def get_detail_url(self, obj: Any) -> str:
return ""

def get_update_url(self, obj: Any) -> str:
return ""

def get_delete_url(self, obj: Any) -> str:
return ""

def get_links(self) -> dict[str, str]:
links = super().get_links()

Expand Down
4 changes: 2 additions & 2 deletions plain-admin/plain/admin/views/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from .base import AdminView
from .viewsets import AdminViewset

T = TypeVar("T")
T = TypeVar("T", bound="AdminView")
VS = TypeVar("VS", bound="AdminViewset")


Expand All @@ -41,7 +41,7 @@ def register_view(
self, view: type[T] | None = None
) -> type[T] | Callable[[type[T]], type[T]]:
def inner(view: type[T]) -> type[T]:
self.registered_views.add(view) # ty: ignore[invalid-argument-type]
self.registered_views.add(view)
# Invalidate lookup caches
self.__dict__.pop("slug_to_view", None)
self.__dict__.pop("path_to_view", None)
Expand Down
21 changes: 10 additions & 11 deletions plain-admin/plain/admin/views/viewsets.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from plain.views import View
from .base import AdminView


class AdminViewset:
@classmethod
def get_views(cls) -> list[type[View]]:
def get_views(cls) -> list[type[AdminView]]:
"""Views are defined as inner classes on the viewset class."""

# Primary views that we can interlink automatically
Expand All @@ -27,29 +27,28 @@ def get_views(cls) -> list[type[View]]:
DeleteView.parent_view_class = DetailView

# Now iterate all inner view classes
views: list[type[View]] = []
views: list[type[AdminView]] = []

for attr in cls.__dict__.values():
if isinstance(attr, type) and issubclass(attr, View):
if isinstance(attr, type) and issubclass(attr, AdminView):
views.append(attr)

for view in views:
# Dynamic attributes stamped onto the view class by the viewset.
view.viewset = cls # ty: ignore[unresolved-attribute]
view.viewset = cls

if ListView:
view.get_list_url = ListView.get_view_url # ty: ignore[unresolved-attribute]
view.get_list_url = ListView.get_view_url

if CreateView:
view.get_create_url = CreateView.get_view_url # ty: ignore[unresolved-attribute]
view.get_create_url = CreateView.get_view_url

if DetailView:
view.get_detail_url = DetailView.get_view_url # ty: ignore[unresolved-attribute]
view.get_detail_url = DetailView.get_view_url

if UpdateView:
view.get_update_url = UpdateView.get_view_url # ty: ignore[unresolved-attribute]
view.get_update_url = UpdateView.get_view_url

if DeleteView:
view.get_delete_url = DeleteView.get_view_url # ty: ignore[unresolved-attribute]
view.get_delete_url = DeleteView.get_view_url

return views
Loading