imio.smartweb.common 1.2.36__tar.gz → 1.2.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 (174) hide show
  1. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/CHANGES.rst +17 -0
  2. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/PKG-INFO +18 -1
  3. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/setup.py +1 -1
  4. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/caching_overrides.zcml +1 -0
  5. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/rest/configure.zcml +10 -0
  6. imio_smartweb_common-1.2.38/src/imio/smartweb/common/rest/endpoint.py +192 -0
  7. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/PKG-INFO +18 -1
  8. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/SOURCES.txt +1 -0
  9. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/CONTRIBUTORS.rst +0 -0
  10. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/DEVELOP.rst +0 -0
  11. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/LICENSE.GPL +0 -0
  12. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/LICENSE.rst +0 -0
  13. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/MANIFEST.in +0 -0
  14. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/README.rst +0 -0
  15. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/docs/conf.py +0 -0
  16. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/docs/index.rst +0 -0
  17. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/requirements-6.0.txt +0 -0
  18. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/requirements-6.1.txt +0 -0
  19. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/requirements-coverage.txt +0 -0
  20. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/requirements.txt +0 -0
  21. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/setup.cfg +0 -0
  22. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/__init__.py +0 -0
  23. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/__init__.py +0 -0
  24. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/__init__.py +0 -0
  25. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/adapters.py +0 -0
  26. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/adapters.zcml +0 -0
  27. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/behaviors/__init__.py +0 -0
  28. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/behaviors/configure.zcml +0 -0
  29. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/behaviors/iam.py +0 -0
  30. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/behaviors/topics.py +0 -0
  31. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/__init__.py +0 -0
  32. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/collective_taxonomy_controlpanel.py +0 -0
  33. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/configure.zcml +0 -0
  34. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/cropping.py +0 -0
  35. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/description.pt +0 -0
  36. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/description.py +0 -0
  37. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/edit_taxonomy_data.pt +0 -0
  38. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/forms.py +0 -0
  39. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/overrides/plone.app.z3cform.templates.widget.pt +0 -0
  40. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/privacy/__init__.py +0 -0
  41. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/privacy/configure.zcml +0 -0
  42. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/privacy/form.py +0 -0
  43. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/privacy/utils.py +0 -0
  44. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/privacy/views.py +0 -0
  45. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/scaling.py +0 -0
  46. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/Makefile +0 -0
  47. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/package.json +0 -0
  48. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/smartweb-common-edit-compiled.css +0 -0
  49. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/smartweb-common-edit-compiled.js +0 -0
  50. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/smartweb-common-view-compiled.css +0 -0
  51. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/smartweb-common-view-compiled.js +0 -0
  52. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/src/edit.js +0 -0
  53. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/src/edit.less +0 -0
  54. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/src/view.js +0 -0
  55. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/src/view.less +0 -0
  56. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/static/webpack.config.js +0 -0
  57. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/browser/vocabulary.py +0 -0
  58. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/caching.py +0 -0
  59. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/config.py +0 -0
  60. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/configure.zcml +0 -0
  61. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/contact_utils.py +0 -0
  62. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/faceted/__init__.py +0 -0
  63. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/faceted/configure.zcml +0 -0
  64. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/faceted/utils.py +0 -0
  65. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/faceted/widget.pt +0 -0
  66. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/faceted/widget.py +0 -0
  67. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/indexers.py +0 -0
  68. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/indexers.zcml +0 -0
  69. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/interfaces.py +0 -0
  70. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/permissions.zcml +0 -0
  71. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/privacy.py +0 -0
  72. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/privacy.zcml +0 -0
  73. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/actions.xml +0 -0
  74. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/browserlayer.xml +0 -0
  75. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/catalog.xml +0 -0
  76. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/metadata.xml +0 -0
  77. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/registry/registry.xml +0 -0
  78. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/registry/tinymce.xml +0 -0
  79. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/default/rolemap.xml +0 -0
  80. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/catalog.xml +0 -0
  81. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/metadata.xml +0 -0
  82. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/registry.xml +0 -0
  83. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/types/Collection.xml +0 -0
  84. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/types/Document.xml +0 -0
  85. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/testing/types/Folder.xml +0 -0
  86. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles/uninstall/browserlayer.xml +0 -0
  87. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/profiles.zcml +0 -0
  88. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/rest/__init__.py +0 -0
  89. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/rest/odwb.py +0 -0
  90. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/rest/search_filters.py +0 -0
  91. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/rest/utils.py +0 -0
  92. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/serializers/__init__.py +0 -0
  93. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/serializers/configure.zcml +0 -0
  94. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/serializers/summary.py +0 -0
  95. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/setuphandlers.py +0 -0
  96. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/sharing/__init__.py +0 -0
  97. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/sharing/configure.zcml +0 -0
  98. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/sharing/localroles.py +0 -0
  99. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/sharing/permissions.py +0 -0
  100. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/sharing/permissions.zcml +0 -0
  101. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/subscribers.py +0 -0
  102. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/subscribers.zcml +0 -0
  103. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/testing.py +0 -0
  104. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/testing.zcml +0 -0
  105. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/__init__.py +0 -0
  106. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/resources/image.png +0 -0
  107. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/resources/image_1400x800.png +0 -0
  108. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/resources/image_1800x700.png +0 -0
  109. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/robot/test_example.robot +0 -0
  110. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_cropping.py +0 -0
  111. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_description.py +0 -0
  112. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_forms.py +0 -0
  113. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_indexes.py +0 -0
  114. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_local_roles.py +0 -0
  115. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_permissions.py +0 -0
  116. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_privacy.py +0 -0
  117. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_rest.py +0 -0
  118. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_robot.py +0 -0
  119. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_setup.py +0 -0
  120. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_subscribers.py +0 -0
  121. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_taxonomy.py +0 -0
  122. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_text.py +0 -0
  123. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_utils.py +0 -0
  124. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_viewlets.py +0 -0
  125. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_vocabularies.py +0 -0
  126. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_vocabulary.py +0 -0
  127. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/tests/test_widgets.py +0 -0
  128. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/__init__.py +0 -0
  129. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/configure.zcml +0 -0
  130. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1007_to_1008/rolemap.xml +0 -0
  131. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1008_to_1009/actions.xml +0 -0
  132. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1009_to_1010/registry/tiny_nonbreakingspace.xml +0 -0
  133. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1010_to_1011/registry/resources.xml +0 -0
  134. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1010_to_1011/registry/scales.xml +0 -0
  135. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1010_to_1011/registry/tinymce.xml +0 -0
  136. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1011_to_1012/registry/bundles.xml +0 -0
  137. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1013_to_1014/registry/tinymce.xml +0 -0
  138. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1014_to_1015/registry/syndication.xml +0 -0
  139. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1015_to_1016/registry/patched-faceted-jquery.xml +0 -0
  140. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1016_to_1017/registry/scales.xml +0 -0
  141. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1017_to_1018/registry.xml +0 -0
  142. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1018_to_1019/registry/scales.xml +0 -0
  143. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1022_to_1023/registry/scales.xml +0 -0
  144. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1023_to_1024/registry/scales.xml +0 -0
  145. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1025_to_1026/registry/scales.xml +0 -0
  146. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1027_to_1028/restored-faceted-jquery.xml +0 -0
  147. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1028_to_1029/registry.xml +0 -0
  148. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1029_to_1030/registry.xml +0 -0
  149. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1030_to_1031/registry/tinymce.xml +0 -0
  150. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1031_to_1032/registry/tinymce.xml +0 -0
  151. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/profiles/1032_to_1033/registry/tinymce.xml +0 -0
  152. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/upgrades/upgrades.py +0 -0
  153. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/utility_overrides.zcml +0 -0
  154. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/utils.py +0 -0
  155. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/__init__.py +0 -0
  156. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/analytics.pt +0 -0
  157. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/colophon.pt +0 -0
  158. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/colophon.py +0 -0
  159. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/configure.zcml +0 -0
  160. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/privacy.pt +0 -0
  161. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/privacy.py +0 -0
  162. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/skip_to_content.pt +0 -0
  163. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/viewlets/skip_to_content.py +0 -0
  164. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/vocabularies.py +0 -0
  165. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/vocabularies.zcml +0 -0
  166. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/widgets/__init__.py +0 -0
  167. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/widgets/select.py +0 -0
  168. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/widgets/templates/ajaxselect_display.pt +0 -0
  169. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio/smartweb/common/widgets.zcml +0 -0
  170. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/dependency_links.txt +0 -0
  171. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/namespace_packages.txt +0 -0
  172. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/not-zip-safe +0 -0
  173. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/requires.txt +0 -0
  174. {imio_smartweb_common-1.2.36 → imio_smartweb_common-1.2.38}/src/imio.smartweb.common.egg-info/top_level.txt +0 -0
@@ -2,6 +2,23 @@ Changelog
2
2
  =========
3
3
 
4
4
 
5
+ 1.2.38 (2025-09-10)
6
+ -------------------
7
+
8
+ - @find : Process None value in a field or ["None", "other value"] for agatha stats
9
+ [boulch
10
+
11
+ - Add plone.app.caching include for futur proofing override
12
+ [jchandelle]
13
+
14
+
15
+ 1.2.37 (2025-09-03)
16
+ -------------------
17
+
18
+ - Add new @find endpoint to find content in instance
19
+ [boulch]
20
+
21
+
5
22
  1.2.36 (2025-06-25)
6
23
  -------------------
7
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imio.smartweb.common
3
- Version: 1.2.36
3
+ Version: 1.2.38
4
4
  Summary: Common utilities, vocabularies, taxonomies for imio.smartweb & co products
5
5
  Home-page: https://github.com/imio/imio.smartweb.common
6
6
  Author: iMio
@@ -178,6 +178,23 @@ Changelog
178
178
  =========
179
179
 
180
180
 
181
+ 1.2.38 (2025-09-10)
182
+ -------------------
183
+
184
+ - @find : Process None value in a field or ["None", "other value"] for agatha stats
185
+ [boulch
186
+
187
+ - Add plone.app.caching include for futur proofing override
188
+ [jchandelle]
189
+
190
+
191
+ 1.2.37 (2025-09-03)
192
+ -------------------
193
+
194
+ - Add new @find endpoint to find content in instance
195
+ [boulch]
196
+
197
+
181
198
  1.2.36 (2025-06-25)
182
199
  -------------------
183
200
 
@@ -16,7 +16,7 @@ long_description = "\n\n".join(
16
16
 
17
17
  setup(
18
18
  name="imio.smartweb.common",
19
- version="1.2.36",
19
+ version="1.2.38",
20
20
  description="Common utilities, vocabularies, taxonomies for imio.smartweb & co products",
21
21
  long_description=long_description,
22
22
  # Get more from https://pypi.org/classifiers/
@@ -3,6 +3,7 @@
3
3
  xmlns:cache="http://namespaces.zope.org/cache"
4
4
  xmlns:zcml="http://namespaces.zope.org/zcml">
5
5
 
6
+ <include package="plone.app.caching" />
6
7
  <include package="z3c.unconfigure" file="meta.zcml" />
7
8
 
8
9
  <unconfigure>
@@ -10,4 +10,14 @@
10
10
  permission="zope2.View"
11
11
  />
12
12
 
13
+ <plone:service
14
+ name="@find"
15
+ method="GET"
16
+ accept="application/json"
17
+ for="zope.interface.Interface"
18
+ factory=".endpoint.FindEndpoint"
19
+ permission="zope2.View"
20
+ layer="imio.smartweb.common.interfaces.IImioSmartwebCommonLayer"
21
+ />
22
+
13
23
  </configure>
@@ -0,0 +1,192 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from collections import Counter
4
+ from imio.smartweb.common.rest.utils import get_json
5
+ from plone import api
6
+ from plone.restapi.search.handler import SearchHandler
7
+ from plone.restapi.search.utils import unflatten_dotted_dict
8
+ from plone.restapi.services import Service
9
+ from Products.CMFCore.utils import getToolByName
10
+ from zExceptions import Unauthorized
11
+
12
+ import json
13
+ import logging
14
+
15
+ logger = logging.getLogger("imio.smartweb.common")
16
+
17
+
18
+ class FindEndpointHandler(SearchHandler):
19
+ def search(self, query=None):
20
+ results = {"items": []}
21
+ portal = api.portal.get()
22
+ get_types_url = f"{portal.absolute_url()}/@types"
23
+ auth_header = self.request._orig_env.get("HTTP_AUTHORIZATION", None)
24
+ types = get_json(get_types_url, auth=auth_header, timeout=20)
25
+ if not types:
26
+ raise Unauthorized("No types found, you are not allowed to search")
27
+ self._constrain_query_by_path(query)
28
+ if not query.get("path"):
29
+ query["path"] = {"query": "/Plone"}
30
+ # query = self._parse_query(query)
31
+ if query.get("type_of_request") == "count_contents_types":
32
+ results = self.count_contents_types(query)
33
+ elif query.get("type_of_request") == "find_big_files_or_images":
34
+ results = self.find_big_files_or_images(query)
35
+ elif query.get("type_of_request") == "get_max_depth":
36
+ results = self.get_max_depth()
37
+ elif query.get("type_of_request") == "check_value_of_field":
38
+ results = self.check_value_of_field(
39
+ query.get("portal_type"),
40
+ query.get("field_name"),
41
+ query.get("expected_values"),
42
+ )
43
+ else:
44
+ return super().search(query)
45
+ return results
46
+
47
+ def count_contents_types(self, query):
48
+ results = {"items": []}
49
+ if query.get("operator") == "and":
50
+ query["path"]["depth"] = -1
51
+ lazy_resultset = self.catalog.searchResults(**query)
52
+ results = {
53
+ "items": [
54
+ {
55
+ "portal_type": query.get("portal_type"),
56
+ "nb_items": len(lazy_resultset),
57
+ }
58
+ ]
59
+ }
60
+ else:
61
+ portal_types = (
62
+ query.get("portal_type")
63
+ if isinstance(query.get("portal_type"), list)
64
+ else [query.get("portal_type")] if query.get("portal_type") else []
65
+ )
66
+ for portal_type in portal_types:
67
+ new_query = query.copy()
68
+ new_query["portal_type"] = portal_type
69
+ lazy_resultset = self.catalog.searchResults(**new_query)
70
+ results["items"].append(
71
+ {"portal_type": portal_type, "nb_items": len(lazy_resultset)}
72
+ )
73
+ # fullobjects = False
74
+ # results = getMultiAdapter((lazy_resultset, self.request), ISerializeToJson)(
75
+ # fullobjects=fullobjects
76
+ # )
77
+ return results
78
+
79
+ def find_big_files_or_images(self, query):
80
+ SIZE_LIMIT = query.get("size", "1000000")
81
+ results = {"items": []}
82
+ lazy_resultset = self.catalog.searchResults(**query)
83
+ for brain in lazy_resultset:
84
+ obj = brain.getObject()
85
+ blob = getattr(obj, "file", None) or getattr(obj, "image", None)
86
+ if blob and hasattr(blob, "getSize"):
87
+ size = blob.getSize()
88
+ if size > int(SIZE_LIMIT):
89
+ results["items"].append(
90
+ {
91
+ "title": obj.title,
92
+ "portal_type": obj.portal_type,
93
+ "url": obj.absolute_url(),
94
+ "size": round(size / (1024 * 1024), 2),
95
+ }
96
+ )
97
+ return results
98
+
99
+ def get_max_depth(self):
100
+ portal = api.portal.get()
101
+ catalog = getToolByName(portal, "portal_catalog")
102
+
103
+ max_depth = 0
104
+ results = {"items": []}
105
+
106
+ for brain in catalog():
107
+ path = brain.getPath()
108
+ depth = len(path.strip("/").split("/"))
109
+ if depth > max_depth:
110
+ max_depth = depth
111
+ results["items"] = [{"path": path, "depth": depth}]
112
+ elif depth == max_depth:
113
+ results["items"].append({"path": path, "depth": depth})
114
+ results["max_depth"] = max_depth
115
+ return results
116
+
117
+ def check_value_of_field(self, portal_type, field_name, expected_values):
118
+ """
119
+ Analyse la répartition des valeurs d'un champ dans les objets d'un content_type donné.
120
+ query sample : http://localhost:8085/Plone/@find?portal_type=imio.events.Event&field_name=event_type&expected_values=["activity", "event-driven"]&type_of_request=check_value_of_field
121
+
122
+ :param content_type: str, le portal_type (ex: "Event")
123
+ :param field_name: str, field name (ex: "event_type")
124
+ :param expected_values: list, list of values we want to check (ex: ["activity", "event-driven"])
125
+ :return: dict {valeur: {"count": n, "percent": x.xx}}
126
+ """
127
+ brains = self.catalog(portal_type=portal_type)
128
+
129
+ total = len(brains)
130
+ if total == 0:
131
+ return {}
132
+
133
+ # Récupération et normalisation des valeurs
134
+ values = []
135
+ for brain in brains:
136
+ obj = brain.getObject()
137
+ value = getattr(obj, field_name, None)
138
+ if isinstance(value, (list, tuple)):
139
+ if not value:
140
+ # liste/tuple vide => on compte 1 None
141
+ values.append(None)
142
+ else:
143
+ mapped = [
144
+ None if (v in ("", "None") or v is None) else v for v in value
145
+ ]
146
+ # si TOUT est None, on compte 1 None (au lieu d'en ajouter 0)
147
+ if all(v is None for v in mapped):
148
+ values.append(None)
149
+ else:
150
+ values.extend(mapped)
151
+ else:
152
+ v = None if (value in ("", "None") or value is None) else value
153
+ values.append(v)
154
+ counter = Counter(values)
155
+
156
+ # Normalisation des valeurs attendues
157
+ expected_values = normalize_query_param(expected_values)
158
+ # On garde les labels originaux pour l'affichage, mais on mappe "None" vers None réel pour le compteur
159
+ expected_mapping = {v: (None if v == "None" else v) for v in expected_values}
160
+
161
+ # Calcul stats
162
+ result = {}
163
+ for label, key in expected_mapping.items():
164
+ count = counter.get(key, 0)
165
+ percent = (count / total) * 100 if total > 0 else 0
166
+ result[label] = {"count": count, "percent": round(percent, 2)}
167
+
168
+ return result
169
+
170
+
171
+ class FindEndpoint(Service):
172
+ def reply(self):
173
+ query = self.request.form.copy()
174
+ query = unflatten_dotted_dict(query)
175
+ return FindEndpointHandler(self.context, self.request).search(query)
176
+
177
+
178
+ def normalize_query_param(value):
179
+ if isinstance(value, list):
180
+ return value
181
+
182
+ if isinstance(value, str):
183
+ val = value.strip()
184
+ # Try to parse json list
185
+ if val.startswith("[") and val.endswith("]"):
186
+ try:
187
+ return json.loads(val)
188
+ except json.JSONDecodeError:
189
+ return [val]
190
+ else:
191
+ return [val]
192
+ return [value]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imio.smartweb.common
3
- Version: 1.2.36
3
+ Version: 1.2.38
4
4
  Summary: Common utilities, vocabularies, taxonomies for imio.smartweb & co products
5
5
  Home-page: https://github.com/imio/imio.smartweb.common
6
6
  Author: iMio
@@ -178,6 +178,23 @@ Changelog
178
178
  =========
179
179
 
180
180
 
181
+ 1.2.38 (2025-09-10)
182
+ -------------------
183
+
184
+ - @find : Process None value in a field or ["None", "other value"] for agatha stats
185
+ [boulch
186
+
187
+ - Add plone.app.caching include for futur proofing override
188
+ [jchandelle]
189
+
190
+
191
+ 1.2.37 (2025-09-03)
192
+ -------------------
193
+
194
+ - Add new @find endpoint to find content in instance
195
+ [boulch]
196
+
197
+
181
198
  1.2.36 (2025-06-25)
182
199
  -------------------
183
200
 
@@ -99,6 +99,7 @@ src/imio/smartweb/common/profiles/testing/types/Folder.xml
99
99
  src/imio/smartweb/common/profiles/uninstall/browserlayer.xml
100
100
  src/imio/smartweb/common/rest/__init__.py
101
101
  src/imio/smartweb/common/rest/configure.zcml
102
+ src/imio/smartweb/common/rest/endpoint.py
102
103
  src/imio/smartweb/common/rest/odwb.py
103
104
  src/imio/smartweb/common/rest/search_filters.py
104
105
  src/imio/smartweb/common/rest/utils.py