django-smartbase-admin 0.2.84__py3-none-any.whl → 0.2.85__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.
@@ -92,7 +92,7 @@ class SBAdminListAction(SBAdminAction):
92
92
  )
93
93
  self.deselected_rows = self.selection_data.get(DESELECTED_ROWS_KWARG_NAME, [])
94
94
  self.page_size = page_size or self.table_params.get(
95
- TABLE_PARAMS_SIZE_NAME, self.view.get_list_per_page()
95
+ TABLE_PARAMS_SIZE_NAME, self.view.get_list_per_page(request)
96
96
  )
97
97
  self.init_column_fields()
98
98
  self.tabulator_definition = tabulator_definition
@@ -205,16 +205,18 @@ class SBAdminListAction(SBAdminAction):
205
205
  self.threadsafe_request
206
206
  ),
207
207
  "search_fields": self.view.get_search_fields(self.threadsafe_request),
208
- "search_field_placeholder": self.view.get_search_field_placeholder(),
208
+ "search_field_placeholder": self.view.get_search_field_placeholder(
209
+ self.threadsafe_request
210
+ ),
209
211
  "list_actions": self.view.process_actions_permissions(
210
212
  self.threadsafe_request, list_actions
211
213
  ),
212
214
  "list_selection_actions": self.view.get_sbadmin_list_selection_actions_grouped(
213
215
  self.threadsafe_request
214
216
  ),
215
- "config_url": self.view.get_config_url(),
217
+ "config_url": self.view.get_config_url(self.threadsafe_request),
216
218
  "new_url": (
217
- self.view.get_new_url()
219
+ self.view.get_new_url(self.threadsafe_request)
218
220
  if self.view.has_add_permission(self.threadsafe_request)
219
221
  else None
220
222
  ),
@@ -228,7 +230,9 @@ class SBAdminListAction(SBAdminAction):
228
230
  for sort in self.table_params.get("sort", []):
229
231
  order_by.append(f"{'-' if sort['dir'] == 'desc' else ''}{sort['field']}")
230
232
  if len(order_by) == 0:
231
- order_by = self.view.get_list_ordering() or [self.get_pk_field().name]
233
+ order_by = self.view.get_list_ordering(self.threadsafe_request) or [
234
+ self.get_pk_field().name
235
+ ]
232
236
  return order_by
233
237
 
234
238
  def get_order_by_fields_from_request(self):
@@ -1,6 +1,8 @@
1
1
  import json
2
2
  import urllib.parse
3
+ from collections.abc import Iterable
3
4
  from functools import partial
5
+ from typing import Any
4
6
 
5
7
  from ckeditor.fields import RichTextFormField
6
8
  from ckeditor_uploader.fields import RichTextUploadingFormField
@@ -16,6 +18,7 @@ from django.core.exceptions import (
16
18
  PermissionDenied,
17
19
  )
18
20
  from django.db import models
21
+ from django.db.models import QuerySet
19
22
  from django.forms import HiddenInput
