accrete 0.0.37__tar.gz → 0.0.38__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 (198) hide show
  1. {accrete-0.0.37 → accrete-0.0.38}/PKG-INFO +1 -1
  2. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/context.py +33 -13
  3. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/filter.py +1 -1
  4. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templatetags/accrete_ui.py +8 -15
  5. {accrete-0.0.37 → accrete-0.0.38}/accrete/querystring.py +14 -17
  6. accrete-0.0.38/accrete/utils/models.py +19 -0
  7. {accrete-0.0.37 → accrete-0.0.38}/pyproject.toml +1 -1
  8. accrete-0.0.37/accrete/utils/models.py +0 -14
  9. {accrete-0.0.37 → accrete-0.0.38}/.gitignore +0 -0
  10. {accrete-0.0.37 → accrete-0.0.38}/LICENSE +0 -0
  11. {accrete-0.0.37 → accrete-0.0.38}/README.md +0 -0
  12. {accrete-0.0.37 → accrete-0.0.38}/accrete/__init__.py +0 -0
  13. {accrete-0.0.37 → accrete-0.0.38}/accrete/admin.py +0 -0
  14. {accrete-0.0.37 → accrete-0.0.38}/accrete/annotation.py +0 -0
  15. {accrete-0.0.37 → accrete-0.0.38}/accrete/apps.py +0 -0
  16. {accrete-0.0.37 → accrete-0.0.38}/accrete/config.py +0 -0
  17. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/__init__.py +0 -0
  18. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/__init__.py +0 -0
  19. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/admin.py +0 -0
  20. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/apps.py +0 -0
  21. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/forms.py +0 -0
  22. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/migrations/0001_initial.py +0 -0
  23. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py +0 -0
  24. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/migrations/__init__.py +0 -0
  25. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/models.py +0 -0
  26. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/queries.py +0 -0
  27. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/tests.py +0 -0
  28. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/sequence/views.py +0 -0
  29. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/__init__.py +0 -0
  30. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/admin.py +0 -0
  31. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/apps.py +0 -0
  32. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/forms.py +0 -0
  33. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/migrations/0001_initial.py +0 -0
  34. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/migrations/__init__.py +0 -0
  35. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/models.py +0 -0
  36. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/tasks.py +0 -0
  37. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/tests.py +0 -0
  38. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/system_mail/views.py +0 -0
  39. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/__init__.py +0 -0
  40. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/admin.py +0 -0
  41. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/apps.py +0 -0
  42. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/elements.py +0 -0
  43. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/migrations/__init__.py +0 -0
  44. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/LICENSE +0 -0
  45. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/README.md +0 -0
  46. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/bulma.sass +0 -0
  47. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma-rtl.css +0 -0
  48. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma-rtl.css.map +0 -0
  49. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma-rtl.min.css +0 -0
  50. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma.css +0 -0
  51. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma.css.map +0 -0
  52. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/css/bulma.min.css +0 -0
  53. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/package.json +0 -0
  54. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/base/_all.sass +0 -0
  55. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/base/animations.sass +0 -0
  56. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/base/generic.sass +0 -0
  57. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/base/helpers.sass +0 -0
  58. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/base/minireset.sass +0 -0
  59. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/_all.sass +0 -0
  60. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/breadcrumb.sass +0 -0
  61. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/card.sass +0 -0
  62. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/dropdown.sass +0 -0
  63. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/level.sass +0 -0
  64. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/media.sass +0 -0
  65. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/menu.sass +0 -0
  66. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/message.sass +0 -0
  67. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/modal.sass +0 -0
  68. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/navbar.sass +0 -0
  69. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/pagination.sass +0 -0
  70. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/panel.sass +0 -0
  71. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/components/tabs.sass +0 -0
  72. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/_all.sass +0 -0
  73. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/box.sass +0 -0
  74. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/button.sass +0 -0
  75. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/container.sass +0 -0
  76. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/content.sass +0 -0
  77. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/form.sass +0 -0
  78. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/icon.sass +0 -0
  79. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/image.sass +0 -0
  80. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/notification.sass +0 -0
  81. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/other.sass +0 -0
  82. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/progress.sass +0 -0
  83. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/table.sass +0 -0
  84. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/tag.sass +0 -0
  85. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/elements/title.sass +0 -0
  86. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/_all.sass +0 -0
  87. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/checkbox-radio.sass +0 -0
  88. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/file.sass +0 -0
  89. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/input-textarea.sass +0 -0
  90. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/select.sass +0 -0
  91. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/shared.sass +0 -0
  92. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/form/tools.sass +0 -0
  93. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/grid/_all.sass +0 -0
  94. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/grid/columns.sass +0 -0
  95. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/grid/tiles.sass +0 -0
  96. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/_all.sass +0 -0
  97. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/color.sass +0 -0
  98. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/flexbox.sass +0 -0
  99. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/float.sass +0 -0
  100. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/other.sass +0 -0
  101. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/overflow.sass +0 -0
  102. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/position.sass +0 -0
  103. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/spacing.sass +0 -0
  104. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/typography.sass +0 -0
  105. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/helpers/visibility.sass +0 -0
  106. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/layout/_all.sass +0 -0
  107. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/layout/footer.sass +0 -0
  108. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/layout/hero.sass +0 -0
  109. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/layout/section.sass +0 -0
  110. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/_all.sass +0 -0
  111. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/animations.sass +0 -0
  112. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/controls.sass +0 -0
  113. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/derived-variables.sass +0 -0
  114. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/extends.sass +0 -0
  115. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/functions.sass +0 -0
  116. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/initial-variables.sass +0 -0
  117. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/bulma/sass/utilities/mixins.sass +0 -0
  118. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/css/accrete.css +0 -0
  119. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/css/accrete.css.bak +0 -0
  120. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/css/accrete.css.map +0 -0
  121. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/css/accrete.scss +0 -0
  122. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/css/icons.css +0 -0
  123. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/icons/Logo.svg +0 -0
  124. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/icons/accrete.svg +0 -0
  125. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/js/filter.js +0 -0
  126. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/js/htmx.min.js +0 -0
  127. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/static/js/list.js +0 -0
  128. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html +0 -0
  129. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/email.html +0 -0
  130. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/file.html +0 -0
  131. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/input.html +0 -0
  132. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/select.html +0 -0
  133. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/text.html +0 -0
  134. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html +0 -0
  135. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/detail.html +0 -0
  136. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/form.html +0 -0
  137. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/layout.html +0 -0
  138. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/list.html +0 -0
  139. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/filter.html +0 -0
  140. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/form_errors.html +0 -0
  141. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/form_modal.html +0 -0
  142. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/header.html +0 -0
  143. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/onchange_form.html +0 -0
  144. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/pagination_detail.html +0 -0
  145. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/pagination_list.html +0 -0
  146. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/table_field.html +0 -0
  147. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/table_field_float.html +0 -0
  148. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/table_field_monetary.html +0 -0
  149. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/partials/table_field_string.html +0 -0
  150. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templates/ui/table.html +0 -0
  151. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/templatetags/__init__.py +0 -0
  152. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/tests.py +0 -0
  153. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/urls.py +0 -0
  154. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/ui/views.py +0 -0
  155. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/__init__.py +0 -0
  156. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/admin.py +0 -0
  157. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/apps.py +0 -0
  158. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/forms.py +0 -0
  159. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/locale/de/LC_MESSAGES/django.mo +0 -0
  160. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/locale/de/LC_MESSAGES/django.po +0 -0
  161. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/middleware.py +0 -0
  162. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/migrations/0001_initial.py +0 -0
  163. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/migrations/__init__.py +0 -0
  164. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/models.py +0 -0
  165. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/accrete_navbar_end_dropdown.html +0 -0
  166. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/change_email.html +0 -0
  167. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/change_password.html +0 -0
  168. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/login.html +0 -0
  169. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/user_detail.html +0 -0
  170. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/templates/user/user_form.html +0 -0
  171. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/tests.py +0 -0
  172. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/urls.py +0 -0
  173. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user/views.py +0 -0
  174. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/__init__.py +0 -0
  175. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/admin.py +0 -0
  176. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/apps.py +0 -0
  177. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/config.py +0 -0
  178. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/forms.py +0 -0
  179. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/migrations/0001_initial.py +0 -0
  180. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/migrations/__init__.py +0 -0
  181. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/models.py +0 -0
  182. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/templates/user_registration/mail_templates/confirmation_mail.html +0 -0
  183. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/templates/user_registration/registration.html +0 -0
  184. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/tests.py +0 -0
  185. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/urls.py +0 -0
  186. {accrete-0.0.37 → accrete-0.0.38}/accrete/contrib/user_registration/views.py +0 -0
  187. {accrete-0.0.37 → accrete-0.0.38}/accrete/forms.py +0 -0
  188. {accrete-0.0.37 → accrete-0.0.38}/accrete/middleware.py +0 -0
  189. {accrete-0.0.37 → accrete-0.0.38}/accrete/migrations/0001_initial.py +0 -0
  190. {accrete-0.0.37 → accrete-0.0.38}/accrete/migrations/0002_initial.py +0 -0
  191. {accrete-0.0.37 → accrete-0.0.38}/accrete/migrations/__init__.py +0 -0
  192. {accrete-0.0.37 → accrete-0.0.38}/accrete/models.py +0 -0
  193. {accrete-0.0.37 → accrete-0.0.38}/accrete/queries.py +0 -0
  194. {accrete-0.0.37 → accrete-0.0.38}/accrete/tenant.py +0 -0
  195. {accrete-0.0.37 → accrete-0.0.38}/accrete/tests.py +0 -0
  196. {accrete-0.0.37 → accrete-0.0.38}/accrete/utils/__init__.py +0 -0
  197. {accrete-0.0.37 → accrete-0.0.38}/accrete/utils/dates.py +0 -0
  198. {accrete-0.0.37 → accrete-0.0.38}/accrete/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: accrete
