WuttaWeb 0.21.1__tar.gz → 0.21.3__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 (205) hide show
  1. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/CHANGELOG.md +14 -0
  2. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/PKG-INFO +1 -1
  3. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/conf.py +3 -3
  4. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/pyproject.toml +1 -1
  5. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/base.py +49 -0
  6. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/form.mako +5 -1
  7. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/grids/table_element.mako +17 -12
  8. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/grids/vue_template.mako +15 -13
  9. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/grids/test_base.py +20 -0
  10. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/.gitignore +0 -0
  11. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/COPYING.txt +0 -0
  12. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/README.md +0 -0
  13. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/Makefile +0 -0
  14. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/_static/.keepme +0 -0
  15. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.app.rst +0 -0
  16. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.auth.rst +0 -0
  17. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.cli.rst +0 -0
  18. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.cli.webapp.rst +0 -0
  19. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.conf.rst +0 -0
  20. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.continuum.rst +0 -0
  21. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.rst +0 -0
  22. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.sess.rst +0 -0
  23. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.emails.rst +0 -0
  24. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.base.rst +0 -0
  25. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.rst +0 -0
  26. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.schema.rst +0 -0
  27. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.widgets.rst +0 -0
  28. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.base.rst +0 -0
  29. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.filters.rst +0 -0
  30. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.rst +0 -0
  31. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.handler.rst +0 -0
  32. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.helpers.rst +0 -0
  33. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.menus.rst +0 -0
  34. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.progress.rst +0 -0
  35. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.rst +0 -0
  36. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.static.rst +0 -0
  37. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.subscribers.rst +0 -0
  38. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.util.rst +0 -0
  39. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.auth.rst +0 -0
  40. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.base.rst +0 -0
  41. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.batch.rst +0 -0
  42. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.common.rst +0 -0
  43. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.email.rst +0 -0
  44. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.essential.rst +0 -0
  45. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.master.rst +0 -0
  46. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.people.rst +0 -0
  47. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.progress.rst +0 -0
  48. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.reports.rst +0 -0
  49. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.roles.rst +0 -0
  50. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.rst +0 -0
  51. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.settings.rst +0 -0
  52. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.upgrades.rst +0 -0
  53. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.users.rst +0 -0
  54. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/glossary.rst +0 -0
  55. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/index.rst +0 -0
  56. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/make.bat +0 -0
  57. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/cli/builtin.rst +0 -0
  58. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/cli/index.rst +0 -0
  59. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/base.rst +0 -0
  60. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/index.rst +0 -0
  61. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/lookup.rst +0 -0
  62. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/overview.rst +0 -0
  63. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/__init__.py +0 -0
  64. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/_version.py +0 -0
  65. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/app.py +0 -0
  66. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/auth.py +0 -0
  67. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/cli/__init__.py +0 -0
  68. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/cli/webapp.py +0 -0
  69. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/conf.py +0 -0
  70. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/__init__.py +0 -0
  71. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/continuum.py +0 -0
  72. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/sess.py +0 -0
  73. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/email-templates/feedback.html.mako +0 -0
  74. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/email-templates/feedback.txt.mako +0 -0
  75. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/emails.py +0 -0
  76. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/__init__.py +0 -0
  77. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/base.py +0 -0
  78. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/schema.py +0 -0
  79. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/widgets.py +0 -0
  80. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/__init__.py +0 -0
  81. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/filters.py +0 -0
  82. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/handler.py +0 -0
  83. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/helpers.py +0 -0
  84. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/menus.py +0 -0
  85. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/progress.py +0 -0
  86. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/__init__.py +0 -0
  87. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/favicon.ico +0 -0
  88. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/logo.png +0 -0
  89. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/testing.png +0 -0
  90. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/subscribers.py +0 -0
  91. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
  92. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/appinfo/index.mako +0 -0
  93. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/auth/change_password.mako +0 -0
  94. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/auth/login.mako +0 -0
  95. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/base.mako +0 -0
  96. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/base_meta.mako +0 -0
  97. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/batch/view.mako +0 -0
  98. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/configure.mako +0 -0
  99. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checkbox.pt +0 -0
  100. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checkbox_choice.pt +0 -0
  101. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checked_password.pt +0 -0
  102. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/dateinput.pt +0 -0
  103. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/datetimeinput.pt +0 -0
  104. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/moneyinput.pt +0 -0
  105. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/password.pt +0 -0
  106. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/permissions.pt +0 -0
  107. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/checkbox.pt +0 -0
  108. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/email_recips.pt +0 -0
  109. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/filedownload.pt +0 -0
  110. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/notes.pt +0 -0
  111. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/objectref.pt +0 -0
  112. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/permissions.pt +0 -0
  113. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/rolerefs.pt +0 -0
  114. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/select.pt +0 -0
  115. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/textarea.pt +0 -0
  116. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/textinput.pt +0 -0
  117. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/email/settings/view.mako +0 -0
  118. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/forbidden.mako +0 -0
  119. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/forms/vue_template.mako +0 -0
  120. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/home.mako +0 -0
  121. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/configure.mako +0 -0
  122. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/create.mako +0 -0
  123. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/delete.mako +0 -0
  124. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/edit.mako +0 -0
  125. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/form.mako +0 -0
  126. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/index.mako +0 -0
  127. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/view.mako +0 -0
  128. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/notfound.mako +0 -0
  129. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/page.mako +0 -0
  130. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/people/view_profile.mako +0 -0
  131. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/progress.mako +0 -0
  132. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/reports/view.mako +0 -0
  133. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/setup.mako +0 -0
  134. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrade.mako +0 -0
  135. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrades/configure.mako +0 -0
  136. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrades/view.mako +0 -0
  137. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/wutta-components.mako +0 -0
  138. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/testing.py +0 -0
  139. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/util.py +0 -0
  140. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/__init__.py +0 -0
  141. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/auth.py +0 -0
  142. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/base.py +0 -0
  143. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/batch.py +0 -0
  144. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/common.py +0 -0
  145. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/email.py +0 -0
  146. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/essential.py +0 -0
  147. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/master.py +0 -0
  148. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/people.py +0 -0
  149. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/progress.py +0 -0
  150. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/reports.py +0 -0
  151. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/roles.py +0 -0
  152. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/settings.py +0 -0
  153. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/upgrades.py +0 -0
  154. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/users.py +0 -0
  155. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tasks.py +0 -0
  156. {wuttaweb-0.21.1/tests/views → wuttaweb-0.21.3/tests}/__init__.py +0 -0
  157. {wuttaweb-0.21.1/tests/grids → wuttaweb-0.21.3/tests/cli}/__init__.py +0 -0
  158. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/cli/test_webapp.py +0 -0
  159. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/db/__init__.py +0 -0
  160. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/db/test_continuum.py +0 -0
  161. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_base.py +0 -0
  162. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_schema.py +0 -0
  163. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_widgets.py +0 -0
  164. {wuttaweb-0.21.1/tests/cli → wuttaweb-0.21.3/tests/grids}/__init__.py +0 -0
  165. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/grids/test_filters.py +0 -0
  166. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
  167. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
  168. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga.js +0 -0
  169. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga_bulma.css +0 -0
  170. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga_bulma.js +0 -0
  171. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_vue.js +0 -0
  172. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_vue_fontawesome.js +0 -0
  173. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/buefy.css +0 -0
  174. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/buefy.js +0 -0
  175. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/fontawesome.js +0 -0
  176. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/vue.js +0 -0
  177. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/vue_resource.js +0 -0
  178. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_app.py +0 -0
  179. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_auth.py +0 -0
  180. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_emails.py +0 -0
  181. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_handler.py +0 -0
  182. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_helpers.py +0 -0
  183. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_menus.py +0 -0
  184. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_progress.py +0 -0
  185. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_static.py +0 -0
  186. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_subscribers.py +0 -0
  187. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_util.py +0 -0
  188. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/util.py +0 -0
  189. {wuttaweb-0.21.1/tests → wuttaweb-0.21.3/tests/views}/__init__.py +0 -0
  190. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test___init__.py +0 -0
  191. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_auth.py +0 -0
  192. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_base.py +0 -0
  193. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_batch.py +0 -0
  194. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_common.py +0 -0
  195. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_email.py +0 -0
  196. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_essential.py +0 -0
  197. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_master.py +0 -0
  198. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_people.py +0 -0
  199. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_progress.py +0 -0
  200. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_reports.py +0 -0
  201. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_roles.py +0 -0
  202. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_settings.py +0 -0
  203. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_upgrades.py +0 -0
  204. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_users.py +0 -0
  205. {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tox.ini +0 -0
@@ -5,6 +5,20 @@ 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.21.3 (2025-02-19)
9
+
10
+ ### Fix
11
+
12
+ - add click handler support in simple grid table element
13
+ - hide columns when applicable, for simple grid table element
14
+ - add `render_form_tag()` customization hook in /form template
15
+
16
+ ## v0.21.2 (2025-02-18)
17
+
18
+ ### Fix
19
+
20
+ - add hidden flag for grid columns
21
+
8
22
  ## v0.21.1 (2025-02-17)
9
23
 
10
24
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: WuttaWeb
3
- Version: 0.21.1
3
+ Version: 0.21.3
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
@@ -33,11 +33,11 @@ intersphinx_mapping = {
33
33
  'fanstatic': ('https://www.fanstatic.org/en/latest/', None),
34
34
  'pyramid': ('https://docs.pylonsproject.org/projects/pyramid/en/latest/', None),
35
35
  'python': ('https://docs.python.org/3/', None),
36
- 'rattail-manual': ('https://rattailproject.org/docs/rattail-manual/', None),
36
+ 'rattail-manual': ('https://docs.wuttaproject.org/rattail-manual/', None),
37
37
  'sqlalchemy': ('http://docs.sqlalchemy.org/en/latest/', None),
38
38
  'webhelpers2': ('https://webhelpers2.readthedocs.io/en/latest/', None),
39
- 'wuttjamaican': ('https://rattailproject.org/docs/wuttjamaican/', None),
40
- 'wutta-continuum': ('https://rattailproject.org/docs/wutta-continuum/', None),
39
+ 'wuttjamaican': ('https://docs.wuttaproject.org/wuttjamaican/', None),
40
+ 'wutta-continuum': ('https://docs.wuttaproject.org/wutta-continuum/', None),
41
41
  }
42
42
 
43
43
 
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "WuttaWeb"
9
- version = "0.21.1"
9
+ version = "0.21.3"
10
10
  description = "Web App for Wutta Framework"
11
11
  readme = "README.md"
12
12
  authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]
