1from plain.views import View
2
3
4class AdminViewset:
5 @classmethod
6 def get_views(cls) -> list[View]:
7 """Views are defined as inner classes on the viewset class."""
8
9 # Primary views that we can interlink automatically
10 ListView = getattr(cls, "ListView", None)
11 CreateView = getattr(cls, "CreateView", None)
12 UpdateView = getattr(cls, "UpdateView", None)
13 DetailView = getattr(cls, "DetailView", None)
14 DeleteView = getattr(cls, "DeleteView", None)
15
16 # Set parent-child view class relationships
17 if ListView and CreateView:
18 CreateView.parent_view_class = ListView
19
20 if ListView and DetailView:
21 DetailView.parent_view_class = ListView
22
23 if DetailView and UpdateView:
24 UpdateView.parent_view_class = DetailView
25
26 if DetailView and DeleteView:
27 DeleteView.parent_view_class = DetailView
28
29 # Now iterate all inner view classes
30 views = []
31
32 for attr in cls.__dict__.values():
33 if isinstance(attr, type) and issubclass(attr, View):
34 views.append(attr)
35
36 for view in views:
37 view.viewset = cls
38
39 if ListView:
40 view.get_list_url = ListView.get_view_url
41
42 if CreateView:
43 view.get_create_url = CreateView.get_view_url
44
45 if DetailView:
46 view.get_detail_url = DetailView.get_view_url
47
48 if UpdateView:
49 view.get_update_url = UpdateView.get_view_url
50
51 if DeleteView:
52 view.get_delete_url = DeleteView.get_view_url
53
54 return views