20
23
  from django.forms.models import (
21
24
  ModelFormMetaclass,
@@ -24,7 +27,7 @@ from django.forms.models import (
24
27
  from django.template.loader import render_to_string
25
28
  from django.template.response import TemplateResponse
26
29
  from django.urls import reverse
27
- from django.utils.safestring import mark_safe
30
+ from django.utils.safestring import mark_safe, SafeString
28
31
  from django.utils.text import capfirst
29
32
  from django.utils.translation import gettext_lazy as _
30
33
  from django_admin_inline_paginator.admin import TabularInlinePaginated
@@ -470,10 +473,10 @@ class SBAdminInlineAndAdminCommon(SBAdminFormFieldWidgetsMixin):
470
473
  configuration, inline_view_instance.model, admin_site
471
474
  )
472
475
 
473
- def get_sbadmin_fake_inlines(self, request, obj):
476
+ def get_sbadmin_fake_inlines(self, request, obj) -> Iterable:
474
477
  return self.sbadmin_fake_inlines or []
475
478
 
476
- def get_inline_instances(self, request, obj=None):
479
+ def get_inline_instances(self, request, obj=None) -> list:
477
480
  inline_classes = self.get_inlines(request, obj)
478
481
  inline_classes = [*inline_classes] or []
479
482
  inline_classes.extend(self.get_sbadmin_fake_inlines(request, obj))
@@ -492,7 +495,7 @@ class SBAdminInlineAndAdminCommon(SBAdminFormFieldWidgetsMixin):
492
495
  inlines.append(inline)
493
496
  return inlines
494
497
 
495
- def init_view_dynamic(self, request, request_data=None, **kwargs):
498
+ def init_view_dynamic(self, request, request_data=None, **kwargs) -> None:
496
499
  if SBAdminTranslationsService.is_translated_model(self.model):
497
500
  has_default_form = (
498
501
  self.form == TranslatableModelForm or self.form == forms.ModelForm
@@ -504,13 +507,13 @@ class SBAdminInlineAndAdminCommon(SBAdminFormFieldWidgetsMixin):
504
507
  f"Admin '{self}' form class '{self.form}' needs to extend SBTranslatableModelForm in case of translatable model."
505
508
  )
506
509
  super().init_view_dynamic(request, request_data, **kwargs)
507
- self.initialize_form_class(self.form)
510
+ self.initialize_form_class(self.form, request)
508
511
 
509
- def initialize_form_class(self, form):
512
+ def initialize_form_class(self, form, request) -> None:
510
513
  if form:
511
514
  form.view = self
512
515
 
513
- def initialize_all_base_fields_form(self, request):
516
+ def initialize_all_base_fields_form(self, request) -> None:
514
517
  params = {
515
518
  "form": self.form,
516
519
  "fields": "__all__",
@@ -520,10 +523,10 @@ class SBAdminInlineAndAdminCommon(SBAdminFormFieldWidgetsMixin):
520
523
 
521
524
 
522
525
  class SBAdminThirdParty(SBAdminInlineAndAdminCommon, SBAdminBaseView):
523
- def get_menu_view_url(self, request):
526
+ def get_menu_view_url(self, request) -> str:
524
527
  return reverse(f"sb_admin:{self.get_id()}_changelist")
525
528
 
526
- def get_id(self):
529
+ def get_id(self) -> str:
527
530
  return self.get_model_path()
528
531
 
529
532
  def change_view(self, request, object_id, form_url="", extra_context=None):
@@ -536,7 +539,7 @@ class SBAdminThirdParty(SBAdminInlineAndAdminCommon, SBAdminBaseView):
536
539
  extra_context.update(self.get_global_context(request))
537
540
  return super().changelist_view(request, extra_context)
538
541
 
539
- def get_action_url(self, action, modifier="template"):
542
+ def get_action_url(self, action, modifier="template") -> str:
540
543
  return reverse(
541
544
  "sb_admin:sb_admin_base",
542
545
  kwargs={
@@ -555,7 +558,7 @@ class SBAdminTranslationStatusMixin:
555
558
  main_language_code,
556
559
  current_lang_code,
557
560
  translations_edit_url,
558
- ):
561
+ ) -> dict[str, Any]:
559
562
  language_code = language[0]
560
563
  language_title = language[1]
561
564
  this_lang_count = languages_count.get(language_code, 0)
@@ -591,11 +594,11 @@ class SBAdminTranslationStatusMixin:
591
594
  }
592
595
 
593
596
  @classmethod
594
- def get_empty_state(cls):
597
+ def get_empty_state(cls) -> SafeString:
595
598
  return mark_safe("<div class='is-empty'></div>")
596
599
 
597
600
  @admin.display(description="")
598
- def sbadmin_translation_status(self, obj):
601
+ def sbadmin_translation_status(self, obj) -> SafeString:
599
602
  if not SBAdminTranslationsService.is_i18n_enabled():
600
603
  return self.get_empty_state()
601
604
 
@@ -666,19 +669,21 @@ class SBAdmin(
666
669
  formset.inline_instance.parent_instance = form.instance
667
670
  super().save_formset(request, form, formset, change)
668
671
 
669
- def get_sbadmin_list_filter(self, request):
672
+ def get_sbadmin_list_filter(self, request) -> Iterable:
670
673
  return self.sbadmin_list_filter or self.get_list_filter(request)
671
674
 
672
675
  def get_form(self, request, obj=None, **kwargs):
673
676
  self.initialize_all_base_fields_form(request)
674
677
  form = super().get_form(request, obj, **kwargs)
675
- self.initialize_form_class(form)
678
+ self.initialize_form_class(form, request)
676
679
  return form
677
680
 
678
- def get_id(self):
681
+ def get_id(self) -> str:
679
682
  return self.get_model_path()
680
683
 
681
- def get_sbadmin_fieldsets(self, request, object_id=None):
684
+ def get_sbadmin_fieldsets(
685
+ self, request, object_id=None
686
+ ) -> Iterable[tuple[str | None, dict[str, Any]]]:
682
687
  fieldsets = self.sbadmin_fieldsets or self.fieldsets
683
688
  if fieldsets:
684
689
  return fieldsets
@@ -690,7 +695,9 @@ class SBAdmin(
690
695
  super().register_autocomplete_views(request)
691
696
  self.get_form(request)()
692
697
 
693
- def get_fieldsets(self, request, obj):
698
+ def get_fieldsets(
699
+ self, request, obj=None
700
+ ) -> list[tuple[str | None, dict[str, Any]]]:
694
701
  fieldsets = []
695
702
  object_id = obj.id if obj else None
696
703
  for fieldset in self.get_sbadmin_fieldsets(request, object_id):
@@ -705,7 +712,9 @@ class SBAdmin(
705
712
  fieldsets.append(fieldset_django)
706
713
  return fieldsets
707
714
 
708
- def get_fieldsets_context(self, request, object_id):
715
+ def get_fieldsets_context(
716
+ self, request, object_id
717
+ ) -> dict[str, dict[str | None, dict[str, Any]]]:
709
718
  fielsets_context = {}
710
719
  for fieldset in self.get_sbadmin_fieldsets(request, object_id):
711
720
  actions = fieldset[1].get("actions", [])
@@ -719,18 +728,18 @@ class SBAdmin(
719
728
  fielsets_context[fieldset[0]] = fieldset[1]
720
729
  return {"fieldsets_context": fielsets_context}
721
730
 
722
- def get_sbadmin_tabs(self, request, object_id):
731
+ def get_sbadmin_tabs(self, request, object_id) -> Iterable:
723
732
  return self.sbadmin_tabs
724
733
 
725
- def get_tabs_context(self, request, object_id):
734
+ def get_tabs_context(self, request, object_id) -> dict[str, Iterable]:
726
735
  return {"tabs_context": self.get_sbadmin_tabs(request, object_id)}
727
736
 
728
- def get_context_data(self, request):
737
+ def get_context_data(self, request) -> dict[str, Any]:
729
738
  return {
730
739
  "base_change_list_template": self.change_list_template,
731
740
  }
732
741
 
733
- def get_menu_view_url(self, request):
742
+ def get_menu_view_url(self, request) -> str:
734
743
  all_config = self.get_all_config(request)
735
744
  url_suffix = ""
736
745
  if all_config and all_config.get("all_params_changed", False):
@@ -744,10 +753,10 @@ class SBAdmin(
744
753
 
745
754
  return f'{reverse(f"sb_admin:{self.get_id()}_changelist")}{url_suffix}'
746
755
 
747
- def get_menu_label(self):
756
+ def get_menu_label(self) -> str:
748
757
  return self.menu_label or self.model._meta.verbose_name_plural
749
758
 
750
- def get_action_url(self, action, modifier="template"):
759
+ def get_action_url(self, action, modifier="template") -> str:
751
760
  if not hasattr(self, action):
752
761
  raise ImproperlyConfigured(f"Action {action} does not exist on {self}")
753
762
  return reverse(
@@ -759,16 +768,16 @@ class SBAdmin(
759
768
  },
760
769
  )
761
770
 
762
- def get_detail_url(self, object_id=None):
771
+ def get_detail_url(self, object_id=None) -> str:
763
772
  return reverse(
764
773
  f"sb_admin:{self.get_id()}_change",
765
774
  kwargs={"object_id": object_id or OBJECT_ID_PLACEHOLDER},
766
775
  )
767
776
 
768
- def get_new_url(self):
777
+ def get_new_url(self, request) -> str:
769
778
  return reverse(f"sb_admin:{self.get_id()}_add")
770
779
 
771
- def get_previous_next_context(self, request, object_id):
780
+ def get_previous_next_context(self, request, object_id) -> dict | dict[str, Any]:
772
781
  if not self.sbadmin_previous_next_buttons_enabled or not object_id:
773
782
  return {}
774
783
  changelist_filters = request.GET.get("_changelist_filters", "")
@@ -900,20 +909,20 @@ class SBAdminInline(
900
909
  ordering = None
901
910
  all_base_fields_form = None
902
911
 
903
- def get_ordering(self, request):
912
+ def get_ordering(self, request) -> tuple[str]:
904
913
  """
905
914
  Hook for specifying field ordering.
906
915
  """
907
916
  return self.ordering or ("-id",)
908
917
 
909
- def get_queryset(self, request=None):
918
+ def get_queryset(self, request=None) -> QuerySet:
910
919
  qs = super().get_queryset(request)
911
920
  return qs.order_by(*self.get_ordering(request))
912
921
 
913
- def get_sbadmin_inline_list_actions(self, request):
922
+ def get_sbadmin_inline_list_actions(self, request) -> list:
914
923
  return [*(self.sbadmin_inline_list_actions or [])]
915
924
 
916
- def get_action_url(self, action, modifier="template"):
925
+ def get_action_url(self, action, modifier="template") -> str:
917
926
  return reverse(
918
927
  "sb_admin:sb_admin_base",
919
928
  kwargs={
@@ -923,14 +932,14 @@ class SBAdminInline(
923
932
  },
924
933
  )
925
934
 
926
- def register_autocomplete_views(self, request):
935
+ def register_autocomplete_views(self, request) -> None:
927
936
  super().register_autocomplete_views(request)
928
937
  form_class = self.get_formset(request, self.model()).form
929
- self.initialize_form_class(form_class)
938
+ self.initialize_form_class(form_class, request)
930
939
  form_class()
931
940
 
932
- def get_context_data(self, request):
933
- is_sortable_active = self.sortable_field_name and (
941
+ def get_context_data(self, request) -> dict[str, Any]:
942
+ is_sortable_active: bool = self.sortable_field_name and (
934
943
  self.has_add_permission(request) or self.has_change_permission(request)
935
944
  )
936
945
  return {
@@ -938,7 +947,7 @@ class SBAdminInline(
938
947
  "is_sortable_active": is_sortable_active,
939
948
  }
940
949
 
941
- def init_sortable_field(self):
950
+ def init_sortable_field(self) -> None:
942
951
  if not self.sortable_field_name:
943
952
  for field_name in self.sbadmin_sortable_field_options:
944
953
  is_sortable_field_present = False
@@ -954,15 +963,15 @@ class SBAdminInline(
954
963
  self.init_sortable_field()
955
964
  super().__init__(parent_model, admin_site)
956
965
 
957
- def init_view_dynamic(self, request, request_data=None, **kwargs):
966
+ def init_view_dynamic(self, request, request_data=None, **kwargs) -> None:
958
967
  return super().init_view_dynamic(request, request_data, **kwargs)
959
968
 
960
- def get_id(self):
969
+ def get_id(self) -> str:
961
970
  return (
962
971
  f"{self.__class__.__name__}_{SBAdminViewService.get_model_path(self.model)}"
963
972
  )
964
973
 
965
- def init_inline_dynamic(self, request, obj=None):
974
+ def init_inline_dynamic(self, request, obj=None) -> None:
966
975
  self.threadsafe_request = request
967
976
  self.parent_instance = obj
968
977
 
@@ -976,7 +985,7 @@ class SBAdminInline(
976
985
  self.initialize_all_base_fields_form(request)
977
986
  formset = super().get_formset(request, obj, **kwargs)
978
987
  form_class = formset.form
979
- self.initialize_form_class(form_class)
988
+ self.initialize_form_class(form_class, request)
980
989
  return formset
981
990
 
982
991
 
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-smartbase-admin
3
- Version: 0.2.84
3
+ Version: 0.2.85
4
4
  Summary:
5
5
  Author: SmartBase
6
6
  Author-email: info@smartbase.sk
@@ -1,16 +1,16 @@
1
1
  django_smartbase_admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  django_smartbase_admin/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- django_smartbase_admin/actions/admin_action_list.py,sha256=binm5UJF5-MAI98cuXZVR5oJsxQTxJhstrTXFBgl_Lg,19454
3
+ django_smartbase_admin/actions/admin_action_list.py,sha256=A-nQiP_iMaH8GPrfd3rtQPdil59WIuzzghfh36wcKhE,19621
4
4
  django_smartbase_admin/actions/advanced_filters.py,sha256=Vm8b6TAwNehR8INjolFG7pEYL4ADO7XUiVOWpb0btM0,13481
5
5
  django_smartbase_admin/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- django_smartbase_admin/admin/admin_base.py,sha256=ihhQbo6gn0QOyjZnj0oYJ6Du06MgHB9j9jdwUdhm6IY,40324
6
+ django_smartbase_admin/admin/admin_base.py,sha256=_OdllV6oDvrqKyXDbAAM0GJVROjncwfpnpvC5_9LJtQ,41019
7
7
  django_smartbase_admin/admin/site.py,sha256=VrJBhwgZsLa2GohvjnNL7m4dVR3S4Ou1V1UzfE1qOoQ,6577
8
8
  django_smartbase_admin/admin/widgets.py,sha256=SrCf_pAzEPZj6OXJOYU0b9wlA9ICiBtalptKhY6MDnw,19189
9
9
  django_smartbase_admin/apps.py,sha256=C1wT1YUEZNKcUJfpD01nIZEFgYEsuav52WFKvEURRDU,545
10
10
  django_smartbase_admin/compilemessages.py,sha256=-_FEFQlOvE4L8UzSuUxSxZQjgGlwL9IZtmg59fW_kIQ,342
11
11
  django_smartbase_admin/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  django_smartbase_admin/engine/actions.py,sha256=n8PiG60Kj1ECHB4lfVH_jvHMyOjOZ-DvQfO9F2CuqW0,1733
13
- django_smartbase_admin/engine/admin_base_view.py,sha256=lFiK5KnejZY3pUrUgdX6wUecs_KHzlnRFCTXpI8NMp4,28804
13
+ django_smartbase_admin/engine/admin_base_view.py,sha256=8Pd5a2F0PX5euZkVCeWbcF9JxmSvOKf_HQNveBenCDs,29941
14
14
  django_smartbase_admin/engine/admin_entrypoint_view.py,sha256=jfMfcYPfdre2abHfC4KIxaP_epJFuCeTcujGhGd4Tl4,624
15
15
  django_smartbase_admin/engine/admin_view.py,sha256=9wGffahDR3IYmhL9ZbX8uitwGdXdw5DIL5GnWBawmJM,4238
16
16
  django_smartbase_admin/engine/configuration.py,sha256=P3iSiPm9QBl9etTDJIWzo7DzOBCryGwWtbF288PEtus,8120
@@ -665,7 +665,7 @@ django_smartbase_admin/views/dashboard_view.py,sha256=vtz5emYTQ5WDFeLA8HrcmjSOVd
665
665
  django_smartbase_admin/views/global_filter_view.py,sha256=eYo1moJGyi7jc2cPDA5ZBiEgA7Hmc-DxbQvbqUpDkg8,1127
666
666
  django_smartbase_admin/views/media_view.py,sha256=5BLWXuzynF7nM34t-mf2BQSRN5ojY8HxpLIqt7Jiq9g,292
667
667
  django_smartbase_admin/views/translations_view.py,sha256=A02q1t13akLKd2Pg_ej4tVi5qPUKYxB2LqsBbYXM0l8,20267
668
- django_smartbase_admin-0.2.84.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
669
- django_smartbase_admin-0.2.84.dist-info/METADATA,sha256=SiRlg8wv9PEY06rjCHINLY8fVKWrA2EdsF97DIBe_Mg,996
670
- django_smartbase_admin-0.2.84.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
671
- django_smartbase_admin-0.2.84.dist-info/RECORD,,
668
+ django_smartbase_admin-0.2.85.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
669
+ django_smartbase_admin-0.2.85.dist-info/METADATA,sha256=ALs1l-SLzETVa6Joy_48awHH0ncurr9rmBTMofeaN8U,996
670
+ django_smartbase_admin-0.2.85.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
671
+ django_smartbase_admin-0.2.85.dist-info/RECORD,,