accrete 0.0.10__tar.gz → 0.0.11__tar.gz

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.
Files changed (109) hide show
  1. {accrete-0.0.10 → accrete-0.0.11}/PKG-INFO +1 -1
  2. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/helper.py +11 -8
  3. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/css/accrete.css +6 -0
  4. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/layout.html +14 -2
  5. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/header.html +2 -13
  6. accrete-0.0.11/accrete/contrib/ui/templates/ui/partials/pagination_detail.html +23 -0
  7. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/pagination_list.html +7 -9
  8. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/table.html +1 -1
  9. {accrete-0.0.10 → accrete-0.0.11}/pyproject.toml +1 -1
  10. accrete-0.0.10/accrete/contrib/ui/templates/ui/partials/pagination_detail.html +0 -27
  11. {accrete-0.0.10 → accrete-0.0.11}/.gitignore +0 -0
  12. {accrete-0.0.10 → accrete-0.0.11}/LICENSE +0 -0
  13. {accrete-0.0.10 → accrete-0.0.11}/README.md +0 -0
  14. {accrete-0.0.10 → accrete-0.0.11}/accrete/__init__.py +0 -0
  15. {accrete-0.0.10 → accrete-0.0.11}/accrete/admin.py +0 -0
  16. {accrete-0.0.10 → accrete-0.0.11}/accrete/apps.py +0 -0
  17. {accrete-0.0.10 → accrete-0.0.11}/accrete/config.py +0 -0
  18. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/__init__.py +0 -0
  19. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/__init__.py +0 -0
  20. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/admin.py +0 -0
  21. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/apps.py +0 -0
  22. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/forms.py +0 -0
  23. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/migrations/0001_initial.py +0 -0
  24. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/migrations/__init__.py +0 -0
  25. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/models.py +0 -0
  26. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/queries.py +0 -0
  27. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/tests.py +0 -0
  28. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/sequence/views.py +0 -0
  29. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/__init__.py +0 -0
  30. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/admin.py +0 -0
  31. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/apps.py +0 -0
  32. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/forms.py +0 -0
  33. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/migrations/0001_initial.py +0 -0
  34. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/migrations/__init__.py +0 -0
  35. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/models.py +0 -0
  36. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/tasks.py +0 -0
  37. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/tests.py +0 -0
  38. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/system_mail/views.py +0 -0
  39. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/__init__.py +0 -0
  40. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/admin.py +0 -0
  41. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/apps.py +0 -0
  42. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/filter.py +0 -0
  43. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/migrations/__init__.py +0 -0
  44. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/css/icons.css +0 -0
  45. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/icons/Logo.svg +0 -0
  46. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/icons/accrete.svg +0 -0
  47. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/js/filter.js +0 -0
  48. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/js/list.js +0 -0
  49. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/js/navbar.js +0 -0
  50. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/static/js/utils.js +0 -0
  51. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html +0 -0
  52. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/email.html +0 -0
  53. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/file.html +0 -0
  54. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/input.html +0 -0
  55. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/select.html +0 -0
  56. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/text.html +0 -0
  57. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html +0 -0
  58. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/detail.html +0 -0
  59. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/form.html +0 -0
  60. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/list.html +0 -0
  61. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/filter.html +0 -0
  62. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/form_errors.html +0 -0
  63. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/form_modal.html +0 -0
  64. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templates/ui/partials/onchange_form.html +0 -0
  65. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templatetags/__init__.py +0 -0
  66. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/templatetags/accrete_ui.py +0 -0
  67. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/tests.py +0 -0
  68. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/urls.py +0 -0
  69. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/ui/views.py +0 -0
  70. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/__init__.py +0 -0
  71. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/admin.py +0 -0
  72. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/apps.py +0 -0
  73. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/locale/de/LC_MESSAGES/django.mo +0 -0
  74. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/locale/de/LC_MESSAGES/django.po +0 -0
  75. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/middleware.py +0 -0
  76. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/migrations/0001_initial.py +0 -0
  77. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/migrations/__init__.py +0 -0
  78. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/models.py +0 -0
  79. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/templates/user/login.html +0 -0
  80. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/tests.py +0 -0
  81. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/urls.py +0 -0
  82. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user/views.py +0 -0
  83. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/__init__.py +0 -0
  84. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/admin.py +0 -0
  85. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/apps.py +0 -0
  86. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/config.py +0 -0
  87. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/forms.py +0 -0
  88. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/migrations/0001_initial.py +0 -0
  89. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/migrations/__init__.py +0 -0
  90. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/models.py +0 -0
  91. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/templates/user_registration/mail_templates/confirmation_mail.html +0 -0
  92. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/templates/user_registration/registration.html +0 -0
  93. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/tests.py +0 -0
  94. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/urls.py +0 -0
  95. {accrete-0.0.10 → accrete-0.0.11}/accrete/contrib/user_registration/views.py +0 -0
  96. {accrete-0.0.10 → accrete-0.0.11}/accrete/decorators.py +0 -0
  97. {accrete-0.0.10 → accrete-0.0.11}/accrete/forms.py +0 -0
  98. {accrete-0.0.10 → accrete-0.0.11}/accrete/middleware.py +0 -0
  99. {accrete-0.0.10 → accrete-0.0.11}/accrete/migrations/0001_initial.py +0 -0
  100. {accrete-0.0.10 → accrete-0.0.11}/accrete/migrations/0002_initial.py +0 -0
  101. {accrete-0.0.10 → accrete-0.0.11}/accrete/migrations/__init__.py +0 -0
  102. {accrete-0.0.10 → accrete-0.0.11}/accrete/models.py +0 -0
  103. {accrete-0.0.10 → accrete-0.0.11}/accrete/queries.py +0 -0
  104. {accrete-0.0.10 → accrete-0.0.11}/accrete/shortcuts.py +0 -0
  105. {accrete-0.0.10 → accrete-0.0.11}/accrete/tenant.py +0 -0
  106. {accrete-0.0.10 → accrete-0.0.11}/accrete/tests.py +0 -0
  107. {accrete-0.0.10 → accrete-0.0.11}/accrete/utils/__init__.py +0 -0
  108. {accrete-0.0.10 → accrete-0.0.11}/accrete/utils/dates.py +0 -0
  109. {accrete-0.0.10 → accrete-0.0.11}/accrete/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: accrete
