accrete 0.0.100__tar.gz → 0.0.102__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 (242) hide show
  1. {accrete-0.0.100 → accrete-0.0.102}/PKG-INFO +1 -1
  2. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/__init__.py +1 -3
  3. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/components/search_select.py +1 -1
  4. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/filter.py +43 -6
  5. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/filter.html +5 -2
  6. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/modal_form.html +1 -0
  7. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/widgets/model_search_select.html +4 -2
  8. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html +4 -4
  9. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templatetags/accrete_ui.py +1 -1
  10. {accrete-0.0.100 → accrete-0.0.102}/accrete/middleware.py +7 -9
  11. accrete-0.0.102/accrete/migrations/__init__.py +0 -0
  12. {accrete-0.0.100 → accrete-0.0.102}/accrete/tenant.py +2 -1
  13. {accrete-0.0.100 → accrete-0.0.102}/pyproject.toml +1 -1
  14. {accrete-0.0.100 → accrete-0.0.102}/.gitignore +0 -0
  15. {accrete-0.0.100 → accrete-0.0.102}/LICENSE +0 -0
  16. {accrete-0.0.100 → accrete-0.0.102}/README.md +0 -0
  17. {accrete-0.0.100 → accrete-0.0.102}/accrete/__init__.py +0 -0
  18. {accrete-0.0.100 → accrete-0.0.102}/accrete/admin.py +0 -0
  19. {accrete-0.0.100 → accrete-0.0.102}/accrete/annotation.py +0 -0
  20. {accrete-0.0.100 → accrete-0.0.102}/accrete/apps.py +0 -0
  21. {accrete-0.0.100 → accrete-0.0.102}/accrete/config.py +0 -0
  22. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/__init__.py +0 -0
  23. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/__init__.py +0 -0
  24. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/admin.py +0 -0
  25. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/apps.py +0 -0
  26. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/forms.py +0 -0
  27. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/migrations/0001_initial.py +0 -0
  28. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py +0 -0
  29. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/migrations/__init__.py +0 -0
  30. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/models.py +0 -0
  31. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/queries.py +0 -0
  32. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/tests.py +0 -0
  33. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/sequence/views.py +0 -0
  34. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/__init__.py +0 -0
  35. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/admin.py +0 -0
  36. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/apps.py +0 -0
  37. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/forms.py +0 -0
  38. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/migrations/0001_initial.py +0 -0
  39. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/migrations/__init__.py +0 -0
  40. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/models.py +0 -0
  41. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/tasks.py +0 -0
  42. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/tests.py +0 -0
  43. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/system_mail/views.py +0 -0
  44. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/admin.py +0 -0
  45. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/apps.py +0 -0
  46. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/components/__init__.py +0 -0
  47. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/context.py +0 -0
  48. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/elements.py +0 -0
  49. {accrete-0.0.100/accrete/contrib/ui/migrations → accrete-0.0.102/accrete/contrib/ui/forms}/__init__.py +0 -0
  50. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/forms/widgets.py +0 -0
  51. {accrete-0.0.100/accrete/contrib/ui/templatetags → accrete-0.0.102/accrete/contrib/ui/migrations}/__init__.py +0 -0
  52. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/LICENSE +0 -0
  53. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/README.md +0 -0
  54. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/bulma.scss +0 -0
  55. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/bulma.css +0 -0
  56. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/bulma.css.map +0 -0
  57. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/bulma.min.css +0 -0
  58. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-dark-mode.min.css +0 -0
  59. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-dark-mode.min.css.map +0 -0
  60. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers-prefixed.min.css +0 -0
  61. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers-prefixed.min.css.map +0 -0
  62. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers.min.css +0 -0
  63. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers.min.css.map +0 -0
  64. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.min.css +0 -0
  65. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.min.css.map +0 -0
  66. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/package.json +0 -0
  67. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/_index.scss +0 -0
  68. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/base/_index.scss +0 -0
  69. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/base/animations.scss +0 -0
  70. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/base/generic.scss +0 -0
  71. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/base/minireset.scss +0 -0
  72. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/base/skeleton.scss +0 -0
  73. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/_index.scss +0 -0
  74. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/breadcrumb.scss +0 -0
  75. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/card.scss +0 -0
  76. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/dropdown.scss +0 -0
  77. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/menu.scss +0 -0
  78. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/message.scss +0 -0
  79. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/modal.scss +0 -0
  80. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/navbar.scss +0 -0
  81. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/pagination.scss +0 -0
  82. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/panel.scss +0 -0
  83. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/components/tabs.scss +0 -0
  84. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/_index.scss +0 -0
  85. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/block.scss +0 -0
  86. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/box.scss +0 -0
  87. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/button.scss +0 -0
  88. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/content.scss +0 -0
  89. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/delete.scss +0 -0
  90. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/icon.scss +0 -0
  91. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/image.scss +0 -0
  92. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/loader.scss +0 -0
  93. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/notification.scss +0 -0
  94. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/progress.scss +0 -0
  95. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/table.scss +0 -0
  96. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/tag.scss +0 -0
  97. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/elements/title.scss +0 -0
  98. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/_index.scss +0 -0
  99. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/checkbox-radio.scss +0 -0
  100. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/file.scss +0 -0
  101. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/input-textarea.scss +0 -0
  102. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/select.scss +0 -0
  103. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/shared.scss +0 -0
  104. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/form/tools.scss +0 -0
  105. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/grid/_index.scss +0 -0
  106. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/grid/columns-v2.scss +0 -0
  107. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/grid/columns.scss +0 -0
  108. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/grid/grid.scss +0 -0
  109. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/_index.scss +0 -0
  110. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/aspect-ratio.scss +0 -0
  111. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/border.scss +0 -0
  112. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/color.scss +0 -0
  113. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/flexbox.scss +0 -0
  114. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/float.scss +0 -0
  115. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/gap.scss +0 -0
  116. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/other.scss +0 -0
  117. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/overflow.scss +0 -0
  118. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/position.scss +0 -0
  119. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/spacing.scss +0 -0
  120. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/typography.scss +0 -0
  121. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/helpers/visibility.scss +0 -0
  122. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/_index.scss +0 -0
  123. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/container.scss +0 -0
  124. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/footer.scss +0 -0
  125. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/hero.scss +0 -0
  126. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/level.scss +0 -0
  127. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/media.scss +0 -0
  128. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/layout/section.scss +0 -0
  129. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/themes/_index.scss +0 -0
  130. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/themes/dark.scss +0 -0
  131. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/themes/light.scss +0 -0
  132. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/themes/setup.scss +0 -0
  133. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/_index.scss +0 -0
  134. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/controls.scss +0 -0
  135. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/css-variables.scss +0 -0
  136. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/derived-variables.scss +0 -0
  137. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/extends.scss +0 -0
  138. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/functions.scss +0 -0
  139. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/initial-variables.scss +0 -0
  140. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/sass/utilities/mixins.scss +0 -0
  141. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/versions/bulma-no-dark-mode.scss +0 -0
  142. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/versions/bulma-no-helpers-prefixed.scss +0 -0
  143. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/versions/bulma-no-helpers.scss +0 -0
  144. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/bulma/versions/bulma-prefixed.scss +0 -0
  145. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/css/accrete.css +0 -0
  146. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/css/accrete.css.map +0 -0
  147. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/css/accrete.scss +0 -0
  148. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/css/fa.css +0 -0
  149. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/css/icons.css +0 -0
  150. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/icons/Logo.svg +0 -0
  151. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/icons/accrete.svg +0 -0
  152. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/js/alpine-sort3.14.1.js +0 -0
  153. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/js/alpine3.14.1.js +0 -0
  154. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/js/filter.js +0 -0
  155. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/js/htmx.min.js +0 -0
  156. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/js/ui.js +0 -0
  157. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-brands-400.ttf +0 -0
  158. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-brands-400.woff2 +0 -0
  159. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-regular-400.ttf +0 -0
  160. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-regular-400.woff2 +0 -0
  161. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-solid-900.ttf +0 -0
  162. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-solid-900.woff2 +0 -0
  163. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-v4compatibility.ttf +0 -0
  164. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/static/webfonts/fa-v4compatibility.woff2 +0 -0
  165. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html +0 -0
  166. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/date.html +0 -0
  167. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/email.html +0 -0
  168. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/file.html +0 -0
  169. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/input.html +0 -0
  170. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/select.html +0 -0
  171. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/text.html +0 -0
  172. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html +0 -0
  173. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/dashboard.html +0 -0
  174. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/detail.html +0 -0
  175. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/form.html +0 -0
  176. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/layout.html +0 -0
  177. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/list.html +0 -0
  178. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/form_errors.html +0 -0
  179. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/header.html +0 -0
  180. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/modal.html +0 -0
  181. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/onchange_form.html +0 -0
  182. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/pagination_detail.html +0 -0
  183. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/pagination_list.html +0 -0
  184. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/table_field.html +0 -0
  185. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/table_field_float.html +0 -0
  186. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/table_field_monetary.html +0 -0
  187. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/partials/table_field_string.html +0 -0
  188. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/templates/ui/table.html +0 -0
  189. {accrete-0.0.100/accrete/contrib/ui/templates/ui/components → accrete-0.0.102/accrete/contrib/ui/templates/ui/widgets}/model_search_select_multi_selected_options.html +0 -0
  190. {accrete-0.0.100/accrete/contrib/ui/templates/ui/components → accrete-0.0.102/accrete/contrib/ui/templates/ui/widgets}/model_search_select_multi_tags.html +0 -0
  191. {accrete-0.0.100/accrete/contrib/ui/templates/ui/components → accrete-0.0.102/accrete/contrib/ui/templates/ui/widgets}/model_search_select_options.html +0 -0
  192. {accrete-0.0.100/accrete/contrib/user → accrete-0.0.102/accrete/contrib/ui/templatetags}/__init__.py +0 -0
  193. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/tests.py +0 -0
  194. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/urls.py +0 -0
  195. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/ui/views.py +0 -0
  196. {accrete-0.0.100/accrete/contrib/user/migrations → accrete-0.0.102/accrete/contrib/user}/__init__.py +0 -0
  197. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/admin.py +0 -0
  198. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/apps.py +0 -0
  199. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/forms.py +0 -0
  200. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/locale/de/LC_MESSAGES/django.mo +0 -0
  201. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/locale/de/LC_MESSAGES/django.po +0 -0
  202. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/middleware.py +0 -0
  203. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/migrations/0001_initial.py +0 -0
  204. {accrete-0.0.100/accrete/contrib/user_registration → accrete-0.0.102/accrete/contrib/user/migrations}/__init__.py +0 -0
  205. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/models.py +0 -0
  206. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/accrete_navbar_end_dropdown.html +0 -0
  207. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/change_email.html +0 -0
  208. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/change_password.html +0 -0
  209. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/login.html +0 -0
  210. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/user_detail.html +0 -0
  211. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/templates/user/user_form.html +0 -0
  212. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/tests.py +0 -0
  213. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/urls.py +0 -0
  214. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user/views.py +0 -0
  215. {accrete-0.0.100/accrete/contrib/user_registration/migrations → accrete-0.0.102/accrete/contrib/user_registration}/__init__.py +0 -0
  216. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/admin.py +0 -0
  217. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/apps.py +0 -0
  218. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/config.py +0 -0
  219. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/forms.py +0 -0
  220. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/migrations/0001_initial.py +0 -0
  221. {accrete-0.0.100/accrete → accrete-0.0.102/accrete/contrib/user_registration}/migrations/__init__.py +0 -0
  222. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/models.py +0 -0
  223. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/templates/user_registration/mail_templates/confirmation_mail.html +0 -0
  224. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/templates/user_registration/registration.html +0 -0
  225. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/tests.py +0 -0
  226. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/urls.py +0 -0
  227. {accrete-0.0.100 → accrete-0.0.102}/accrete/contrib/user_registration/views.py +0 -0
  228. {accrete-0.0.100 → accrete-0.0.102}/accrete/forms.py +0 -0
  229. {accrete-0.0.100 → accrete-0.0.102}/accrete/managers.py +0 -0
  230. {accrete-0.0.100 → accrete-0.0.102}/accrete/migrations/0001_initial.py +0 -0
  231. {accrete-0.0.100 → accrete-0.0.102}/accrete/migrations/0002_initial.py +0 -0
  232. {accrete-0.0.100 → accrete-0.0.102}/accrete/models.py +0 -0
  233. {accrete-0.0.100 → accrete-0.0.102}/accrete/storage.py +0 -0
  234. {accrete-0.0.100 → accrete-0.0.102}/accrete/tests.py +0 -0
  235. {accrete-0.0.100 → accrete-0.0.102}/accrete/urls.py +0 -0
  236. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/__init__.py +0 -0
  237. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/dates.py +0 -0
  238. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/forms.py +0 -0
  239. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/log.py +0 -0
  240. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/models.py +0 -0
  241. {accrete-0.0.100 → accrete-0.0.102}/accrete/utils/views.py +0 -0
  242. {accrete-0.0.100 → accrete-0.0.102}/accrete/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: accrete