3
- Version: 0.0.37
3
+ Version: 0.0.38
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
@@ -2,14 +2,18 @@ import logging
2
2
  from dataclasses import dataclass, field
3
3
  from typing import TypedDict
4
4
  from django.utils.translation import gettext_lazy as _t
5
+ from django.db import models
5
6
  from django.db.models import Model, QuerySet
6
7
  from django.core.paginator import Paginator
7
8
  from django.core import paginator
8
9
  from django.forms import Form, ModelForm
9
10
  from accrete.utils.models import get_related_model
10
- from .elements import ClientAction, BreadCrumb, TableField, TableFieldType
11
+ from accrete.annotation import Annotation
12
+ from .elements import (
13
+ ClientAction, BreadCrumb, TableField, TableFieldType, TableFieldAlignment
14
+ )
11
15
  from .filter import Filter
12
- from ...annotation import Annotation
16
+
13
17
 
14
18
  _logger = logging.getLogger(__name__)
15
19
 
@@ -180,34 +184,50 @@ def get_table_fields(
180
184
  model: type[Model],
181
185
  field_definition: dict[str | TableField] = None
182
186
  ) -> list[TableField]:
183
- print(fields, model, field_definition)
184
187
 
185
- if field_definition is None:
186
- field_definition = {}
188
+ def get_alignment(field_attr):
189
+ number_field_types = (
190
+ models.DecimalField, models.IntegerField, models.FloatField
191
+ )
192
+ if (
193
+ isinstance(field_attr, number_field_types)
194
+ or (
195
+ isinstance(field_attr, Annotation)
196
+ and field_attr.field in number_field_types
197
+ )):
198
+ return TableFieldAlignment.RIGHT
199
+ return TableFieldAlignment.LEFT
200
+
187
201
 