3
- Version: 0.0.10
3
+ Version: 0.0.11
4
4
  Summary: Django Shared Schema Multi Tenant
5
5
  Author-email: Benedikt Jilek <benedikt.jilek@pm.me>
6
6
  License: Copyright (c) 2023 Benedikt Jilek
@@ -11,6 +11,8 @@ from accrete.contrib.ui.filter import Filter
11
11
 
12
12
  _logger = logging.getLogger(__name__)
13
13
 
14
+ DEFAULT_PAGINATE_BY = 40
15
+
14
16
 
15
17
  @dataclass
16
18
  class ClientAction:
@@ -49,13 +51,13 @@ class ListContext:
49
51
  extra_query: Q = None
50
52
  related_fields: list[str] = field(default_factory=list)
51
53
  prefetch_fields: list[str] = field(default_factory=list)
52
- paginate_by: int = 20
54
+ paginate_by: int = DEFAULT_PAGINATE_BY
53
55
  order_by: list[str] = None
54
56
  column_width: int = 12
55
57
  filter_relation_depth: int = 4
56
58
  actions: list[ClientAction] = field(default_factory=list)
57
59
  breadcrumbs: list[BreadCrumb] = field(default_factory=list)
58
- obj_label: str = 'Name'
60
+ obj_label: str = None
59
61
  fields: list[TableField] = field(default_factory=list)
60
62
 
61
63
  def get_queryset(self):
@@ -112,7 +114,7 @@ class ListContext:
112
114
  'breadcrumbs': self.breadcrumbs,
113
115
  'querystring': build_querystring(self.get_params),
114
116
  'actions': self.actions,
115
- 'obj_label': self.obj_label,
117
+ 'obj_label': self.obj_label or _('Name'),
116
118
  'fields': self.fields
117
119
  }
118
120
  context.update(self.context)
@@ -125,7 +127,7 @@ class DetailContext:
125
127
  obj: Model
126
128
  get_params: dict
127
129
  order_by: str = None
128
- paginate_by: int = 20
130
+ paginate_by: int = DEFAULT_PAGINATE_BY
129
131
  title: str = None
130
132
  queryset: type[QuerySet] = None
131
133
  extra_query: Q = None
@@ -205,7 +207,7 @@ class DetailContext:
205
207
  @dataclass
206
208
  class FormContext:
207
209
 
208
- model: Model|type[Model]
210
+ model: Model | type[Model]
209
211
  get_params: dict
210
212
  title: str = None
211
213
  context: dict = field(default_factory=dict)