3
- Version: 0.0.100
3
+ Version: 0.0.102
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
@@ -30,6 +30,4 @@ from .elements import (
30
30
  Icon
31
31
  )
32
32
 
33
- from .components import (
34
- ModelSearchSelectOptions
35
- )
33
+ from . import components
@@ -9,7 +9,7 @@ from django.utils.safestring import mark_safe
9
9
  class ModelSearchSelectOptions:
10
10
 
11
11
  queryset: QuerySet
12
- template: str = 'ui/components/model_search_select_options.html'
12
+ template: str = 'ui/widgets/model_search_select_options.html'
13
13
 
14
14
  def get_context(self):
15
15
  return {'options': self.queryset}
@@ -1,5 +1,7 @@
1
1
  import logging
2
- from django.db.models.fields.related import ManyToOneRel, ManyToManyRel
2
+ from collections import Counter
3
+ from itertools import tee
4
+ from django.db.models import fields as db_fields
3
5
  from django.core.cache import cache
4
6
  from django.utils.translation import gettext_lazy as _
5
7
  from django.utils.safestring import mark_safe
@@ -56,17 +58,33 @@ class Filter:
56
58
  lambda x: x.is_relation and x.name not in filter_exclude,
57
59
  model_path[-1]._meta.get_fields()
58
60
  )
