plain.admin 0.26.0__py3-none-any.whl → 0.27.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,6 +55,12 @@ main a:hover {
55
55
  text-decoration: underline;
56
56
  }
57
57
 
58
+ select {
59
+ border-radius: 6px;
60
+ background-color: rgba(255, 255, 255, 0.05);
61
+ border: 1px solid rgba(255, 255, 255, 0.1);
62
+ }
63
+
58
64
  .actions a, .actions button, main button {
59
65
  display: inline-block;
60
66
  padding: 8px 16px;
@@ -35,8 +35,7 @@ jQuery(function($) {
35
35
  instance.popper.classList.add("*:rounded-md")
36
36
  instance.popper.classList.add("*:shadow-lg")
37
37
  instance.popper.classList.add("*:ring-1")
38
- instance.popper.classList.add("*:ring-white")
39
- instance.popper.classList.add("*:ring-opacity-5")
38
+ instance.popper.classList.add("*:ring-white/20")
40
39
  },
41
40
  });
42
41
  });
plain/admin/cards/base.py CHANGED
@@ -75,7 +75,7 @@ class Card:
75
75
  return self.link
76
76
 
77
77
  def get_current_display(self) -> str:
78
- return self.request.GET.get(f"{self.get_slug()}.display", "")
78
+ return self.request.query_params.get(f"{self.get_slug()}.display", "")
79
79
 
80
80
  def get_displays(self) -> list[str] | Enum | None:
81
81
  if hasattr(self.displays, "copy"):
@@ -125,15 +125,13 @@ class TrendCard(ChartCard):
125
125
  {
126
126
  "data": calculate_trend_line(trend_data),
127
127
  "type": "line",
128
- "borderColor": "rgba(0, 0, 0, 0.3)",
128
+ "borderColor": "rgba(255, 255, 255, 0.3)",
129
129
  "borderWidth": 2,
130
130
  "fill": False,
131
131
  "pointRadius": 0, # Optional: Hide points
132
132
  },
133
133
  ],
134
134
  },
135
- # Hide the label
136
- # "options": {"legend": {"display": False}},
137
135
  # Hide the scales
138
136
  "options": {
139
137
  "plugins": {"legend": {"display": False}},
@@ -147,7 +145,7 @@ class TrendCard(ChartCard):
147
145
  },
148
146
  "maintainAspectRatio": False,
149
147
  "elements": {
150
- "bar": {"borderRadius": "3", "backgroundColor": "rgb(28, 25, 23)"}
148
+ "bar": {"borderRadius": "3", "backgroundColor": "#d6d6d6"}
151
149
  },
152
150
  },
153
151
  }
@@ -12,7 +12,7 @@ class ImpersonateStartView(View):
12
12
  impersonator = getattr(self.request, "impersonator", self.request.user)
13
13
  if impersonator and can_be_impersonator(impersonator):
14
14
  self.request.session[IMPERSONATE_KEY] = self.url_kwargs["pk"]
15
- return ResponseRedirect(self.request.GET.get("next", "/"))
15
+ return ResponseRedirect(self.request.query_params.get("next", "/"))
16
16
 
17
17
  return ResponseForbidden()
18
18
 
@@ -20,4 +20,4 @@ class ImpersonateStartView(View):
20
20
  class ImpersonateStopView(View):
21
21
  def get(self):
22
22
  self.request.session.pop(IMPERSONATE_KEY)
23
- return ResponseRedirect(self.request.GET.get("next", "/"))
23
+ return ResponseRedirect(self.request.query_params.get("next", "/"))
@@ -35,7 +35,7 @@ class QuerystatsView(AuthViewMixin, TemplateView):
35
35
  return context
36
36
 
37
37
  def post(self):
38
- querystats_action = self.request.POST["querystats_action"]
38
+ querystats_action = self.request.data["querystats_action"]
39
39
 
40
40
  if querystats_action == "enable":
41
41
  self.request.session.setdefault("querystats", {})
@@ -45,4 +45,4 @@ class QuerystatsView(AuthViewMixin, TemplateView):
45
45
  del self.request.session["querystats"]
46
46
 
47
47
  # Redirect back to the page that submitted the form