188
202
  def get_field_definition(f_name: str) -> TableField:
189
203
  if definition := field_definition.get(f_name):
190
204
  return definition
191
- if len(f_name.split('__')) == 1:
205
+ parts = f_name.split('__')
206
+ if len(parts) == 1:
192
207
  rel_model = model
208
+ names = [rel_model._meta.verbose_name]
193
209
  else:
194
- rel_model = get_related_model(model, f_name)
195
- print(rel_model)
210
+ rel_model, names = get_related_model(model, f_name)
196
211
  try:
197
- return rel_model.table_field_definition[f_name]
212
+ return rel_model.table_field_definition[parts[-1]]
198
213
  except (AttributeError, KeyError):
199
- attr = getattr(rel_model, f_name)
214
+ attr = getattr(rel_model, parts[-1])
200
215
  if isinstance(attr, Annotation):
201
- attr = attr
216
+ pass
202
217
  elif hasattr(attr, 'field'):
203
218
  attr = attr.field
219
+ names.append(attr.verbose_name)
204
220
  return TableField(
205
- label=str(attr.verbose_name),
221
+ label=' / '.join([str(name) for name in names[1:]]),
206
222
  name=f_name,
207
223
  header_info=str(attr.help_text),
208
- truncate_after=50
224
+ truncate_after=50,
225
+ alignment=get_alignment(attr)
209
226
  )
210
227
 
228
+ if field_definition is None:
229
+ field_definition = {}
230
+
211
231
  table_fields = []
212
232
  for field_name in fields:
213
233
  try:
@@ -69,7 +69,7 @@ class Filter:
69
69
  except AttributeError:
70
70
  label = field.related_model._meta.verbose_name
