django-smartbase-admin 0.2.84__py3-none-any.whl → 0.2.86__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.
@@ -1,6 +1,8 @@
1
1
  import json
2
2
  import urllib.parse
3
3
  from collections import defaultdict
4
+ from collections.abc import Iterable
5
+ from typing import Any
4
6
 
5
7
  from django.contrib import messages
6
8
  from django.contrib.admin.actions import delete_selected
@@ -54,34 +56,34 @@ class SBAdminBaseView(object):
54
56
  def get_id(self):
55
57
  raise NotImplementedError
56
58
 
57
- def get_menu_label(self):
59
+ def get_menu_label(self) -> str:
58
60
  return self.menu_label or self.model._meta.verbose_name_plural
59
61
 
60
- def has_permission(self, request, obj=None, permission=None):
62
+ def has_permission(self, request, obj=None, permission=None) -> bool:
61
63
  return SBAdminViewService.has_permission(
62
64
  request=request, view=self, model=self.model, obj=obj, permission=permission
63
65
  )
64
66
 
65
- def has_add_permission(self, request, obj=None):
67
+ def has_add_permission(self, request, obj=None) -> bool:
66
68
  return self.has_permission(request, obj, "add")
67
69
 
68
- def has_view_permission(self, request, obj=None):
70
+ def has_view_permission(self, request, obj=None) -> bool:
69
71
  return self.has_permission(request, obj, "view")
70
72
 
71
- def has_change_permission(self, request, obj=None):
73
+ def has_change_permission(self, request, obj=None) -> bool:
72
74
  return self.has_permission(request, obj, "change")
73
75
 
74
- def has_delete_permission(self, request, obj=None):
76
+ def has_delete_permission(self, request, obj=None) -> bool:
75
77
  return self.has_permission(request, obj, "delete")
76
78
 
77
- def has_permission_for_action(self, request, action):
79
+ def has_permission_for_action(self, request, action: SBAdminCustomAction) -> bool:
78
80
  return self.has_permission(
79
81
  request=request,
80
82
  obj=None,
81
83
  permission=action,
82
84
  )
83
85
 
84
- def has_view_or_change_permission(self, request, obj=None):
86
+ def has_view_or_change_permission(self, request, obj=None) -> bool:
85
87
  return self.has_view_permission(request, obj) or self.has_change_permission(
86
88
  request, obj
87
89
  )
@@ -92,7 +94,9 @@ class SBAdminBaseView(object):
92
94
 
93
95
  return inner_view
94
96
 
95
- def process_actions(self, request, actions):
97
+ def process_actions(
98
+ self, request, actions: list[SBAdminCustomAction]
99
+ ) -> list[SBAdminCustomAction]:
96
100
  processed_actions = self.process_actions_permissions(request, actions)
97
101
  for processed_action in processed_actions:
98
102
  if isinstance(processed_action, SBAdminFormViewAction):
@@ -107,7 +111,9 @@ class SBAdminBaseView(object):
107
111
 
108
112
  return processed_actions
109
113
 
110
- def process_actions_permissions(self, request, actions):
114
+ def process_actions_permissions(
115
+ self, request, actions: list[SBAdminCustomAction]
116
+ ) -> list[SBAdminCustomAction]:
111
117
  result = []
112
118
  for action in actions:
113
119
  if self.has_permission_for_action(request, action):
@@ -173,7 +179,7 @@ class SBAdminBaseView(object):
173
179
  field.model_field = model_field
174
180
  return field
175
181
 
176
- def get_username_data(self, request):
182
+ def get_username_data(self, request) -> dict[str, Any]:
177
183
  if request.request_data.user.first_name and request.request_data.user.last_name:
178
184
  return {
179
185
  "full_name": f"{request.request_data.user.first_name} {request.request_data.user.last_name}",
@@ -184,10 +190,14 @@ class SBAdminBaseView(object):
184
190
  "initials": request.request_data.user.username[0],
185
191
  }
186
192
 
187
- def get_sbadmin_detail_actions(self, request, object_id: int | str | None = None):
193
+ def get_sbadmin_detail_actions(
194
+ self, request, object_id: int | str | None = None
195
+ ) -> Iterable[SBAdminCustomAction] | None:
188
196
  return self.sbadmin_detail_actions
189
197
 
190
- def get_global_context(self, request, object_id: int | str | None = None):
198
+ def get_global_context(
199
+ self, request, object_id: int | str | None = None
200
+ ) -> dict[str, Any]:
191
201
  return {
192
202
  "view_id": self.get_id(),
193
203
  "configuration": request.request_data.configuration,
@@ -207,7 +217,7 @@ class SBAdminBaseView(object):
207
217
  ),
208
218
  }
209
219
 
210
- def get_model_path(self):
220
+ def get_model_path(self) -> str:
211
221
  return SBAdminViewService.get_model_path(self.model)
212
222
 
213
223
 
@@ -239,10 +249,10 @@ class SBAdminBaseListView(SBAdminBaseView):
239
249
  sbadmin_actions_initialized = False
240
250
  sbadmin_list_action_class = SBAdminListAction
241
251
 
242
- def activate_reorder(self, request):
252
+ def activate_reorder(self, request) -> None:
243
253
  request.reorder_active = True
244
254
 
245
- def action_list_json_reorder(self, request, modifier):
255
+ def action_list_json_reorder(self, request, modifier) -> JsonResponse:
246
256
  self.activate_reorder(request)
247
257
  return self.action_list_json(request, modifier, page_size=100)
248
258
 
@@ -273,22 +283,22 @@ class SBAdminBaseListView(SBAdminBaseView):
273
283
  ],
274
284
  )
275
285
 
276
- def is_reorder_active(self, request):
286
+ def is_reorder_active(self, request) -> bool:
277
287
  return (
278
- self.is_reorder_available()
288
+ self.is_reorder_available(request)
279
289
  and getattr(request, "reorder_active", False) == True
280
290
  )
281
291
 
282
- def is_reorder_available(self):
292
+ def is_reorder_available(self, request) -> str | None:
283
293
  return self.sbadmin_list_reorder_field
284
294
 
285
- def action_table_reorder(self, request, modifier):
295
+ def action_table_reorder(self, request, modifier) -> JsonResponse:
286
296
  self.activate_reorder(request)
287
297
  qs = self.get_queryset(request)
288
298
  pk_field = SBAdminViewService.get_pk_field_for_model(self.model).name
289
299
  old_order = dict(
290
300
  qs.values_list(pk_field, self.sbadmin_list_reorder_field).order_by(
291
- *self.get_list_ordering()
301
+ *self.get_list_ordering(request)
292
302
  )
293
303
  )
294
304
  current_row_id = json.loads(request.POST.get("currentRowId", ""))
@@ -316,30 +326,30 @@ class SBAdminBaseListView(SBAdminBaseView):
316
326
  )
317
327
  return JsonResponse({"message": request.POST})
318
328
 
319
- def action_table_data_edit(self, request, modifier):
329
+ def action_table_data_edit(self, request, modifier) -> HttpResponse:
320
330
  current_row_id = json.loads(request.POST.get("currentRowId", ""))
321
331
  column_field_name = request.POST.get("columnFieldName", "")
322
332
  cell_value = request.POST.get("cellValue", "")
323
333
  messages.add_message(request, messages.ERROR, "Not Implemented")
324
334
  return HttpResponse(status=200, content=render_notifications(request))
325
335
 
326
- def init_actions(self, request):
336
+ def init_actions(self, request) -> None:
327
337
  if self.sbadmin_actions_initialized:
328
338
  return
329
339
  self.process_actions(request, self.get_sbadmin_list_selection_actions(request))
330
340
  self.sbadmin_actions_initialized = True
331
341
 