48
- return ResponseRedirect(self.request.POST.get("redirect_url", "."))
48
+ return ResponseRedirect(self.request.data.get("redirect_url", "."))
@@ -22,7 +22,7 @@
22
22
  </head>
23
23
  <body class="flex min-h-screen bg-stone-950">
24
24
 
25
- <nav class="fixed top-0 left-0 right-0 h-14 px-4 py-2 flex items-center justify-between sm:justify-evenly text-sm text-white/70 space-x-3">
25
+ <nav class="fixed top-0 left-0 right-0 h-14 px-5 py-2 flex items-center justify-between sm:justify-evenly text-sm text-white/70 space-x-3">
26
26
  <div class="flex items-center space-x-2">
27
27
  <button type="button" data-toggle="#admin-sidebar,#admin-content" class="lg:hidden">
28
28
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 bi bi-list" viewBox="0 0 16 16">
@@ -70,8 +70,8 @@
70
70
  </nav>
71
71
 
72
72
  <div class="fixed top-14 bottom-2 left-2 right-2">
73
- <aside id="admin-sidebar" data-toggle-class="hidden" class="flex-col bg-stone-950 z-50 border-r border-white/10 lg:border-none justify-between flex-shrink-0 hidden w-52 pl-3.5 pr-5 pt-2 overflow-auto lg:flex absolute top-0 bottom-0">
74
- <div class="flex-grow">
73
+ <aside id="admin-sidebar" data-toggle-class="hidden" class="flex-col bg-stone-950 z-50 border-r border-white/10 lg:border-none justify-between flex-shrink-0 hidden w-52 overflow-auto lg:flex absolute top-0 bottom-0">
74
+ <div class="flex-grow pl-3.5 pr-5 pt-2">
75
75
  <div>
76
76
  {% for section, views in admin_registry.get_nav_sections().items() %}
77
77
  <div class="mt-4 text-xs tracking-wide uppercase text-stone-300/90">{{ section }}</div>
@@ -94,7 +94,7 @@
94
94
  <div class="text-xs tracking-wide text-stone-500">Recent</div>
95
95
  </div> -->
96
96
  </div>
97
- <div class="mt-8 flex flex-col text-sm pb-3 pt-3 text-stone-400 sticky bottom-0 bg-stone-950">
97
+ <div class="mt-8 flex flex-col text-sm pb-3 pt-3 text-stone-400 sticky bottom-0 bg-stone-950/95 pl-3.5 pr-5">
98
98
  <a class="sm:hidden py-1" href="{{ url('admin:search') }}">Global search</a>
99
99
  <div class="flex items-center justify-between space-x-1.5">
100
100
  <div class="flex items-center truncate">
@@ -127,7 +127,7 @@
127
127
  <h1 class="sm:text-xl text-white/90">
128
128
  {% block title %}{{ title }}{% endblock %}
129
129
  </h1>
130
- {% if description %}<p class="mt-1 text-sm text-gray-500">{{ description }}</p>{% endif %}
130
+ {% if description %}<p class="mt-1 text-sm text-white/50">{{ description }}</p>{% endif %}
131
131
  </div>
132
132
  </div>
133
133
  {% endblock %}
@@ -8,14 +8,14 @@
8
8
  <header class="flex justify-between items-center">
9
9
  <div>
10
10
  <h2 class="text-sm font-semibold">{{ title }}</h2>
11
- {% if description %}<p class="mt-1 text-xs text-gray-500">{{ description }}</p>{% endif %}
11
+ {% if description %}<p class="mt-1 text-xs text-white/50">{{ description }}</p>{% endif %}
12
12
  </div>
13
13
 
14
14
  {% if displays %}
15
15
  <select
16
16
  hx-get
17
17
  name="{{ slug }}.display"
18
- class="text-sm border-gray-200 rounded-md">
18
+ class="text-xs py-1.5">
19
19
  <option value="">(Reset to default)</option>
20
20
  {% for display in displays %}
21
21
  <option {% if display == current_display %}selected{% endif %}>{{ display }}</option>
@@ -9,7 +9,7 @@
9
9
  {% endif %}
10
10
 
11
11
  {% if link %}
12
- <a href="{{ link }}">{{ text }}</a>
12
+ <a class="text-xs hover:underline mt-2" href="{{ link }}">{{ text }}</a>
13
13
  {% elif text %}
14
14
  {{ text }}
15
15
  {% endif %}
@@ -27,7 +27,7 @@
27
27
  {% if actions %}
28
28
  <form method="POST" data-actions-form>
29
29
  {{ csrf_input }}
30
- <select name="action_name" class="text-sm border-gray-200 rounded-md">
30
+ <select name="action_name" class="text-sm">
31
31
  <option value="">Actions</option>
32
32
  {% for action in actions %}
33
33
  <option>{{ action }}</option>
@@ -40,7 +40,7 @@
40
40
 
41
41
  <form method="GET" class="inline-flex space-x-5">
42
42
  {% if displays %}
43
- <select data-autosubmit name="display" class="text-sm border-gray-200 rounded-md">
43
+ <select data-autosubmit name="display" class="text-sm">
44
44
  <option value="">Displays</option>
45
45
  {% for display in displays %}
46
46
  <option {% if display == current_display %}selected{% endif %}>{{ display }}</option>
@@ -119,7 +119,7 @@
119
119
 
120
120
  {% if table_style != "simple" and actions %}
121
121
  <td class="p-0 pl-1">
122
- <input data-action-checkbox class="rounded-sm" type="checkbox" name="{{ get_object_pk(object) }}" />
122
+ <input data-action-checkbox class="rounded-sm bg-white/10" type="checkbox" name="{{ get_object_pk(object) }}" />
123
123
  </td>
124
124
  {% endif %}
125
125
 
@@ -136,7 +136,7 @@
136
136
  {% set object_links = get_object_links(object) %}
137
137
  {% if object_links %}
138
138
  <td class="py-0">
139
- <button data-dropdown class="inline-flex rounded-md border border-transparent hover:border-white/10 hover:shadow-sm px-3 py-1.5 hover:bg-white/20 text-sm font-medium text-white/80 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
139
+ <button data-dropdown class="!bg-transparent inline-flex rounded-md border !border-transparent hover:!bg-white/10 hover:!border-white/10 px-3 py-1.5 text-sm font-medium text-white/80 focus:outline-none">
140
140
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-three-dots" viewBox="0 0 16 16">
141
141
  <path d="M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3"/>
142
142
  </svg>
@@ -161,7 +161,7 @@
161
161
  {% if table_style != "simple" %}
162
162
  <footer class="mt-4">
163
163
  <div class="flex items-center justify-between">
164
- <div class="py-2 text-sm text-gray-500">
164
+ <div class="py-2 text-sm text-white/50">
165
165
  {% if page.has_other_pages() %}
166
166
  Page {{ page.number }} of {{ page.paginator.num_pages }} ({{ page.paginator.count }} results)
167
167
  {% endif %}
@@ -174,7 +174,7 @@
174
174
  <form data-autosubmit method="GET">
175
175
  {% if show_search and search_query %}<input type="hidden" name="search" value="{{ search_query }}" />{% endif %}
176
176
  {% if displays and current_display %}<input type="hidden" name="display" value="{{ current_display }}" />{% endif %}
177
- <select name="page" class="text-xs border-white/10 bg-white/5 rounded-md">
177
+ <select name="page" class="text-xs">
178
178
  {% for page_num in page.paginator.page_range %}
179
179
  <option value="{{ page_num }}" {% if page_num == page.number %}selected{% endif %}>Page {{ page_num }}</option>
180
180
  {% endfor %}
@@ -1 +1 @@
1
- <p class="mt-2 text-sm text-gray-500">{{ help }}</p>
1
+ <p class="mt-2 text-sm text-white/50">{{ help }}</p>
plain/admin/urls.py CHANGED
@@ -27,7 +27,7 @@ class AdminSearchView(AdminView):
27
27
  def get_template_context(self):
28
28
  context = super().get_template_context()
29
29
  context["searchable_views"] = registry.get_searchable_views()
30
- context["global_search_query"] = self.request.GET.get("query", "")
30
+ context["global_search_query"] = self.request.query_params.get("query", "")
31
31
  return context
32
32
 
33
33
 
@@ -77,7 +77,7 @@ class AdminModelListView(AdminListView):
77
77
  def get_template_context(self):
78
78
  context = super().get_template_context()
79
79
 
80
- order_by = self.request.GET.get("order_by", "")
80
+ order_by = self.request.query_params.get("order_by", "")
81
81
  if order_by.startswith("-"):
82
82
  order_by_field = order_by[1:]
83
83
  order_by_direction = "-"
@@ -102,7 +102,7 @@ class AdminModelListView(AdminListView):
102
102
  return self.model.objects.all()
103
103
 
104
104
  def order_queryset(self, queryset):
105
- if order_by := self.request.GET.get("order_by"):
105
+ if order_by := self.request.query_params.get("order_by"):
106
106
  queryset = queryset.order_by(order_by)
107
107
  elif self.queryset_order:
108
108
  queryset = queryset.order_by(*self.queryset_order)
@@ -110,7 +110,7 @@ class AdminModelListView(AdminListView):
110
110
  return queryset
111
111
 
112
112
  def search_queryset(self, queryset):
113
- if search := self.request.GET.get("search"):
113
+ if search := self.request.query_params.get("search"):
114
114
  filters = Q()
115
115
  for field in self.search_fields:
116
116
  filters |= Q(**{f"{field}__icontains": search})
@@ -25,14 +25,14 @@ class AdminListView(HTMXViewMixin, AdminView):
25
25
  context = super().get_template_context()
26
26
 
27
27
  # Make this available on self for usage in get_objects and other methods
28
- self.display = self.request.GET.get("display", "")
28
+ self.display = self.request.query_params.get("display", "")
29
29
 
30
30
  # Make this available to get_displays and stuff
31
31
  self.objects = self.get_objects()
32
32
 
33
- page_size = self.request.GET.get("page_size", self.page_size)
33
+ page_size = self.request.query_params.get("page_size", self.page_size)
34
34
  paginator = Paginator(self.objects, page_size)
35
- self._page = paginator.get_page(self.request.GET.get("page", 1))
35
+ self._page = paginator.get_page(self.request.query_params.get("page", 1))
36
36
 
37
37
  context["paginator"] = paginator
38
38
  context["page"] = self._page
@@ -44,7 +44,7 @@ class AdminListView(HTMXViewMixin, AdminView):
44
44
  context["current_display"] = self.display
45
45
 
46
46
  # Implement search yourself in get_objects
47
- context["search_query"] = self.request.GET.get("search", "")
47
+ context["search_query"] = self.request.query_params.get("search", "")
48
48
  context["show_search"] = self.show_search
49
49
 
50
50
  context["table_style"] = getattr(self, "_table_style", "default")
@@ -78,10 +78,10 @@ class AdminListView(HTMXViewMixin, AdminView):
78
78
 
79
79
  def post(self) -> Response:
80
80
  # won't be "key" anymore, just list
81
- action_name = self.request.POST.get("action_name")
81
+ action_name = self.request.data.get("action_name")
82
82
  actions = self.get_actions()
83
83
  if action_name and action_name in actions:
84
- target_pks = self.request.POST["action_pks"].split(",")
84
+ target_pks = self.request.data["action_pks"].split(",")
85
85
  response = self.perform_action(action_name, target_pks)
86
86
  if response:
87
87
  return response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.admin
3
- Version: 0.26.0
3
+ Version: 0.27.0
4
4
  Summary: Admin dashboard and tools for Plain.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -6,9 +6,9 @@ plain/admin/default_settings.py,sha256=S22r8JtwY-ArlNO4waBOrnRfb2qPbUQ5VSP6niJRz
6
6
  plain/admin/middleware.py,sha256=k3yP1o3CzvLiZZSoxqq-DvAZlp4sICRauaT-kD3FJKM,398
7
7
  plain/admin/templates.py,sha256=0xgMQmJEbh5U45ZlN2f15Xs42Y2A_lSS-_wdMp1BeD4,854
8
8
  plain/admin/toolbar.py,sha256=doW1Eg9rYfLZulRTAyFACDaUDi2xkDlsdVABzCQKHG4,979
9
- plain/admin/urls.py,sha256=HtYsTDyV6s-k6ClT2H2oZqUDIANLq-PACpZfrR538js,1292
10
- plain/admin/assets/admin/admin.css,sha256=-KdI7geASBsSbTve26VeJ-wCrdHWyD3EdjDZ9o393Yc,2653
11
- plain/admin/assets/admin/admin.js,sha256=8R4VestYByRd2THe5gg8I35Zu3rokm6TQTkEf2mEB1c,2919
9
+ plain/admin/urls.py,sha256=sriMi2RCkcrkjCX3CIIP1-Qzs_zDm2pxXeOw28vc7Y4,1301
10
+ plain/admin/assets/admin/admin.css,sha256=Gu6GpRymJriFitAaKh_P5Sm8ZKrX9jdw6Uflxgypff8,2786
11
+ plain/admin/assets/admin/admin.js,sha256=2-o4g6EtiiF2HGZIKfnVkC8shXFjY1xFSehDlR9550s,2852
12
12
  plain/admin/assets/admin/chart.js,sha256=GZiCYXjL6SmyuSCGE0Df80QvOUkw6H2YD-zsVID05lo,205089
13
13
  plain/admin/assets/admin/jquery-3.6.1.slim.min.js,sha256=W2eb4M1jdKpuZ_-_KnDgqI9X9SwGLrXtO0dknpNPJyE,72534
14
14
  plain/admin/assets/admin/list.js,sha256=_DPneRvk3VSzjVzfEaxyif4vLD75sCWz7bkHYp89uL8,1826
@@ -16,8 +16,8 @@ plain/admin/assets/admin/popper.min.js,sha256=SgCxkjQZdrt2puqn62YUu9hknpCBGBEAy9
16
16
  plain/admin/assets/admin/tippy-bundle.umd.min.js,sha256=oVWBpeGTKMG_iBWGkQF02JnGIMFPYuFqTjUWeJY3pZ0,25668
17
17
  plain/admin/assets/toolbar/toolbar.js,sha256=kRCQ37iQNklzBjjBeHSeBU39mLpQ4Q0pnC3cdbQAy28,1636
18
18
  plain/admin/cards/__init__.py,sha256=8NfWrguyJRriJFUc3_QeGaDILhgeU3d1aXktzIuAR1E,172
19
- plain/admin/cards/base.py,sha256=g9t-pQq8O8gqMbTVdTujacfDQguFMq_aoRIKZkme_SA,2238
20
- plain/admin/cards/charts.py,sha256=fbCypn4_2uhFnNgj7z1T7bhSjQVtlxODnctynI6yrqI,5017
19
+ plain/admin/cards/base.py,sha256=ESYY0tX3OossyZi9ubCrLxwxUZ0Z3snZUCVmLvTIg-U,2247
20
+ plain/admin/cards/charts.py,sha256=uUNO_uN_GVdkwYNSTx1bt1j2L-89rEyIg0vDaxP-9NE,4929
21
21
  plain/admin/cards/tables.py,sha256=lGUBeSaBsNVuzINVH8qU-1XF0PfPY03gcUKtN-462zE,599
22
22
  plain/admin/impersonate/README.md,sha256=GT7ubMxyB2RhUh-gDg_yYqWSm7oMp0hy1LepXyDRMo8,1012
23
23
  plain/admin/impersonate/__init__.py,sha256=houAFRscvEx8ajejZl9Im8Iu1aJFTTloHMXpgSwViVs,83
@@ -26,22 +26,22 @@ plain/admin/impersonate/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
26
26
  plain/admin/impersonate/permissions.py,sha256=N0EFshs0pgwFIAsK2MUgfnyhdb2rYheY_l47cYdGurE,332
27
27
  plain/admin/impersonate/settings.py,sha256=4wbWBN9eZIzei4fwkFLfw-_T5pvP_GG4l1lDdVpL_Co,193
28
28
  plain/admin/impersonate/urls.py,sha256=s8bwi8qPueKCCYcLW75p-hPFkBKhm2AMi6AQKQcZsWc,304
29
- plain/admin/impersonate/views.py,sha256=p8kEGC2ZNntAaLJRgwCaGSJABjLWoarpya9IuBpNW5A,789
29
+ plain/admin/impersonate/views.py,sha256=PzVmzhlS0LmbHgxdLhc2G27ltvk3zgmO-3QWNAcD-l0,807
30
30
  plain/admin/querystats/README.md,sha256=ONscu4dQOVe20CPHFyI8vR8iL2kvo3cOM8iwVO-lDyM,4821
31
31
  plain/admin/querystats/__init__.py,sha256=VmP1aQ5Pviq4Z3izCB8G9g0Weq-2SYR88UFNtwqAPpo,81
32
32
  plain/admin/querystats/core.py,sha256=kh45lRPEv9lYiTDNI_srrfoJue48v3kcrBNbOIHYCmw,4480
33
33
  plain/admin/querystats/middleware.py,sha256=g5Ld-Xx1eKq1AfED4oBHNkuhr5nUL1ILrzTv_tQVlPY,3528
34
34
  plain/admin/querystats/urls.py,sha256=H8wMpqKBnXqA8ZsdwdxTKQguNYJ0JsMRqqMunccBm2I,198
35
- plain/admin/querystats/views.py,sha256=hCADEZMZSyIAqdDQU0J21HveWqAH_hX2RcRHNS7-I1k,1573
36
- plain/admin/templates/admin/base.html,sha256=M3z5JwRPSS9fc3Rcg9YxPWTNL0wNo98oaEv3Ue3xlvs,8466
35
+ plain/admin/querystats/views.py,sha256=-bETxg2REeit3xJ1HYhyUf7zh-Ra42iJM2zsaev0AVs,1573
36
+ plain/admin/templates/admin/base.html,sha256=npIwsxHa7Gf5FYTmsXfgSor2bbYIWwTSk0-UFmnqmfE,8481
37
37
  plain/admin/templates/admin/delete.html,sha256=lNuU2G-BR6TH6NUmh7VcvjnEuFeI84rwwk_oO1jkUq0,431
38
38
  plain/admin/templates/admin/detail.html,sha256=AizpXs6HguFzwbk7JDbH8poJB5dM2CaVVaQ4FThAHaw,730
39
39
  plain/admin/templates/admin/index.html,sha256=b65tcZhv9QfvmjePySU7MmzUlpMECIXP8dBH-a3Eyxw,69
40
- plain/admin/templates/admin/list.html,sha256=MgyVmaoeZ8YMTWbK9mFagIScbVwpTOmZ2FJ0XZQ_xDM,8741
40
+ plain/admin/templates/admin/list.html,sha256=tD3CVXl8ghBVavF5_8WG_ekj96FeKt_iq97j35zPkZI,8609
41
41
  plain/admin/templates/admin/page.html,sha256=wzRR-JLs8CgCOoB3BMoYWqTMpYM0z4X2qlqdwAe0YjM,67
42
42
  plain/admin/templates/admin/search.html,sha256=zfwnXoztAFnj8OmwxJcWaqo-SKCy50bLwfwSrAnAtoQ,1799
43
- plain/admin/templates/admin/cards/base.html,sha256=2HRIxvt5Kf0MPVv7XLQZcc7vfz3YR_WLsrVgbQtyN5I,933
44
- plain/admin/templates/admin/cards/card.html,sha256=OWR1kF4vKtr06x_Q34Z01UmKEv_Jdq2Ws3v3RARaxCY,263
43
+ plain/admin/templates/admin/cards/base.html,sha256=jNw61yM0R40roC8UqGWXFCegObSIV0rbvQ0021gzUi0,913
44
+ plain/admin/templates/admin/cards/card.html,sha256=f3-7OogoGqKKfUopeWzMLQFPgzsgkMBSImvV1qPb4L4,300
45
45
  plain/admin/templates/admin/cards/chart.html,sha256=boQRaWXiZvwKkMudT3IDsRvaofv5LHgbSeWr_HEGghg,642
46
46
  plain/admin/templates/admin/cards/table.html,sha256=zFTdzmKUU2gS7ni-qjft5mxhcPK2rPogPXsE7208QYg,651
47
47
  plain/admin/templates/admin/values/UUID.html,sha256=ZoIp0u7WVKbJfEBdHyJI7IMCYHQ9c12NOlNoFcsqaps,66
@@ -57,7 +57,7 @@ plain/admin/templates/admin/values/queryset.html,sha256=YU-mDxHzinWWLUBE-oX3dOMO
57
57
  plain/admin/templates/elements/admin/Checkbox.html,sha256=2hUSWCbazaJKyZdsk2shF0qN6kSeV20HVLdRitC_KfQ,213
58
58
  plain/admin/templates/elements/admin/CheckboxField.html,sha256=oj8ur5fX5ftOjhHEQ8QcFobnPBjXrEfxFxzVpwU8-nw,274
59
59
  plain/admin/templates/elements/admin/FieldErrors.html,sha256=YO150DwGG8tf8Q4d1Cf59gpchXzF-n8FSse2GqOX3cA,108
60
- plain/admin/templates/elements/admin/Help.html,sha256=qivAiGNW97Ht9Vmq09m5bIk1IbMLlYuRIFzClVll5_Y,53
60
+ plain/admin/templates/elements/admin/Help.html,sha256=r9QZC22BK6hYkNfb16wPdDv9z9eCrHIOOar-8bG92oc,53
61
61
  plain/admin/templates/elements/admin/Input.html,sha256=7rziKkGDgg-fQ4Yfb_hjR9pOt0DFs8UeXicN6MCoM4s,371
62
62
  plain/admin/templates/elements/admin/InputField.html,sha256=iZuhlGxWWQwmXsYXjGHF-5V8En24EWa7HGanDRwNvUs,220
63
63
  plain/admin/templates/elements/admin/Label.html,sha256=pmzbNZIPbBOK5kiwlq798dsNHAVsnYXwjpZP5N3ArpE,250
@@ -71,12 +71,12 @@ plain/admin/templates/querystats/toolbar.html,sha256=JFuG97PackHuhRFxnOHEiKGMa_g
71
71
  plain/admin/templates/toolbar/toolbar.html,sha256=KcGAG6kRmx60wfqEsdD5C4nDMilH-JvPjHoU6EktfaY,5985
72
72
  plain/admin/views/__init__.py,sha256=nF6AENZ3Xxyi08OTRrF6e-HYBkZSFj7XBK2mVzMYqN4,846
73
73
  plain/admin/views/base.py,sha256=S1oaMUXnMOwRozbn2K-tk9tL4BMimemfMagZD9QxrJw,3512
74
- plain/admin/views/models.py,sha256=mq_c13bdTs7WQ_MShVvTo3uCy09FOlBCrGIrGeK0sEo,5946
75
- plain/admin/views/objects.py,sha256=7BXrDpHbdZ0vpzTHoLbSNdXO-rYSRw5YOBTiTK12E1U,11140
74
+ plain/admin/views/models.py,sha256=DAv7YzeSyQHLLAVdUhSPCkmx2B10g5ksAjHm2jrgQfw,5973
75
+ plain/admin/views/objects.py,sha256=eKL8A2B1ZMgTrCbTXnh6vCeju_HObxwetn_xc1vYlfY,11176
76
76
  plain/admin/views/registry.py,sha256=Lxib4YSQCMHb_zACnLKymJakV8jCZPWYll7J8-aV9Xw,3712
77
77
  plain/admin/views/types.py,sha256=ONMMdUoapgMoUVYgSIe-4YCdfvaVMQ4jgPWYiMo0pDk,178
78
78
  plain/admin/views/viewsets.py,sha256=dqMlQ6kLn9iqd9BwBWAZT1S271wH1FdfM5HXbOgBMEw,1655
79
- plain_admin-0.26.0.dist-info/METADATA,sha256=4nnt50UwdYNs753lk8AfrS9RnF8I1YviI3KyF3GjlDs,4237
80
- plain_admin-0.26.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
81
- plain_admin-0.26.0.dist-info/licenses/LICENSE,sha256=cvKM3OlqHx3ijD6e34zsSUkPvzl-ya3Dd63A6EHL94U,1500
82
- plain_admin-0.26.0.dist-info/RECORD,,
79
+ plain_admin-0.27.0.dist-info/METADATA,sha256=8Ig6XuGNeT_fMrVG2PPaMU79xCf9zWKyVlbwLT5ZJL8,4237
80
+ plain_admin-0.27.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
81
+ plain_admin-0.27.0.dist-info/licenses/LICENSE,sha256=cvKM3OlqHx3ijD6e34zsSUkPvzl-ya3Dd63A6EHL94U,1500
82
+ plain_admin-0.27.0.dist-info/RECORD,,