71
71
  res.append({
72
- 'name': field.name,
72
+ 'name': f'{rel_path}',
73
73
  'label': str(label),
74
74
  'type': field.get_internal_type(),
75
75
  'null': field.null,
@@ -28,27 +28,20 @@ def combine_templates(template_name, request=None):
28
28
 
29
29
  @register.filter(name='get_attr')
30
30
  def get_attr_from_string(param: object, value: str):
31
- try:
32
- attr = getattr(param, value)
33
- except AttributeError:
34
- _logger.exception(f'Object {param} has no attribute {value}')
35
- return ''
31
+ attr_name = value.split('__')
32
+ attr = param
33
+ for name in attr_name:
34
+ try:
35
+ attr = getattr(attr, name)
36
+ except AttributeError:
37
+ _logger.exception(f'Object {attr} has no attribute {name}')
38
+ return ''
36
39
  if callable(attr):
37
40
  return attr()
38
41
  else:
39
42
  return attr
40
43
 
41
44
 
42
- def get_field_value(param: type[Model], value: str):
43
- model = param
44
- vals = value.split('__')
45
- if len(vals) == 1:
46
- return get_attr_from_string(model, vals[0])
47
- for val in value.split('__'):
48
- pass
49
-
50
-
51
-
52
45
  @register.filter(name='message_class')
53
46
  def message_class(param):
54
47
  if param.level == 25:
@@ -2,6 +2,8 @@ import logging
2
2
  import json
3
3
  import operator
4
4
  from django.db.models import Model, Q, QuerySet
5
+ from accrete.utils.models import get_related_model
6
+ from accrete.annotation import Annotation
5
7
 
6
8
  _logger = logging.getLogger(__name__)
7
9
 
@@ -34,28 +36,23 @@ def parse_querystring(model: type[Model], query_string: str) -> Q:
34
36
  expression = Q(**{term: value})
35
37
  return ~expression if invert else expression
36
38
 
37
- rel_path = parts[0].rstrip('__')
38
- term = parts[1]
39
- rel_model = get_related_model(rel_path) if rel_path else model
40
- objects = rel_model.objects.filter(Q(**{term: value}))
39
+ rel_path = '__'.join(parts[:-2])
40
+ related_model, x = get_related_model(model, rel_path)
41
+ attr = getattr(related_model, parts[-2])
42
+ if not isinstance(attr, Annotation):
43
+ expression = Q(**{term: value})
44
+ return ~expression if invert else expression
45
+
46
+ objects = related_model.objects.filter(Q(**{
47
+ '__'.join(parts[len(x):]): value
48
+ }))
41
49
  expression = Q(**{
42
- f'{rel_path}{"__" if rel_path else ""}id__in': objects.values_list('id', flat=True)
50
+ f'{rel_path}{"__" if rel_path else ""}id__in':
51
+ objects.values_list('id', flat=True)
43
52
  })
44
53
 
45
54
  return ~expression if invert else expression
46
55
 
47
- def get_related_model(rel_path: str):
48
- related_model = model
49
- for part in rel_path.split('__'):
50
- try:
51
- related_model = related_model._meta.fields_map[part].related_model
52
- except (AttributeError, KeyError):
53
- try:
54
- related_model = getattr(related_model, part).field.related_model
55
- except AttributeError:
56
- break
57
- return related_model
58
-
59
56
  def parse_query_block(sub_item) -> Q:
60
57
  op = ops['&']
61
58
  parsed_query = Q()
@@ -0,0 +1,19 @@
1
+ from django.db.models import Model
2
+
3
+
4
+ def get_related_model(model: type[Model], rel_path: str) -> tuple[Model, list[str]]:
5
+ names = []
6
+ related_model = model
7
+ for part in rel_path.split('__'):
8
+ names.append(str(related_model._meta.verbose_name))
9
+ try:
10
+ next_model = related_model._meta.fields_map[part].related_model
11
+ related_model = next_model
12
+ except (AttributeError, KeyError):
13
+ try:
14
+ next_model = getattr(related_model, part).field.related_model
15
+ if next_model is not None:
16
+ related_model = next_model
17
+ except AttributeError:
18
+ break
19
+ return related_model, names
@@ -4,7 +4,7 @@ build-backend = 'hatchling.build'
4
4
 
5
5
  [project]
6
6
  name = 'accrete'
7
- version = '0.0.37'
7
+ version = '0.0.38'
8
8
  authors = [
9
9
  { name='Benedikt Jilek', email='benedikt.jilek@pm.me' },
10
10
  ]
@@ -1,14 +0,0 @@
1
- from django.db.models import Model
2
-
3
-
4
- def get_related_model(model: type[Model], rel_path: str):
5
- related_model = model
6
- for part in rel_path.split('__'):
7
- try:
8
- related_model = related_model._meta.fields_map[part].related_model
9
- except (AttributeError, KeyError):
10
- try:
11
- related_model = getattr(related_model, part).field.related_model
12
- except AttributeError:
13
- break
14
- return related_model
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