332
- def init_view_dynamic(self, request, request_data=None, **kwargs):
342
+ def init_view_dynamic(self, request, request_data=None, **kwargs) -> None:
333
343
  super().init_view_dynamic(request, request_data, **kwargs)
334
344
  self.init_fields_cache(
335
345
  self.get_sbadmin_list_display(request), request.request_data.configuration
336
346
  )
337
347
  self.init_actions(request)
338
348
 
339
- def get_sbadmin_list_display(self, request):
340
- return self.sbadmin_list_display or self.list_display
349
+ def get_sbadmin_list_display(self, request) -> list[str] | list:
350
+ return self.sbadmin_list_display or self.list_display or []
341
351
 
342
- def register_autocomplete_views(self, request):
352
+ def register_autocomplete_views(self, request) -> None:
343
353
  super().register_autocomplete_views(request)
344
354
  self.init_fields_cache(
345
355
  self.get_sbadmin_list_display(request),
@@ -352,7 +362,7 @@ class SBAdminBaseListView(SBAdminBaseView):
352
362
  form.view = self
353
363
  form()
354
364
 
355
- def get_list_display(self, request):
365
+ def get_list_display(self, request) -> list[str] | list:
356
366
  return [
357
367
  getattr(field, "name", field)
358
368
  for field in self.get_sbadmin_list_display(request)
@@ -364,12 +374,12 @@ class SBAdminBaseListView(SBAdminBaseView):
364
374
  else:
365
375
  return []
366
376
 
367
- def get_list_ordering(self):
377
+ def get_list_ordering(self, request) -> Iterable[str] | list:
368
378
  return self.ordering or []
369
379
 
370
- def get_list_initial_order(self):
380
+ def get_list_initial_order(self, request) -> list[dict[str, Any]]:
371
381
  order = []
372
- for order_field in self.get_list_ordering():
382
+ for order_field in self.get_list_ordering(request):
373
383
  direction = "desc" if order_field.startswith("-") else "asc"
374
384
  order.append(
375
385
  {
@@ -379,15 +389,15 @@ class SBAdminBaseListView(SBAdminBaseView):
379
389
  )
380
390
  return order
381
391
 
382
- def get_list_per_page(self):
392
+ def get_list_per_page(self, request) -> int | None:
383
393
  return self.list_per_page
384
394
 
385
- def has_add_permission(self, request):
395
+ def has_add_permission(self, request, obj=None) -> bool:
386
396
  if self.is_reorder_active(request):
387
397
  return False
388
398
  return super().has_add_permission(request)
389
399
 
390
- def get_tabulator_definition(self, request):
400
+ def get_tabulator_definition(self, request) -> dict[str, Any]:
391
401
  view_id = self.get_id()
392
402
  tabulator_definition = {
393
403
  "viewId": view_id,
@@ -404,8 +414,8 @@ class SBAdminBaseListView(SBAdminBaseView):
404
414
  Action.TABLE_REORDER_ACTION.value
405
415
  ),
406
416
  "tableDetailUrl": self.get_detail_url(),
407
- "tableInitialSort": self.get_list_initial_order(),
408
- "tableInitialPageSize": self.get_list_per_page(),
417
+ "tableInitialSort": self.get_list_initial_order(request),
418
+ "tableInitialPageSize": self.get_list_per_page(request),
409
419
  "tableHistoryEnabled": self.sbadmin_table_history_enabled,
410
420
  # used to initialize all columns with these values
411
421
  "defaultColumnData": {},
@@ -447,9 +457,9 @@ class SBAdminBaseListView(SBAdminBaseView):
447
457
  )
448
458
  return tabulator_definition
449
459
 
450
- def _get_sbadmin_list_actions(self, request):
460
+ def _get_sbadmin_list_actions(self, request) -> list[SBAdminCustomAction] | list:
451
461
  list_actions = [*(self.get_sbadmin_list_actions(request) or [])]
452
- if self.is_reorder_available():
462
+ if self.is_reorder_available(request):
453
463
  list_actions = [
454
464
  *list_actions,
455
465
  SBAdminCustomAction(
@@ -461,7 +471,7 @@ class SBAdminBaseListView(SBAdminBaseView):
461
471
  ]
462
472
  return list_actions
463
473
 
464
- def get_sbadmin_list_actions(self, request):
474
+ def get_sbadmin_list_actions(self, request) -> list[SBAdminCustomAction]:
465
475
  if not self.sbadmin_list_actions:
466
476
  self.sbadmin_list_actions = [
467
477
  SBAdminCustomAction(
@@ -472,7 +482,7 @@ class SBAdminBaseListView(SBAdminBaseView):
472
482
  ]
473
483
  return self.sbadmin_list_actions
474
484
 
475
- def get_sbadmin_list_selection_actions(self, request):
485
+ def get_sbadmin_list_selection_actions(self, request) -> list[SBAdminCustomAction]:
476
486
  if not self.sbadmin_list_selection_actions:
477
487
  self.sbadmin_list_selection_actions = [
478
488
  SBAdminCustomAction(
@@ -489,7 +499,9 @@ class SBAdminBaseListView(SBAdminBaseView):
489
499
  ]
490
500
  return self.sbadmin_list_selection_actions
491
501
 
492
- def get_sbadmin_list_selection_actions_grouped(self, request):
502
+ def get_sbadmin_list_selection_actions_grouped(
503
+ self, request
504
+ ) -> dict[str, list[SBAdminCustomAction]]:
493
505
  result = {}
494
506
  list_selection_actions = self.process_actions(
495
507
  request, self.get_sbadmin_list_selection_actions(request)
@@ -500,7 +512,7 @@ class SBAdminBaseListView(SBAdminBaseView):
500
512
  result[action.group].append(action)
501
513
  return result
502
514
 
503
- def get_sbadmin_xlsx_options(self, request):
515
+ def get_sbadmin_xlsx_options(self, request) -> SBAdminXLSXOptions:
504
516
  self.sbadmin_xlsx_options = self.sbadmin_xlsx_options or SBAdminXLSXOptions(
505
517
  header_cell_format=SBAdminXLSXFormat(
506
518
  bg_color="#00aaa7", font_color="#ffffff", bold=True
@@ -512,7 +524,7 @@ class SBAdminBaseListView(SBAdminBaseView):
512
524
  )
513
525
  return self.sbadmin_xlsx_options
514
526
 
515
- def action_xlsx_export(self, request, modifier):
527
+ def action_xlsx_export(self, request, modifier) -> HttpResponse:
516
528
  action = self.sbadmin_list_action_class(self, request)
517
529
  data = action.get_xlsx_data(request)
518
530
  return SBAdminXLSXExportService.create_workbook_http_respone(*data)
@@ -637,15 +649,15 @@ class SBAdminBaseListView(SBAdminBaseView):
637
649
  extra_context,
638
650
  )
639
651
 
640
- def action_list_json(self, request, modifier, page_size=None):
652
+ def action_list_json(self, request, modifier, page_size=None) -> JsonResponse:
641
653
  action = self.sbadmin_list_action_class(self, request, page_size=page_size)
642
654
  data = action.get_json_data()
643
655
  return JsonResponse(data=data, safe=False)
644
656
 
645
- def get_sbadmin_list_filter(self, request):
657
+ def get_sbadmin_list_filter(self, request) -> Iterable | None:
646
658
  return self.sbadmin_list_filter
647
659
 
648
- def get_all_config(self, request):
660
+ def get_all_config(self, request) -> dict[str, Any]:
649
661
  all_config = {"name": _("All"), "url_params": {}, "default": True}
650
662
  list_filter = self.get_sbadmin_list_filter(request) or []
651
663
  if not list_filter:
@@ -669,10 +681,10 @@ class SBAdminBaseListView(SBAdminBaseView):
669
681
  }
670
682
  return all_config
671
683
 
672
- def get_sbadmin_list_view_config(self, request):
684
+ def get_sbadmin_list_view_config(self, request) -> list:
673
685
  return self.sbadmin_list_view_config or []
674
686
 
675
- def get_base_config(self, request):
687
+ def get_base_config(self, request) -> list[dict[str, Any]]:
676
688
  sbadmin_list_config = self.get_sbadmin_list_view_config(request)
677
689
  list_view_config = [self.get_all_config(request), *sbadmin_list_config]
678
690
  views = []
@@ -691,7 +703,7 @@ class SBAdminBaseListView(SBAdminBaseView):
691
703
  )
692
704
  return views
693
705
 
694
- def get_config_data(self, request):
706
+ def get_config_data(self, request) -> dict[str, list[dict[str, Any]]]:
695
707
  from django_smartbase_admin.models import SBAdminListViewConfiguration
696
708
 
697
709
  current_views = list(
@@ -702,15 +714,15 @@ class SBAdminBaseListView(SBAdminBaseView):
702
714
  .values()
703
715
  )
704
716
  for view in current_views:
705
- view["detail_url"] = self.get_config_url(view["id"])
717
+ view["detail_url"] = self.get_config_url(request, view["id"])
706
718
  config_views = self.get_base_config(request)
707
719
  config_views.extend(current_views)
708
720
  return {"current_views": config_views}
709
721
 
710
- def get_ajax_url(self):
722
+ def get_ajax_url(self) -> str:
711
723
  return self.get_action_url(Action.LIST_JSON.value)
712
724
 
713
- def get_detail_url(self):
725
+ def get_detail_url(self) -> str:
714
726
  url = reverse(
715
727
  "sb_admin:sb_admin_base",
716
728
  kwargs={
@@ -721,21 +733,21 @@ class SBAdminBaseListView(SBAdminBaseView):
721
733
  )
722
734
  return f"{url}/{OBJECT_ID_PLACEHOLDER}"
723
735
 
724
- def get_config_url(self, config_name=None):
736
+ def get_config_url(self, request, config_name=None) -> str:
725
737
  return self.get_action_url(Action.CONFIG.value, config_name)
726
738
 
727
- def get_new_url(self):
739
+ def get_new_url(self, request) -> None:
728
740
  return None
729
741
 
730
- def get_context_data(self, request):
742
+ def get_context_data(self, request) -> dict:
731
743
  return {}
732
744
 
733
- def get_filters_version(self, request):
745
+ def get_filters_version(self, request) -> FilterVersions:
734
746
  return (
735
747
  self.filters_version or request.request_data.configuration.filters_version
736
748
  )
737
749
 
738
- def get_filters_template_name(self, request):
750
+ def get_filters_template_name(self, request) -> str:
739
751
  filters_version = self.get_filters_version(request)
740
752
  if filters_version is FilterVersions.FILTERS_VERSION_2:
741
753
  return "sb_admin/components/filters_v2.html"
@@ -743,7 +755,7 @@ class SBAdminBaseListView(SBAdminBaseView):
743
755
  # default
744
756
  return "sb_admin/components/filters.html"
745
757
 
746
- def get_tabulator_header_template_name(self, request):
758
+ def get_tabulator_header_template_name(self, request) -> str:
747
759
  filters_version = self.get_filters_version(request)
748
760
  if filters_version is FilterVersions.FILTERS_VERSION_2:
749
761
  return "sb_admin/actions/partials/tabulator_header_v2.html"
@@ -751,5 +763,5 @@ class SBAdminBaseListView(SBAdminBaseView):
751
763
  # default
752
764
  return "sb_admin/actions/partials/tabulator_header_v1.html"
753
765
 
754
- def get_search_field_placeholder(self):
766
+ def get_search_field_placeholder(self, request) -> str:
755
767
  return self.search_field_placeholder