WuttaWeb 0.27.1__tar.gz → 0.27.2__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 (248) hide show
  1. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/CHANGELOG.md +12 -0
  2. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/PKG-INFO +2 -2
  3. wuttaweb-0.27.2/README.md +6 -0
  4. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/index.rst +1 -1
  5. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/pyproject.toml +1 -1
  6. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/base.py +10 -3
  7. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/subscribers.py +2 -0
  8. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/grids/table_element.mako +2 -0
  9. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view.mako +11 -0
  10. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view_version.mako +11 -0
  11. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/auth.py +12 -4
  12. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/common.py +3 -1
  13. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/people.py +1 -1
  14. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/test_base.py +16 -1
  15. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_people.py +5 -4
  16. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tox.ini +1 -1
  17. wuttaweb-0.27.1/README.md +0 -6
  18. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.gitignore +0 -0
  19. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.hgignore +0 -0
  20. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.pylintrc +0 -0
  21. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/COPYING.txt +0 -0
  22. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/Makefile +0 -0
  23. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/_static/.keepme +0 -0
  24. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.app.rst +0 -0
  25. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.auth.rst +0 -0
  26. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.cli.rst +0 -0
  27. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.cli.webapp.rst +0 -0
  28. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.conf.rst +0 -0
  29. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.continuum.rst +0 -0
  30. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.rst +0 -0
  31. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.sess.rst +0 -0
  32. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.diffs.rst +0 -0
  33. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.emails.rst +0 -0
  34. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.base.rst +0 -0
  35. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.rst +0 -0
  36. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.schema.rst +0 -0
  37. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.widgets.rst +0 -0
  38. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.base.rst +0 -0
  39. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.filters.rst +0 -0
  40. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.rst +0 -0
  41. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.handler.rst +0 -0
  42. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.helpers.rst +0 -0
  43. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.menus.rst +0 -0
  44. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.progress.rst +0 -0
  45. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.rst +0 -0
  46. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.static.rst +0 -0
  47. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.subscribers.rst +0 -0
  48. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.util.rst +0 -0
  49. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.alembic.rst +0 -0
  50. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.auth.rst +0 -0
  51. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.base.rst +0 -0
  52. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.batch.rst +0 -0
  53. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.common.rst +0 -0
  54. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.email.rst +0 -0
  55. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.essential.rst +0 -0
  56. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.master.rst +0 -0
  57. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.people.rst +0 -0
  58. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.progress.rst +0 -0
  59. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.reports.rst +0 -0
  60. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.roles.rst +0 -0
  61. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.rst +0 -0
  62. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.settings.rst +0 -0
  63. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.tables.rst +0 -0
  64. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.upgrades.rst +0 -0
  65. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.users.rst +0 -0
  66. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.views.rst +0 -0
  67. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/conf.py +0 -0
  68. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/glossary.rst +0 -0
  69. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/make.bat +0 -0
  70. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/cli/builtin.rst +0 -0
  71. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/cli/index.rst +0 -0
  72. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/base.rst +0 -0
  73. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/index.rst +0 -0
  74. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/lookup.rst +0 -0
  75. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/overview.rst +0 -0
  76. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/__init__.py +0 -0
  77. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/_version.py +0 -0
  78. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/app.py +0 -0
  79. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/auth.py +0 -0
  80. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/cli/__init__.py +0 -0
  81. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/cli/webapp.py +0 -0
  82. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/code-templates/new-master-view.mako +0 -0
  83. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/code-templates/new-table.mako +0 -0
  84. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/conf.py +0 -0
  85. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/__init__.py +0 -0
  86. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/continuum.py +0 -0
  87. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/sess.py +0 -0
  88. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/diffs.py +0 -0
  89. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/email-templates/feedback.html.mako +0 -0
  90. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/email-templates/feedback.txt.mako +0 -0
  91. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/emails.py +0 -0
  92. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/__init__.py +0 -0
  93. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/base.py +0 -0
  94. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/schema.py +0 -0
  95. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/widgets.py +0 -0
  96. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/__init__.py +0 -0
  97. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/filters.py +0 -0
  98. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/handler.py +0 -0
  99. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/helpers.py +0 -0
  100. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/menus.py +0 -0
  101. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/progress.py +0 -0
  102. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/__init__.py +0 -0
  103. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/favicon.ico +0 -0
  104. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/logo.png +0 -0
  105. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/testing.png +0 -0
  106. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/dashboard.mako +0 -0
  107. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/configure.mako +0 -0
  108. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/create.mako +0 -0
  109. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/index.mako +0 -0
  110. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/view.mako +0 -0
  111. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
  112. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/appinfo/index.mako +0 -0
  113. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/auth/change_password.mako +0 -0
  114. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/auth/login.mako +0 -0
  115. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/base.mako +0 -0
  116. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/base_meta.mako +0 -0
  117. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/batch/view.mako +0 -0
  118. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/configure.mako +0 -0
  119. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checkbox.pt +0 -0
  120. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checkbox_choice.pt +0 -0
  121. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checked_password.pt +0 -0
  122. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/dateinput.pt +0 -0
  123. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/datetimeinput.pt +0 -0
  124. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/moneyinput.pt +0 -0
  125. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/password.pt +0 -0
  126. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/permissions.pt +0 -0
  127. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/checkbox.pt +0 -0
  128. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/email_recips.pt +0 -0
  129. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/filedownload.pt +0 -0
  130. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/notes.pt +0 -0
  131. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/objectref.pt +0 -0
  132. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/permissions.pt +0 -0
  133. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/rolerefs.pt +0 -0
  134. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/select.pt +0 -0
  135. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/textarea.pt +0 -0
  136. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/textinput.pt +0 -0
  137. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/wutta_checked_password.pt +0 -0
  138. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/diff.mako +0 -0
  139. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/email/settings/view.mako +0 -0
  140. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forbidden.mako +0 -0
  141. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/form.mako +0 -0
  142. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_buttons.mako +0 -0
  143. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_fields.mako +0 -0
  144. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_template.mako +0 -0
  145. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/grids/vue_template.mako +0 -0
  146. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/home.mako +0 -0
  147. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/configure.mako +0 -0
  148. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/create.mako +0 -0
  149. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/create_row.mako +0 -0
  150. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/delete.mako +0 -0
  151. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/edit.mako +0 -0
  152. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/form.mako +0 -0
  153. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/index.mako +0 -0
  154. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view_versions.mako +0 -0
  155. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/notfound.mako +0 -0
  156. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/page.mako +0 -0
  157. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/people/view_profile.mako +0 -0
  158. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/progress.mako +0 -0
  159. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/reports/view.mako +0 -0
  160. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/setup.mako +0 -0
  161. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/tables/app/create.mako +0 -0
  162. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/tables/app/index.mako +0 -0
  163. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/base.mako +0 -0
  164. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/buefy-components.mako +0 -0
  165. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/buefy-plugin.mako +0 -0
  166. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/http-plugin.mako +0 -0
  167. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrade.mako +0 -0
  168. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/configure.mako +0 -0
  169. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/index.mako +0 -0
  170. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/view.mako +0 -0
  171. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/users/view.mako +0 -0
  172. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/configure.mako +0 -0
  173. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/create.mako +0 -0
  174. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/index.mako +0 -0
  175. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/wutta-components.mako +0 -0
  176. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/testing.py +0 -0
  177. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/util.py +0 -0
  178. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/__init__.py +0 -0
  179. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/alembic.py +0 -0
  180. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/base.py +0 -0
  181. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/batch.py +0 -0
  182. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/email.py +0 -0
  183. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/essential.py +0 -0
  184. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/master.py +0 -0
  185. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/progress.py +0 -0
  186. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/reports.py +0 -0
  187. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/roles.py +0 -0
  188. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/settings.py +0 -0
  189. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/tables.py +0 -0
  190. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/upgrades.py +0 -0
  191. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/users.py +0 -0
  192. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/views.py +0 -0
  193. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tasks.py +0 -0
  194. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/__init__.py +0 -0
  195. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/cli/__init__.py +0 -0
  196. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/cli/test_webapp.py +0 -0
  197. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/db/__init__.py +0 -0
  198. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/db/test_continuum.py +0 -0
  199. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/main_template.mako +0 -0
  200. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/main_template_with_fields.mako +0 -0
  201. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_base.py +0 -0
  202. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_schema.py +0 -0
  203. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_widgets.py +0 -0
  204. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/__init__.py +0 -0
  205. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/test_filters.py +0 -0
  206. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
  207. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
  208. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga.js +0 -0
  209. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga_bulma.css +0 -0
  210. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga_bulma.js +0 -0
  211. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_vue.js +0 -0
  212. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_vue_fontawesome.js +0 -0
  213. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/buefy.css +0 -0
  214. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/buefy.js +0 -0
  215. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/fontawesome.js +0 -0
  216. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/vue.js +0 -0
  217. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/vue_resource.js +0 -0
  218. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_app.py +0 -0
  219. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_auth.py +0 -0
  220. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_conf.py +0 -0
  221. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_diffs.py +0 -0
  222. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_emails.py +0 -0
  223. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_handler.py +0 -0
  224. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_helpers.py +0 -0
  225. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_menus.py +0 -0
  226. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_progress.py +0 -0
  227. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_static.py +0 -0
  228. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_subscribers.py +0 -0
  229. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_util.py +0 -0
  230. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/util.py +0 -0
  231. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/__init__.py +0 -0
  232. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test___init__.py +0 -0
  233. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_alembic.py +0 -0
  234. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_auth.py +0 -0
  235. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_base.py +0 -0
  236. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_batch.py +0 -0
  237. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_common.py +0 -0
  238. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_email.py +0 -0
  239. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_essential.py +0 -0
  240. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_master.py +0 -0
  241. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_progress.py +0 -0
  242. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_reports.py +0 -0
  243. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_roles.py +0 -0
  244. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_settings.py +0 -0
  245. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_tables.py +0 -0
  246. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_upgrades.py +0 -0
  247. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_users.py +0 -0
  248. {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_views.py +0 -0
@@ -5,6 +5,18 @@ All notable changes to wuttaweb will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## v0.27.2 (2026-02-04)
9
+
10
+ ### Fix
11
+
12
+ - fallback to dict logic for grid render date/time
13
+ - add dedicated `authenticate_user()` method for auth view
14
+ - increase default width for read-only form views
15
+ - add `hoverable` and `narrowed` for all `<b-table>` elements
16
+ - show users grid when deleting a Person
17
+ - add `model` and `enum` to global template rendering context
18
+ - ensure grid action icon+label do not wrap
19
+
8
20
  ## v0.27.1 (2026-01-03)
9
21
 
10
22
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: WuttaWeb
3
- Version: 0.27.1
3
+ Version: 0.27.2
4
4
  Summary: Web App for Wutta Framework
5
5
  Project-URL: Homepage, https://wuttaproject.org/
6
6
  Project-URL: Repository, https://forgejo.wuttaproject.org/wutta/wuttaweb
@@ -61,4 +61,4 @@ Description-Content-Type: text/markdown
61
61
 
62
62
  Web app for Wutta Framework
63
63
 
64
- See docs at https://rattailproject.org/docs/wuttaweb/
64
+ See docs at https://docs.wuttaproject.org/wuttaweb/
@@ -0,0 +1,6 @@
1
+
2
+ # WuttaWeb
3
+
4
+ Web app for Wutta Framework
5
+
6
+ See docs at https://docs.wuttaproject.org/wuttaweb/
@@ -9,7 +9,7 @@ It uses traditional server-side rendering with VueJS on the front-end.
9
9
  Good documentation and 100% `test coverage`_ are priorities for this
10
10
  project.
11
11
 
12
- .. _test coverage: https://buildbot.rattailproject.org/coverage/wuttaweb/
12
+ .. _test coverage: https://buildbot.wuttaproject.org/coverage/wuttaweb/
13
13
 
14
14
  .. image:: https://img.shields.io/badge/linting-pylint-yellowgreen
15
15
  :target: https://github.com/pylint-dev/pylint
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "WuttaWeb"
9
- version = "0.27.1"
9
+ version = "0.27.2"
10
10
  description = "Web App for Wutta Framework"
11
11
  readme = "README.md"
12
12
  authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]
@@ -2030,7 +2030,10 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
2030
2030
 
2031
2031
  grid.set_renderer('foo', 'date')
2032
2032
  """
2033
- dt = getattr(obj, key)
2033
+ try:
2034
+ dt = getattr(obj, key)
2035
+ except AttributeError:
2036
+ dt = obj[key]
2034
2037
  return self.app.render_date(dt)
2035
2038
 
2036
2039
  def render_datetime(self, obj, key, value): # pylint: disable=unused-argument
@@ -2046,7 +2049,10 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
2046
2049
 
2047
2050
  grid.set_renderer('foo', 'datetime')
2048
2051
  """
2049
- dt = getattr(obj, key)
2052
+ try:
2053
+ dt = getattr(obj, key)
2054
+ except AttributeError:
2055
+ dt = obj[key]
2050
2056
  return self.app.render_datetime(dt, html=True)
2051
2057
 
2052
2058
  def render_enum(self, obj, key, value, enum=None):
@@ -2604,9 +2610,10 @@ class GridAction: # pylint: disable=too-many-instance-attributes
2604
2610
  """
2605
2611
  html = [
2606
2612
  self.render_icon(),
2613
+ HTML.literal("&nbsp;"),
2607
2614
  self.render_label(),
2608
2615
  ]
2609
- return HTML.literal(" ").join(html)
2616
+ return HTML.tag("span", c=html, style="white-space: nowrap;")
2610
2617
 
2611
2618
  def render_icon(self):
2612
2619
  """
@@ -402,6 +402,8 @@ def before_render(event):
402
402
  context = event
403
403
  context["config"] = config
404
404
  context["app"] = app
405
+ context["model"] = app.model
406
+ context["enum"] = app.enum
405
407
  context["web"] = web
406
408
  context["h"] = helpers
407
409
  context["url"] = request.route_url
@@ -16,6 +16,8 @@
16
16
  :default-sort="${grid.get_vue_first_sorter() or 'null'}"
17
17
  % endif
18
18
 
19
+ hoverable
20
+ narrowed
19
21
  icon-pack="fas">
20
22
 
21
23
  % for column in grid.get_vue_columns():
@@ -5,6 +5,17 @@
5
5
 
6
6
  <%def name="content_title()">${instance_title}</%def>
7
7
 
8
+ <%def name="extra_styles()">
9
+ ${parent.extra_styles()}
10
+ <style>
11
+
12
+ .wutta-form-wrapper {
13
+ width: 75%;
14
+ }
15
+
16
+ </style>
17
+ </%def>
18
+
8
19
  <%def name="render_instance_header_title_extras()">
9
20
  ${parent.render_instance_header_title_extras()}
10
21
  % if master.should_expose_versions():
@@ -5,6 +5,17 @@
5
5
 
6
6
  <%def name="content_title()">changes @ TXN ${transaction.id}</%def>
7
7
 
8
+ <%def name="extra_styles()">
9
+ ${parent.extra_styles()}
10
+ <style>
11
+
12
+ .wutta-form-wrapper {
13
+ width: 75%;
14
+ }
15
+
16
+ </style>
17
+ </%def>
18
+
8
19
  <%def name="page_content()">
9
20
  <div class="wutta-form-wrapper">
10
21
 
@@ -2,7 +2,7 @@
2
2
  ################################################################################
3
3
  #
4
4
  # wuttaweb -- Web App for Wutta Framework
5
- # Copyright © 2024-2025 Lance Edgar
5
+ # Copyright © 2024-2026 Lance Edgar
6
6
  #
7
7
  # This file is part of Wutta Framework.
8
8
  #
@@ -47,14 +47,15 @@ class AuthView(View):
47
47
  * route: ``login``
48
48
  * template: ``/auth/login.mako``
49
49
  """
50
+ # pylint: disable=duplicate-code
50
51
  model = self.app.model
51
52
  session = session or Session()
52
- auth = self.app.get_auth_handler()
53
53
 
54
54
  # nb. redirect to /setup if no users exist
55
55
  user = session.query(model.User).first()
56
56
  if not user:
57
57
  return self.redirect(self.request.route_url("setup"))
58
+ # pylint: enable=duplicate-code
58
59
 
59
60
  referrer = self.request.get_referrer()
60
61
 
@@ -79,8 +80,9 @@ class AuthView(View):
79
80
  if data:
80
81
 
81
82
  # truly validate user credentials
82
- user = auth.authenticate_user(session, data["username"], data["password"])
83
- if user:
83
+ if user := self.authenticate_user(
84
+ session, data["username"], data["password"]
85
+ ):
84
86
 
85
87
  # okay now they're truly logged in
86
88
  headers = login_user(self.request, user)
@@ -95,6 +97,12 @@ class AuthView(View):
95
97
  # 'referrer': referrer,
96
98
  }
97
99
 
100
+ def authenticate_user(
101
+ self, session, username, password
102
+ ): # pylint: disable=missing-function-docstring
103
+ auth = self.app.get_auth_handler()
104
+ return auth.authenticate_user(session, username, password)
105
+
98
106
  def login_make_schema(self): # pylint: disable=empty-docstring
99
107
  """ """
100
108
  schema = colander.Schema()
@@ -2,7 +2,7 @@
2
2
  ################################################################################
3
3
  #
4
4
  # wuttaweb -- Web App for Wutta Framework
5
- # Copyright © 2024-2025 Lance Edgar
5
+ # Copyright © 2024-2026 Lance Edgar
6
6
  #
7
7
  # This file is part of Wutta Framework.
8
8
  #
@@ -51,6 +51,7 @@ class CommonView(View):
51
51
  This is normally the view shown when a user navigates to the
52
52
  root URL for the web app.
53
53
  """
54
+ # pylint: disable=duplicate-code
54
55
  model = self.app.model
55
56
  session = session or Session()
56
57
 
@@ -58,6 +59,7 @@ class CommonView(View):
58
59
  user = session.query(model.User).first()
59
60
  if not user:
60
61
  return self.redirect(self.request.route_url("setup"))
62
+ # pylint: enable=duplicate-code
61
63
 
62
64
  # maybe auto-redirect anons to login
63
65
  if not self.request.user:
@@ -98,7 +98,7 @@ class PersonView(MasterView): # pylint: disable=abstract-method
98
98
  # users
99
99
  if self.creating or self.editing:
100
100
  f.remove("users")
101
- elif self.viewing:
101
+ else:
102
102
  f.set_grid("users", self.make_users_grid(person))
103
103
 
104
104
  def make_users_grid(self, person):
@@ -1682,6 +1682,12 @@ class TestGrid(WebTestCase):
1682
1682
  result = grid.render_date(obj, "dt", str(dt))
1683
1683
  self.assertEqual(result, "2025-01-13")
1684
1684
 
1685
+ # object as dict
1686
+ dt = datetime.date(2025, 1, 13)
1687
+ obj = {"dt": dt}
1688
+ result = grid.render_date(obj, "dt", str(dt))
1689
+ self.assertEqual(result, "2025-01-13")
1690
+
1685
1691
  def test_render_datetime(self):
1686
1692
  tzlocal = get_timezone_by_name("America/Los_Angeles")
1687
1693
  with patch.object(self.app, "get_timezone", return_value=tzlocal):
@@ -1699,6 +1705,13 @@ class TestGrid(WebTestCase):
1699
1705
  self.assertTrue(result.startswith('<span title="'))
1700
1706
  self.assertIn("2024-12-12 05:44-0800", result)
1701
1707
 
1708
+ # object as dict
1709
+ dt = datetime.datetime(2024, 12, 12, 13, 44)
1710
+ obj = {"dt": dt}
1711
+ result = grid.render_datetime(obj, "dt", str(dt))
1712
+ self.assertTrue(result.startswith('<span title="'))
1713
+ self.assertIn("2024-12-12 05:44-0800", result)
1714
+
1702
1715
  def test_render_vue_tag(self):
1703
1716
  grid = self.make_grid(columns=["foo", "bar"])
1704
1717
  html = grid.render_vue_tag()
@@ -2051,7 +2064,9 @@ class TestGridAction(TestCase):
2051
2064
  action, render_icon=lambda: "ICON", render_label=lambda: "LABEL"
2052
2065
  ):
2053
2066
  html = action.render_icon_and_label()
2054
- self.assertEqual("ICON LABEL", html)
2067
+ self.assertTrue(html.startswith("<span "))
2068
+ self.assertIn("ICON", html)
2069
+ self.assertIn("LABEL", html)
2055
2070
 
2056
2071
  def test_get_url(self):
2057
2072
  obj = {"foo": "bar"}
@@ -87,10 +87,11 @@ class TestPersonView(WebTestCase):
87
87
  view = self.make_view()
88
88
 
89
89
  # creating
90
- form = view.make_model_form()
91
- form.validated = {"first_name": "Barney", "last_name": "Rubble"}
92
- person = view.objectify(form)
93
- self.assertEqual(person.full_name, "Barney Rubble")
90
+ with patch.object(view, "creating", new=True):
91
+ form = view.make_model_form()
92
+ form.validated = {"first_name": "Barney", "last_name": "Rubble"}
93
+ person = view.objectify(form)
94
+ self.assertEqual(person.full_name, "Barney Rubble")
94
95
 
95
96
  # editing
96
97
  form = view.make_model_form(model_instance=person)
@@ -23,7 +23,7 @@ commands = pylint wuttaweb
23
23
  basepython = python3.11
24
24
  commands =
25
25
  pytest -m 'not versioned and not functional' --cov=wuttaweb
26
- pytest -m 'versioned' --cov-append --cov=wuttaweb --cov-report=html
26
+ pytest -m 'versioned' --cov-append --cov=wuttaweb
27
27
  pytest -m 'functional' --cov-append --cov=wuttaweb --cov-report=html --cov-fail-under=100
28
28
 
29
29
  [testenv:docs]
wuttaweb-0.27.1/README.md DELETED
@@ -1,6 +0,0 @@
1
-
2
- # WuttaWeb
3
-
4
- Web app for Wutta Framework
5
-
6
- See docs at https://rattailproject.org/docs/wuttaweb/
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