cherrypy-foundation 1.0.0a12__tar.gz → 1.0.0a14__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 (157) hide show
  1. {cherrypy_foundation-1.0.0a12/src/cherrypy_foundation.egg-info → cherrypy_foundation-1.0.0a14}/PKG-INFO +1 -1
  2. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/ColorModes.jinja +5 -4
  3. cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/components/LocaleSelection.jinja +13 -0
  4. cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/components/LocaleSelection.js +26 -0
  5. cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/tests/__init__.py +72 -0
  6. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/templates/test_flash.html +2 -1
  7. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/templates/test_form.html +2 -1
  8. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/templates/test_url.html +1 -1
  9. cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/tools/i18n.py +529 -0
  10. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/jinja2.py +14 -1
  11. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/templates/test_jinja2.html +2 -1
  12. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/templates/test_jinjax.html +3 -2
  13. cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/tools/tests/templates/test_jinjax_i18n.html +22 -0
  14. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/test_i18n.py +34 -2
  15. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/test_jinja2.py +33 -3
  16. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/url.py +2 -3
  17. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14/src/cherrypy_foundation.egg-info}/PKG-INFO +1 -1
  18. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation.egg-info/SOURCES.txt +4 -4
  19. cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools/i18n.py +0 -454
  20. cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools/tests/__init__.py +0 -0
  21. cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools/tests/locales/en/LC_MESSAGES/messages.mo +0 -0
  22. cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools/tests/locales/en/LC_MESSAGES/messages.po +0 -15
  23. cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools/tests/templates/test_jinja2_i18n.html +0 -11
  24. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/.gitignore +0 -0
  25. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/.gitlab-ci.yml +0 -0
  26. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/LICENSE.md +0 -0
  27. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/README.md +0 -0
  28. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/TODO +0 -0
  29. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/changelog +0 -0
  30. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/control +0 -0
  31. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/copyright +0 -0
  32. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/python3-cherrypy-foundation.docs +0 -0
  33. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/python3-cherrypy-foundation.links +0 -0
  34. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/rules +0 -0
  35. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/source/format +0 -0
  36. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/source/options +0 -0
  37. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/debian/upstream/metadata +0 -0
  38. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/pyproject.toml +0 -0
  39. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/setup.cfg +0 -0
  40. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/sonar-project.properties +0 -0
  41. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/__init__.py +0 -0
  42. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Datatable.css +0 -0
  43. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Datatable.jinja +0 -0
  44. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Datatable.js +0 -0
  45. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Field.css +0 -0
  46. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Field.jinja +0 -0
  47. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Field.js +0 -0
  48. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Fields.jinja +0 -0
  49. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Flash.jinja +0 -0
  50. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Icon.jinja +0 -0
  51. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/SideBySideMultiSelect.css +0 -0
  52. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/SideBySideMultiSelect.jinja +0 -0
  53. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/SideBySideMultiSelect.js +0 -0
  54. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Typeahead.css +0 -0
  55. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Typeahead.jinja +0 -0
  56. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/Typeahead.js +0 -0
  57. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/__init__.py +0 -0
  58. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/tests/__init__.py +0 -0
  59. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/tests/test_static.py +0 -0
  60. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  61. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap-icons/bootstrap-icons.min.css +0 -0
  62. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  63. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  64. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/css/bootstrap.css +0 -0
  65. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/css/bootstrap.css.map +0 -0
  66. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/css/bootstrap.min.css +0 -0
  67. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/css/bootstrap.min.css.map +0 -0
  68. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/js/bootstrap.js +0 -0
  69. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/js/bootstrap.js.map +0 -0
  70. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/js/bootstrap.min.js +0 -0
  71. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/js/bootstrap.min.js.map +0 -0
  72. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/bootstrap5/js/color-modes.js +0 -0
  73. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/css/dataTables.dataTables.css +0 -0
  74. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/css/dataTables.dataTables.min.css +0 -0
  75. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/images/sort_asc.png +0 -0
  76. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/images/sort_asc_disabled.png +0 -0
  77. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/images/sort_both.png +0 -0
  78. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/images/sort_desc.png +0 -0
  79. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/images/sort_desc_disabled.png +0 -0
  80. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/js/dataTables.js +0 -0
  81. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables/js/dataTables.min.js +0 -0
  82. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/css/buttons.dataTables.css +0 -0
  83. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/css/buttons.dataTables.min.css +0 -0
  84. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/js/buttons.html5.js +0 -0
  85. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/js/buttons.html5.min.js +0 -0
  86. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/js/dataTables.buttons.js +0 -0
  87. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Buttons/js/dataTables.buttons.min.js +0 -0
  88. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/FixedHeader/css/fixedHeader.dataTables.css +0 -0
  89. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/FixedHeader/css/fixedHeader.dataTables.min.css +0 -0
  90. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/FixedHeader/js/dataTables.fixedHeader.js +0 -0
  91. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/FixedHeader/js/dataTables.fixedHeader.min.js +0 -0
  92. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/JSZip/jszip.js +0 -0
  93. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/JSZip/jszip.min.js +0 -0
  94. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Responsive/css/responsive.dataTables.css +0 -0
  95. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Responsive/css/responsive.dataTables.min.css +0 -0
  96. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Responsive/js/dataTables.responsive.js +0 -0
  97. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/Responsive/js/dataTables.responsive.min.js +0 -0
  98. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/pdfmake/build/pdfmake.js +0 -0
  99. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/pdfmake/build/pdfmake.min.js +0 -0
  100. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/pdfmake/build/vfs_fonts.js +0 -0
  101. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/rowgroup/css/rowGroup.dataTables.css +0 -0
  102. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/rowgroup/css/rowGroup.dataTables.min.css +0 -0
  103. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/rowgroup/js/dataTables.rowGroup.js +0 -0
  104. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/datatables-extensions/rowgroup/js/dataTables.rowGroup.min.js +0 -0
  105. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/jquery/jquery.min.js +0 -0
  106. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/multi/LICENSE +0 -0
  107. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/multi/README.md +0 -0
  108. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/multi/multi.css +0 -0
  109. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/multi/multi.js +0 -0
  110. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/popper/popper.js +0 -0
  111. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/popper/popper.min.js +0 -0
  112. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/typeahead/jquery.typeahead.min.css +0 -0
  113. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/components/vendor/typeahead/jquery.typeahead.min.js +0 -0
  114. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/error_page.py +0 -0
  115. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/flash.py +0 -0
  116. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/form.py +0 -0
  117. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/logging.py +0 -0
  118. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/passwd.py +0 -0
  119. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/__init__.py +0 -0
  120. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/db.py +0 -0
  121. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/ldap.py +0 -0
  122. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/restapi.py +0 -0
  123. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/scheduler.py +0 -0
  124. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/smtp.py +0 -0
  125. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/__init__.py +0 -0
  126. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/test_db.py +0 -0
  127. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/test_ldap.py +0 -0
  128. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/test_scheduler.py +0 -0
  129. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/test_scheduler_db.py +0 -0
  130. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/plugins/tests/test_smtp.py +0 -0
  131. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/test_error_page.py +0 -0
  132. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/test_flash.py +0 -0
  133. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/test_form.py +0 -0
  134. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/test_passwd.py +0 -0
  135. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tests/test_url.py +0 -0
  136. {cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tests → cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/tools}/__init__.py +0 -0
  137. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/auth.py +0 -0
  138. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/auth_mfa.py +0 -0
  139. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/errors.py +0 -0
  140. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/ratelimit.py +0 -0
  141. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/secure_headers.py +0 -0
  142. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/sessions_timeout.py +0 -0
  143. {cherrypy_foundation-1.0.0a12/src/cherrypy_foundation/tools → cherrypy_foundation-1.0.0a14/src/cherrypy_foundation/tools/tests}/__init__.py +0 -0
  144. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/components/Button.jinja +0 -0
  145. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/locales/de/LC_MESSAGES/messages.mo +0 -0
  146. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/locales/de/LC_MESSAGES/messages.po +0 -0
  147. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/locales/fr/LC_MESSAGES/messages.mo +0 -0
  148. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/locales/fr/LC_MESSAGES/messages.po +0 -0
  149. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/locales/messages.pot +0 -0
  150. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/test_auth.py +0 -0
  151. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/test_auth_mfa.py +0 -0
  152. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/tools/tests/test_ratelimit.py +0 -0
  153. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation/widgets.py +0 -0
  154. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation.egg-info/dependency_links.txt +0 -0
  155. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation.egg-info/requires.txt +0 -0
  156. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/src/cherrypy_foundation.egg-info/top_level.txt +0 -0
  157. {cherrypy_foundation-1.0.0a12 → cherrypy_foundation-1.0.0a14}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cherrypy-foundation
3
- Version: 1.0.0a12
3
+ Version: 1.0.0a14
4
4
  Summary: CherryPy Foundation
5
5
  Author-email: Patrik Dufresne <patrik@ikus-soft.com>
6
6
  License: GPLv3
@@ -1,3 +1,4 @@
1
+ {# def header="Toggle theme", light_label="Light", dark_label="Dark", auto_label="Auto" #}
1
2
  {#css vendor/bootstrap5/css/bootstrap.min.css #}
2
3
  {#js vendor/popper/popper.min.js, vendor/bootstrap5/js/bootstrap.min.js, vendor/bootstrap5/js/color-modes.js #}
3
4
  <svg class="d-none" xmlns="http://www.w3.org/2000/svg">
@@ -21,7 +22,7 @@
21
22
  </svg>
22
23
  <li>
23
24
  <span id="bd-theme" class="dropdown-item disabled">
24
- <span id="bd-theme-text">{% trans %}Toggle theme{% endtrans %}</span>
25
+ <span id="bd-theme-text">{{ header }}</span>
25
26
  <svg aria-hidden="true"
26
27
  class="theme-icon-active visually-hidden"
27
28
  width="16"
@@ -40,7 +41,7 @@
40
41
  <use href="#sun-fill">
41
42
  </use>
42
43
  </svg>
43
- {% trans %}Light{% endtrans %}
44
+ {{ light_label }}
44
45
  </button>
45
46
  </li>
46
47
  <li>
@@ -52,7 +53,7 @@
52
53
  <use href="#moon-stars-fill">
53
54
  </use>
54
55
  </svg>
55
- {% trans %}Dark{% endtrans %}
56
+ {{ dark_label }}
56
57
  </button>
57
58
  </li>
58
59
  <li>
@@ -64,6 +65,6 @@
64
65
  <use href="#circle-half">
65
66
  </use>
66
67
  </svg>
67
- {% trans %}Auto{% endtrans %}
68
+ {{ auto_label }}
68
69
  </button>
69
70
  </li>
@@ -0,0 +1,13 @@
1
+ {# def header="Language selection" #}
2
+ <li>
3
+ <h6 class="dropdown-header">{{ header }}</h6>
4
+ </li>
5
+ {% set cur_locale = get_translation().locale %}
6
+ {% for locale in list_available_locales() %}
7
+ <li>
8
+ <button aria-pressed="{{ 'true' if cur_locale == locale else 'false' }}"
9
+ class="dropdown-item btn-locale{{ ' active' if cur_locale == locale else '' }}"
10
+ data-locale="{{ locale.language }}"
11
+ type="button">{{ locale.display_name.capitalize() }}</button>
12
+ </li>
13
+ {% endfor %}
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Handle locale selection.
3
+ */
4
+ document.addEventListener('DOMContentLoaded', function () {
5
+ const LOCALE_COOKIE_NAME = 'locale';
6
+ const ONE_YEAR = 60 * 60 * 24 * 365;
7
+
8
+ function setLocaleCookie(locale) {
9
+ document.cookie = `${LOCALE_COOKIE_NAME}=${locale}; path=/; max-age=${ONE_YEAR}; SameSite=Lax`;
10
+ }
11
+
12
+ function onLanguageClick(event) {
13
+ const locale = event.target.dataset.locale;
14
+ if (!locale) return;
15
+
16
+ setLocaleCookie(locale);
17
+
18
+ // Reload page so backend can use the new language
19
+ window.location.reload();
20
+ }
21
+
22
+ document.querySelectorAll('.btn-locale').forEach(btn => {
23
+ btn.addEventListener('click', onLanguageClick);
24
+ });
25
+
26
+ });
@@ -0,0 +1,72 @@
1
+ # CherryPy foundation
2
+ # Copyright (C) 2026 IKUS Software
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+
17
+ import os
18
+ import tempfile
19
+ import unittest
20
+ from contextlib import contextmanager
21
+
22
+ from selenium import webdriver
23
+
24
+
25
+ class SeleniumUnitTest:
26
+
27
+ @property
28
+ def _session_id(self):
29
+ if hasattr(self, 'cookies') and self.cookies:
30
+ for unused, value in self.cookies:
31
+ for part in value.split(';'):
32
+ key, unused, value = part.partition('=')
33
+ if key == 'session_id':
34
+ return value
35
+
36
+ @contextmanager
37
+ def selenium(self, headless=True, implicitly_wait=3):
38
+ """
39
+ Decorator to load selenium for a test.
40
+ """
41
+ # Skip selenium test is display is not available.
42
+ if not os.environ.get('DISPLAY', False):
43
+ raise unittest.SkipTest("selenium require a display")
44
+ # Start selenium driver
45
+ options = webdriver.ChromeOptions()
46
+ if headless:
47
+ options.add_argument('--headless')
48
+ options.add_argument('--disable-gpu')
49
+ options.add_argument('--window-size=1280,800')
50
+ options.add_argument('--no-sandbox')
51
+ options.add_argument('--disable-dev-shm-usage')
52
+ options.add_argument('--lang=en-US')
53
+ driver = webdriver.Chrome(options=options)
54
+ try:
55
+ # If logged in, reuse the same session id.
56
+ if self._session_id:
57
+ driver.get(f'{self.baseurl}/login/')
58
+ driver.add_cookie({"name": "session_id", "value": self.session_id})
59
+ # Configure download folder
60
+ download = os.path.join(os.path.expanduser('~'), 'Downloads')
61
+ os.makedirs(download, exist_ok=True)
62
+ self._selenium_download_dir = tempfile.mkdtemp(dir=download, prefix='selenium-download-')
63
+ driver.execute_cdp_cmd(
64
+ 'Page.setDownloadBehavior', {'behavior': 'allow', 'downloadPath': self._selenium_download_dir}
65
+ )
66
+ # Set default wait.
67
+ driver.implicitly_wait(implicitly_wait)
68
+ yield driver
69
+ finally:
70
+ # Code to release resource, e.g.:
71
+ driver.close()
72
+ driver = None
@@ -1,4 +1,5 @@
1
- <html>
1
+ <!DOCTYPE html>
2
+ <html lang="en">
2
3
  <head>
3
4
  <title>test-flash</title>
4
5
  </head>
@@ -1,4 +1,5 @@
1
- <html>
1
+ <!DOCTYPE html>
2
+ <html >
2
3
  <head>
3
4
  <title>test-form</title>
4
5
  </head>
@@ -1,4 +1,4 @@
1
- <html>
1
+ <html lang="en">
2
2
  <head>
3
3
  <title>test-url</title>
4
4
  </head>