@@ -156,6 +156,15 @@ class Grid:
156
156
 
157
157
  See also :meth:`set_link()` and :meth:`is_linked()`.
158
158
 
159
+ .. attribute:: hidden_columns
160
+
161
+ List of column names which should be hidden from view.
162
+
163
+ Hidden columns are sometimes useful to pass "extra" data into
164
+ the grid, for use by other component logic etc.
165
+
166
+ See also :meth:`set_hidden()` and :meth:`is_hidden()`.
167
+
159
168
  .. attribute:: sortable
160
169
 
161
170
  Boolean indicating whether *any* column sorting is allowed for
@@ -372,6 +381,7 @@ class Grid:
372
381
  row_class=None,
373
382
  actions=[],
374
383
  linked_columns=[],
384
+ hidden_columns=[],
375
385
  sortable=False,
376
386
  sort_multiple=True,
377
387
  sort_on_backend=True,
@@ -399,6 +409,7 @@ class Grid:
399
409
  self.row_class = row_class
400
410
  self.actions = actions or []
401
411
  self.linked_columns = linked_columns or []
412
+ self.hidden_columns = hidden_columns or []
402
413
  self.joiners = joiners or {}
403
414
 
404
415
  self.config = self.request.wutta_config
@@ -535,6 +546,43 @@ class Grid:
535
546
  if key in self.columns:
536
547
  self.columns.remove(key)
537
548
 
549
+ def set_hidden(self, key, hidden=True):
550
+ """
551
+ Set/override the hidden flag for a column.
552
+
553
+ Hidden columns are sometimes useful to pass "extra" data into
554
+ the grid, for use by other component logic etc.
555
+
556
+ See also :meth:`is_hidden()`; the list is tracked via
557
+ :attr:`hidden_columns`.
558
+
559
+ :param key: Column key as string.
560
+
561
+ :param hidden: Flag indicating whether column should be hidden
562
+ (vs. shown).
563
+ """
564
+ if hidden:
565
+ if key not in self.hidden_columns:
566
+ self.hidden_columns.append(key)
567
+ else: # un-hide
568
+ if self.hidden_columns and key in self.hidden_columns:
569
+ self.hidden_columns.remove(key)
570
+
571
+ def is_hidden(self, key):
572
+ """
573
+ Returns boolean indicating if the column is hidden from view.
574
+
575
+ See also :meth:`set_hidden()` and :attr:`hidden_columns`.
576
+
577
+ :param key: Column key as string.
578
+
579
+ :rtype: bool
580
+ """
581
+ if self.hidden_columns:
582
+ if key in self.hidden_columns:
583
+ return True
584
+ return False
585
+
538
586
  def set_label(self, key, label, column_only=False):
539
587
  """
540
588
  Set/override the label for a column.
@@ -2090,6 +2138,7 @@ class Grid:
2090
2138
  columns.append({
2091
2139
  'field': name,
2092
2140
  'label': self.get_label(name),
2141
+ 'hidden': self.is_hidden(name),
2093
2142
  'sortable': self.is_sortable(name),
2094
2143
  'searchable': self.is_searchable(name),
2095
2144
  })
@@ -17,11 +17,15 @@
17
17
  <%def name="page_content()">
18
18
  % if form is not Undefined:
19
19
  <div class="wutta-form-wrapper">
20
- ${form.render_vue_tag()}
20
+ ${self.render_form_tag()}
21
21
  </div>
22
22
  % endif
23
23
  </%def>
24
24
 
25
+ <%def name="render_form_tag()">
26
+ ${form.render_vue_tag()}
27
+ </%def>
28
+
25
29
  <%def name="tool_panels_wrapper()">
26
30
  <div class="tool-panels-wrapper">
27
31
  ${self.tool_panels()}
@@ -2,18 +2,20 @@
2
2
  <${b}-table :data="gridContext['${grid.key}'].data">
3
3
 
4
4
  % for column in grid.get_vue_columns():
5
- <${b}-table-column field="${column['field']}"
6
- label="${column['label']}"
7
- v-slot="props"
8
- :sortable="${json.dumps(column.get('sortable', False))|n}"
9
- cell-class="c_${column['field']}">
10
- % if grid.is_linked(column['field']):
11
- <a :href="props.row._action_url_view"
12
- v-html="props.row.${column['field']}" />
13
- % else:
14
- <span v-html="props.row.${column['field']}"></span>
15
- % endif
16
- </${b}-table-column>
5
+ % if not column['hidden']:
6
+ <${b}-table-column field="${column['field']}"
7
+ label="${column['label']}"
8
+ v-slot="props"
9
+ :sortable="${json.dumps(column.get('sortable', False))|n}"
10
+ cell-class="c_${column['field']}">
11
+ % if grid.is_linked(column['field']):
12
+ <a :href="props.row._action_url_view"
13
+ v-html="props.row.${column['field']}" />
14
+ % else:
15
+ <span v-html="props.row.${column['field']}"></span>
16
+ % endif
17
+ </${b}-table-column>
18
+ % endif
17
19
  % endfor
18
20
 
19
21
  % if grid.actions:
@@ -23,6 +25,9 @@
23
25
  % for action in grid.actions:
24
26
  <a v-if="props.row._action_url_${action.key}"
25
27
  :href="props.row._action_url_${action.key}"
28
+ % if action.click_handler:
29
+ @click.prevent="${action.click_handler}"
30
+ % endif
26
31
  class="${action.link_class}">
27
32
  ${action.render_icon_and_label()}
28
33
  </a>
@@ -165,19 +165,21 @@
165
165
  >
166
166
 
167
167
  % for column in grid.get_vue_columns():
168
- <${b}-table-column field="${column['field']}"
169
- label="${column['label']}"
170
- v-slot="props"
171
- :sortable="${json.dumps(column.get('sortable', False))|n}"
172
- :searchable="${json.dumps(column.get('searchable', False))|n}"
173
- cell-class="c_${column['field']}">
174
- % if grid.is_linked(column['field']):
175
- <a :href="props.row._action_url_view"
176
- v-html="props.row.${column['field']}" />
177
- % else:
178
- <span v-html="props.row.${column['field']}"></span>
179
- % endif
180
- </${b}-table-column>
168
+ % if not column['hidden']:
169
+ <${b}-table-column field="${column['field']}"
170
+ label="${column['label']}"
171
+ v-slot="props"
172
+ :sortable="${json.dumps(column.get('sortable', False))|n}"
173
+ :searchable="${json.dumps(column.get('searchable', False))|n}"
174
+ cell-class="c_${column['field']}">
175
+ % if grid.is_linked(column['field']):
176
+ <a :href="props.row._action_url_view"
177
+ v-html="props.row.${column['field']}" />
178
+ % else:
179
+ <span v-html="props.row.${column['field']}"></span>
180
+ % endif
181
+ </${b}-table-column>
182
+ % endif
181
183
  % endfor
182
184
 
183
185
  % if grid.actions:
@@ -281,6 +281,26 @@ class TestGrid(WebTestCase):
281
281
  self.assertFalse(grid.is_linked('foo'))
282
282
  self.assertTrue(grid.is_linked('bar'))
283
283
 
284
+ def test_hidden_columns(self):
285
+ grid = self.make_grid(columns=['foo', 'bar'])
286
+ self.assertEqual(grid.hidden_columns, [])
287
+ self.assertFalse(grid.is_hidden('foo'))
288
+
289
+ grid.set_hidden('foo')
290
+ self.assertEqual(grid.hidden_columns, ['foo'])
291
+ self.assertTrue(grid.is_hidden('foo'))
292
+ self.assertFalse(grid.is_hidden('bar'))
293
+
294
+ grid.set_hidden('bar')
295
+ self.assertEqual(grid.hidden_columns, ['foo', 'bar'])
296
+ self.assertTrue(grid.is_hidden('foo'))
297
+ self.assertTrue(grid.is_hidden('bar'))
298
+
299
+ grid.set_hidden('foo', False)
300
+ self.assertEqual(grid.hidden_columns, ['bar'])
301
+ self.assertFalse(grid.is_hidden('foo'))
302
+ self.assertTrue(grid.is_hidden('bar'))
303
+
284
304
  def test_searchable_columns(self):
285
305
  grid = self.make_grid(columns=['foo', 'bar'])
286
306
  self.assertEqual(grid.searchable_columns, set())
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