61
+ fields, fields_counter = tee(fields)
59
62
  res = []
63
+ occurrences = Counter([
64
+ f.related_model for f in filter(
65
+ lambda x: isinstance(
66
+ x, db_fields.reverse_related.ManyToOneRel
67
+ ), fields_counter
68
+ )
69
+ ])
70
+ multi_related_models = set([
71
+ key for key, val in occurrences.items() if val > 1
72
+ ])
60
73
  for field in fields:
74
+ multi_ref = field.related_model in multi_related_models
61
75
  if field.related_model in model_path:
62
76
  continue
63
77
  rel_path = f'{field_path}{"__" if field_path else ""}{field.name}'
64
78
  model_path_copy = model_path.copy()
65
79
  model_path_copy.append(field.related_model)
66
- try:
80
+ if isinstance(field, db_fields.reverse_related.ManyToManyRel):
81
+ continue
82
+ elif isinstance(field, db_fields.reverse_related.ManyToOneRel):
83
+ label = field.related_model._meta.verbose_name_plural
84
+ if multi_ref:
85
+ label = f'{label}/{field.field.verbose_name}'
86
+ else:
67
87
  label = field.verbose_name
68
- except AttributeError:
69
- label = field.related_model._meta.verbose_name
70
88
  res.append({
71
89
  'name': f'{rel_path}',
72
90
  'label': str(label),
@@ -139,7 +157,9 @@ class Filter:
139
157
  for f in field.get('fields', []):
140
158
  params += self.field_params(f)
141
159
  return f"""
142
- <div class="query-param" tabindex="-1" data-param="{field['name']}" data-param-label="{field['label']}">
160
+ <div class="query-param" tabindex="-1" data-param="{field['name']}"
161
+ data-param-label="{field['label']}"
162
+ >
143
163
  <p class="px-1 arrow">{field['label']}</p>
144
164
  <div class="query-params is-hidden" data-param="{field['name']}">
145
165
  {params}
@@ -160,7 +180,9 @@ class Filter:
160
180
  'PositiveSmallIntegerField': self.int_param,
161
181
  'DateTimeField': self.date_time_param,
162
182
  'DateField': self.date_param,
183
+ 'TimeField': self.time_param,
163
184
  'ForeignKey': self.foreign_key_param,
185
+ 'ManyToManyField': self.many_to_many_param,
164
186
  'FileField': self.file_param,
165
187
  'ImageField': self.file_param
166
188
  }
@@ -268,11 +290,23 @@ class Filter:
268
290
  html += self.null_param(key, value)
269
291
  return html
270
292
 
293
+ def time_param(self, key, value):
294
+ options = self.parse_choices(value.get('choices', ''))
295
+ html = self.param(key, value, 'exact', 'time', options)
296
+ html += self.param(key, value, 'gte', 'time', options, False)
297
+ html += self.param(key, value, 'lte', 'time', options, False)
298
+ if value.get('null'):
299
+ html += self.null_param(key, value)
300
+ return html
301
+
271
302
  def foreign_key_param(self, key, value):
272
303
  if value.get('null'):
273
304
  return self.null_param(key, value)
274
305
  return ''
275
306
 
307
+ def many_to_many_param(self, key, value):
308
+ return self.null_param(key, value)
309
+
276
310
  def file_param(self, key, value):
277
311
  return self.null_param(key, value)
278
312
 
@@ -304,7 +338,10 @@ class Filter:
304
338
  fields = [(x.verbose_name, x.name) for x in filter(
305
339
  lambda x:
306
340
  x.name not in filter_exclude
307
- and not isinstance(x, (ManyToOneRel, ManyToManyRel)),
341
+ and not isinstance(x, (
342
+ db_fields.related.ManyToOneRel,
343
+ db_fields.related.ManyToManyRel
344
+ )),
308
345
  self.model._meta.get_fields()
309
346
  )]
310
347
  if hasattr(self.model, 'get_annotations'):
@@ -36,7 +36,7 @@
36
36
  <input id="query-input"
37
37
  type="text"
38
38
  aria-label="Query Input"
39
- class="input"
39
+ class="input is-fullwidth"
40
40
  placeholder="Enter a search term"
41
41
  data-default-term="{{ filter.default_filter_term }}"
42
42
  onkeyup="inputConfirm()"
@@ -44,7 +44,10 @@
44
44
  </p>
45
45
  <p id="query-input-select-control" class="control is-expanded is-hidden">
46
46
  <span class="select is-fullwidth">
47
- <select id="query-input-select" aria-label="query-input-select"></select>
47
+ <select id="query-input-select" aria-label="query-input-select"
48
+ style="border-bottom-left-radius: var(--bulma-radius-medium); border-top-left-radius: var(--bulma-radius-medium);"
49
+ >
50
+ </select>
48
51
  </span>
49
52
  </p>
50
53
  <p id="query-input-apply" class="control" onclick="applyInput()"><button class="button">&#x21D2;</button></p>
@@ -3,6 +3,7 @@
3
3
  <div id="modal-{{ form_id }}" class="modal {% block modal_form_class %}is-active{% endblock %}"
4
4
  hx-swap="outerHTML"
5
5
  hx-target="#modal-{{ form_id }}"
6
+ hx-on:delete="removeModal('modal-{{ form_id }}')"
6
7
  {% if blocking %}
7
8
  hx-indicator="#modal-{{ form_id }}-indicator"
8
9
  hx-disabled-elt="#modal-{{ form_id }}-background"
@@ -1,5 +1,7 @@
1
+ {% load static %}
1
2
  {% load i18n %}
2
3
 
4
+
3
5
  <div class="field select" x-data="{open: false, shouldClose(event) {return event.relatedTarget == $refs.dropdownContent || $refs.dropdownContent.contains(event.relatedTarget);} }"
4
6
  @click.outside="open = false"
5
7
  >
@@ -13,7 +15,7 @@
13
15
  x-on:focusout="open = shouldClose($event)"
14
16
  >
15
17
  <div style="position: relative; z-index: 90;">
16
- <div x-show="open" class="box pt-1" x-ref="dropdownContent" tabindex="-1" x-transition>
18
+ <div x-show="open" x-cloak="" class="box pt-1 mb-2" x-ref="dropdownContent" tabindex="-1" x-transition style="position: absolute">
17
19
  <input id="id_{{ widget.name }}_search" type="search" autocomplete="off" class="input" x-ref="searchInput" aria-label="search"
18
20
  name="{{ widget.search_parameter }}"
19
21
  placeholder="{% translate 'Type to search' %}"
@@ -32,7 +34,7 @@
32
34
  </div>
33
35
  {% endif %}
34
36
  <div id="{{ widget.name }}_dropdown_items" class="hoverable" style="max-height: 200px; width: 100%; overflow-y: auto;">
35
- {% include 'ui/components/model_search_select_options.html' %}
37
+ {% include 'ui/widgets/model_search_select_options.html' %}
36
38
  </div>
37
39
  </div>
38
40
  </div>
@@ -4,7 +4,7 @@
4
4
  @click.outside="open = false" style="width: 100%"
5
5
  >
6
6
  <select multiple id="{{ widget.attrs.id }}" hidden="hidden" name="{{ widget.name }}" aria-label="{{ widget.name }}" x-ref="inputValue">
7
- {% include 'ui/components/model_search_select_multi_selected_options.html' %}
7
+ {% include 'ui/widgets/model_search_select_multi_selected_options.html' %}
8
8
  </select>
9
9
  <div id="{{ widget.attrs.id }}_display" class="input select py-1 pl-1" tabindex="0" x-ref="inputDisplay" aria-label="inputDisplay"
10
10
  style="padding-right: 30px; border-radius: 0; border-top: 0; border-right:0; border-left: 0; min-height: var(--bulma-control-height); height: fit-content; width: 100%"
@@ -20,11 +20,11 @@
20
20
  $event.target.parentElement.remove();
21
21
  }
22
22
  ">
23
- {% include 'ui/components/model_search_select_multi_tags.html' %}
23
+ {% include 'ui/widgets/model_search_select_multi_tags.html' %}
24
24
  </div>
25
25
  </div>
26
26
  <div style="position: relative; z-index: 90;">
27
- <div x-show="open" class="box pt-1" x-ref="dropdownContent" tabindex="-1" x-transition style="position: absolute; min-width: 100%">
27
+ <div x-show="open" class="box pt-1 mb-2" x-ref="dropdownContent" tabindex="-1" x-transition style="position: absolute; min-width: 100%;">
28
28
  <input id="id_{{ widget.name }}_search" type="search" autocomplete="off" class="input" x-ref="searchInput" aria-label="search"
29
29
  name="{{ widget.search_parameter }}"
30
30
  placeholder="{% translate 'Type to search' %}"
@@ -60,7 +60,7 @@
60
60
  else if ($event.keyCode != 9 && $event.keyCode != 13) {$refs.searchInput.focus();}
61
61
  "
62
62
  >
63
- {% include 'ui/components/model_search_select_options.html' %}
63
+ {% include 'ui/widgets/model_search_select_options.html' %}
64
64
  </div>
65
65
  </div>
66
66
  </div>
@@ -120,7 +120,7 @@ def timedelta_cast(td: timedelta, code: str) -> str | None:
120
120
 
121
121
 
122
122
  @register.filter(name='weekday')
123
- def datetime_to_weekday(dt: datetime|date, default=None):
123
+ def datetime_to_weekday(dt: datetime|date, default=None) -> str:
124
124
  if dt is None:
125
125
  return default
126
126
  mapping = {
@@ -1,7 +1,7 @@
1
1
  from django.utils.deprecation import MiddlewareMixin
2
2
  from django.conf import settings
3
3
  from django.http.response import HttpResponseRedirect, HttpResponsePermanentRedirect
4
- from accrete.tenant import set_tenant, set_member, unscoped
4
+ from accrete.tenant import set_tenant, set_member
5
5
 
6
6
  from .models import Tenant
7
7
 
@@ -9,9 +9,7 @@ from .models import Tenant
9
9
  class TenantMiddleware(MiddlewareMixin):
10
10
  @staticmethod
11
11
  def get_tenant_id_from_request(request):
12
- if tenant := request.POST.get('tenant'):
13
- tenant_id = tenant
14
- elif tenant := request.META.get('X_TENANT_ID'):
12
+ if tenant := request.META.get('X-TENANT_ID'):
15
13
  tenant_id = tenant
16
14
  elif tenant_id := request.GET.get('tenant_id'):
17
15
  tenant_id = tenant_id
@@ -35,11 +33,10 @@ class TenantMiddleware(MiddlewareMixin):
35
33
  return
36
34
 
37
35
  if request.user.is_authenticated:
38
- with unscoped():
39
- memberships = request.user.memberships.filter(
40
- is_active=True,
41
- tenant__is_active=True
42
- )
36
+ memberships = request.user.memberships.filter(
37
+ is_active=True,
38
+ tenant__is_active=True
39
+ )
43
40
 
44
41
  if request.user.is_staff:
45
42
  tenant_id = self.get_tenant_id_from_request(request)
@@ -69,6 +66,7 @@ class TenantMiddleware(MiddlewareMixin):
69
66
  @staticmethod
70
67
  def process_response(request, response):
71
68
  if request.tenant:
69
+ response['X-TENANT_ID'] = request.tenant.id
72
70
  response.set_cookie(
73
71
  'tenant_id',
74
72
  request.tenant.pk,
File without changes
@@ -36,7 +36,8 @@ class Unscoped:
36
36
  def __enter__(self):
37
37
  if self.tenant is None:
38
38
  _logger.warning(
39
- 'Entering unscoped context manager with tenant already set to None!'
39
+ 'Entering unscoped context manager with tenant already set to None!',
40
+ stack_info=True
40
41
  )
41
42
  set_tenant(None)
42
43
 
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'accrete'
7
- version = '0.0.100'
7
+ version = '0.0.102'
8
8
  authors = [
9
9
  { name='Benedikt Jilek', email='benedikt.jilek@pm.me' },
10
10
  ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes