Plain is headed towards 1.0! Subscribe for development updates →

 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