@@ -225,12 +227,11 @@ class FormContext:
225
227
  ]
226
228
  try:
227
229
  url = self.discard_url or self.model.get_absolute_url()
228
- except TypeError as e:
229
- _logger.exception(
230
+ except TypeError:
231
+ raise TypeError(
230
232
  'Supply the discard_url parameter if FormContext is called '
231
233
  'with a model class instead of an instance.'
232
234
  )
233
- raise e
234
235
  except AttributeError as e:
235
236
  _logger.error(
236
237
  'Supply the discard_url parameter if FormContext is '
@@ -275,6 +276,8 @@ def build_querystring(get_params: dict, extra_params: list[str] = None) -> str:
275
276
  querystring = f'?q={get_params.get("q", "[]")}'
276
277
  if paginate_by := get_params.get('paginate_by', False):
277
278
  querystring += f'&paginate_by={paginate_by}'
279
+ # if page := get_params.get('page', False):
280
+ # querystring += f'&page={page}'
278
281
  if order_by := get_params.get('order_by', False):
279
282
  querystring += f'&order_by={order_by}'
280
283
  for param in extra_params or []:
@@ -149,3 +149,9 @@ select:focus {
149
149
  .label.is-required {
150
150
  font-weight: 700;
151
151
  }
152
+
153
+ @media screen and (max-width: 768px) {
154
+ .label.has-field {
155
+ padding: 12px 0 12px 0;
156
+ }
157
+ }
@@ -112,7 +112,7 @@
112
112
  </div>
113
113
 
114
114
  <div class="column" style="overflow-x: auto">
115
- <div class="is-flex is-flex-direction-column" style="height: 100%">
115
+ <div class="is-flex is-flex-direction-column" style="height: 100%; overflow: hidden">
116
116
  <div>
117
117
  {% include 'ui/partials/header.html' %}
118
118
  </div>
@@ -120,7 +120,19 @@
120
120
  {% block messages %}{% endblock %}
121
121
  {% block content %}{% endblock %}
122
122
  </div>
123
- <div style="height: 0"></div>
123
+ <div>
124
+ {% if list_pagination or detail_pagination %}
125
+ <div class="level is-hidden-tablet is-align-self-flex-start m-3">
126
+ <div class="level-item is-align-content-flex-start">
127
+ {% if list_pagination %}
128
+ {% include 'ui/partials/pagination_list.html' %}
129
+ {% elif detail_pagination %}
130
+ {% include 'ui/partials/pagination_detail.html' %}
131
+ {% endif %}
132
+ </div>
133
+ </div>
134
+ {% endif %}
135
+ </div>
124
136
  </div>
125
137
  </div>
126
138
  </div>
@@ -1,17 +1,6 @@
1
1
  {% load i18n %}
2
2
 
3
3
  <div class="pt-3">
4
- {% if list_pagination or detail_pagination %}
5
- <div class="level is-hidden-tablet is-align-self-flex-start mb-3 px-3">
6
- <div class="level-item is-align-content-flex-start">
7
- {% if list_pagination %}
8
- {% include 'ui/partials/pagination_list.html' %}
9
- {% elif detail_pagination %}
10
- {% include 'ui/partials/pagination_detail.html' %}
11
- {% endif %}
12
- </div>
13
- </div>
14
- {% endif %}
15
4
  <div class="level level-is-shrinkable is-flex mb-2 pl-3 {% if detail_pagination %}is-mobile {% endif %}">
16
5
  <div class="level-left">
17
6
  <div class="level-item has-text-weight-bold">
@@ -39,7 +28,7 @@
39
28
  </div>
40
29
 
41
30
  <div class="is-flex is-hidden-fullhd is-justify-content-space-between mb-2">
42
- <div class="is-flex py-1 pr-1 pl-3" style="overflow-x: auto">
31
+ <div class="is-flex py-1 px-1 ml-2" style="overflow-x: auto">
43
32
  {% for action in actions %}
44
33
  {% if action.submit %}
45
34
  <input class="button mr-2 {{ action.class_list|join:' ' }}"
@@ -61,4 +50,4 @@
61
50
  </div>
62
51
  {% endif %}
63
52
  </div>
64
- </div>
53
+ </div>
@@ -0,0 +1,23 @@
1
+ <div id="detail-pagination" class="field has-addons" style="width: 100%">
2
+ <p class="control">
3
+ <button class="button"
4
+ hx-get="{{ previous_object_url }}{{ querystring }}"
5
+ hx-replace-url="true"
6
+ hx-select-oob="#content,#detail-pagination,#panel-actions"
7
+ ><
8
+ </button>
9
+
10
+ </p>
11
+ <p class="control is-expanded">
12
+ <button class="button is-fullwidth px-1" style="white-space: normal">
13
+ <span class="{% if total_objects > 99999 %}is-size-7{% endif %}">{{ current_object_idx }} / {{ total_objects }}</span>
14
+ </button>
15
+ </p>
16
+ <p class="control">
17
+ <button class="button" hx-get="{{ next_object_url }}{{ querystring }}"
18
+ hx-replace-url="true"
19
+ hx-select-oob="#content,#detail-pagination,#panel-actions"
20
+ >>
21
+ </button>
22
+ </p>
23
+ </div>
@@ -4,25 +4,23 @@
4
4
  <button class="button"
5
5
  hx-get="{{ querystring }}&page={% if page.has_previous %}{{ page.previous_page_number }}{% else %}{{ paginator.num_pages }}{% endif %}"
6
6
  hx-replace-url="true"
7
- hx-select-oob="#content,#list-pagination"
7
+ hx-select-oob="#content,#list-pagination,#panel-actions"
8
8
  >
9
9
  <
10
10
  </button>
11
11
  </p>
12
12
  <p class="control is-expanded">
13
- {% if paginator.count > 9999 %}
14
- <button class="button is-fullwidth px-0">
15
- <span class="is-size-7">{{ page.start_index }}-{{ page.end_index }}<br>/{{ paginator.count }}</span>
16
- </button>
17
- {% else %}
18
- <button class="button is-fullwidth">{{ page.start_index }}-{{ page.end_index }}/{{ paginator.count }}</button>
19
- {% endif %}
13
+ <button class="button is-fullwidth px-1" style="white-space: normal">
14
+ <span class="{% if paginator.count > 9999 %}is-size-7{% endif %}">
15
+ {{ page.start_index }}-{{ page.end_index }} / {{ paginator.count }}
16
+ </span>
17
+ </button>
20
18
  </p>
21
19
  <p class="control">
22
20
  <button class="button"
23
21
  hx-get="{{ querystring }}&page={% if page.has_next %}{{ page.next_page_number }}{% else %}1{% endif %}"
24
22
  hx-replace-url="true"
25
- hx-select-oob="#content,#list-pagination"
23
+ hx-select-oob="#content,#list-pagination,#panel-actions"
26
24
  >
27
25
  >
28
26
  </button>
@@ -27,7 +27,7 @@
27
27
  {% block table_data_row %}
28
28
  <tr>
29
29
  {% block table_data %}
30
- <td><a class="is-underlined" href="{{ obj.get_absolute_url }}{{ querystring }}">{{ obj }}</a></td>
30
+ <td><a class="is-underlined" href="{{ obj.get_absolute_url }}{{ querystring }}&page={{ page.number }}">{{ obj }}</a></td>
31
31
  {% for field in fields %}
32
32
  <td>{{ obj|get_attr:field.name|default_if_none:'---' }}</td>
33
33
  {% endfor %}
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'accrete'
7
- version = '0.0.10'
7
+ version = '0.0.11'
8
8
  authors = [
9
9
  { name='Benedikt Jilek', email='benedikt.jilek@pm.me' },
10
10
  ]
@@ -1,27 +0,0 @@
1
- <div id="detail-pagination" class="field has-addons" style="width: 100%">
2
- <p class="control">
3
- <button class="button"
4
- hx-get="{{ previous_object_url }}{{ querystring }}"
5
- hx-replace-url="true"
6
- hx-select-oob="#content,#detail-pagination"
7
- ><
8
- </button>
9
-
10
- </p>
11
- {% if total_objects > 99999 %}
12
- <p class="control is-expanded">
13
- <button class="button is-fullwidth px-1"><span class="is-size-7">{{ current_object_idx }}<br>/{{ total_objects }}</span></button>
14
- </p>
15
- {% else %}
16
- <p class="control is-expanded">
17
- <button class="button is-fullwidth px-1">{{ current_object_idx }} / {{ total_objects }}</button>
18
- </p>
19
- {% endif %}
20
- <p class="control">
21
- <button class="button" hx-get="{{ next_object_url }}{{ querystring }}"
22
- hx-replace-url="true"
23
- hx-select-oob="#content,#detail-pagination"
24
- >>
25
- </button>
26
- </p>
27
- </div>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes