eea.plotly 2.4__tar.gz → 2.5__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 (152) hide show
  1. {eea_plotly-2.4/eea.plotly.egg-info → eea_plotly-2.5}/PKG-INFO +56 -1
  2. {eea_plotly-2.4 → eea_plotly-2.5}/README.rst +50 -0
  3. {eea_plotly-2.4 → eea_plotly-2.5}/docs/HISTORY.txt +5 -0
  4. eea_plotly-2.5/eea/plotly/version.txt +1 -0
  5. {eea_plotly-2.4 → eea_plotly-2.5/eea.plotly.egg-info}/PKG-INFO +56 -1
  6. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/SOURCES.txt +0 -2
  7. eea_plotly-2.4/eea/plotly/tests/base.py +0 -51
  8. eea_plotly-2.4/eea/plotly/tests/test_doctests.py +0 -31
  9. eea_plotly-2.4/eea/plotly/version.txt +0 -1
  10. {eea_plotly-2.4 → eea_plotly-2.5}/CONTRIBUTING.md +0 -0
  11. {eea_plotly-2.4 → eea_plotly-2.5}/MANIFEST.in +0 -0
  12. {eea_plotly-2.4 → eea_plotly-2.5}/docs/LICENSE.GPL +0 -0
  13. {eea_plotly-2.4 → eea_plotly-2.5}/docs/LICENSE.txt +0 -0
  14. {eea_plotly-2.4 → eea_plotly-2.5}/eea/__init__.py +0 -0
  15. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/README.txt +0 -0
  16. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/__init__.py +0 -0
  17. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/agents.py +0 -0
  18. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/behaviors.py +0 -0
  19. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/__init__.py +0 -0
  20. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/configure.zcml +0 -0
  21. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/controlpanel.py +0 -0
  22. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/preview.py +0 -0
  23. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/preview_adapter/adapter.py +0 -0
  24. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/preview_adapter/soer_miniature.py +0 -0
  25. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/browser/pt/visualization_view.pt +0 -0
  26. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/configure.zcml +0 -0
  27. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/context_providers.py +0 -0
  28. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/controlpanel.py +0 -0
  29. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/deserializer/blocks.py +0 -0
  30. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/deserializer/configure.zcml +0 -0
  31. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/deserializer/dxcontent.py +0 -0
  32. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/deserializer/dxfields.py +0 -0
  33. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/generate.py +0 -0
  34. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/interfaces.py +0 -0
  35. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/io_csv.py +0 -0
  36. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/io_json.py +0 -0
  37. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/__init__.py +0 -0
  38. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/bg/LC_MESSAGES/eea.po +0 -0
  39. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/bg/LC_MESSAGES/plone.po +0 -0
  40. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/cs/LC_MESSAGES/eea.po +0 -0
  41. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/cs/LC_MESSAGES/plone.po +0 -0
  42. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/da/LC_MESSAGES/eea.po +0 -0
  43. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/da/LC_MESSAGES/plone.po +0 -0
  44. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/de/LC_MESSAGES/eea.po +0 -0
  45. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/de/LC_MESSAGES/plone.po +0 -0
  46. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/eea.pot +0 -0
  47. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/el/LC_MESSAGES/eea.po +0 -0
  48. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/el/LC_MESSAGES/plone.po +0 -0
  49. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/en/LC_MESSAGES/eea.po +0 -0
  50. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/en/LC_MESSAGES/plone.po +0 -0
  51. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/es/LC_MESSAGES/eea.po +0 -0
  52. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/es/LC_MESSAGES/plone.po +0 -0
  53. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/et/LC_MESSAGES/eea.po +0 -0
  54. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/et/LC_MESSAGES/plone.po +0 -0
  55. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/eu/LC_MESSAGES/eea.po +0 -0
  56. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/eu/LC_MESSAGES/plone.po +0 -0
  57. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/fi/LC_MESSAGES/eea.po +0 -0
  58. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/fi/LC_MESSAGES/plone.po +0 -0
  59. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/fr/LC_MESSAGES/eea.po +0 -0
  60. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/fr/LC_MESSAGES/plone.po +0 -0
  61. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/hr/LC_MESSAGES/eea.po +0 -0
  62. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/hr/LC_MESSAGES/plone.po +0 -0
  63. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/hu/LC_MESSAGES/eea.po +0 -0
  64. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/hu/LC_MESSAGES/plone.po +0 -0
  65. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/is/LC_MESSAGES/eea.po +0 -0
  66. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/is/LC_MESSAGES/plone.po +0 -0
  67. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/it/LC_MESSAGES/eea.po +0 -0
  68. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/it/LC_MESSAGES/plone.po +0 -0
  69. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/kl/LC_MESSAGES/eea.po +0 -0
  70. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/kl/LC_MESSAGES/plone.po +0 -0
  71. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/lt/LC_MESSAGES/eea.po +0 -0
  72. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/lt/LC_MESSAGES/plone.po +0 -0
  73. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/lv/LC_MESSAGES/eea.po +0 -0
  74. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/lv/LC_MESSAGES/plone.po +0 -0
  75. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/mt/LC_MESSAGES/eea.po +0 -0
  76. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/mt/LC_MESSAGES/plone.po +0 -0
  77. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/nl/LC_MESSAGES/eea.po +0 -0
  78. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/nl/LC_MESSAGES/plone.po +0 -0
  79. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/no/LC_MESSAGES/eea.po +0 -0
  80. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/no/LC_MESSAGES/plone.po +0 -0
  81. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pl/LC_MESSAGES/eea.po +0 -0
  82. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pl/LC_MESSAGES/plone.po +0 -0
  83. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/plone-manual.pot +0 -0
  84. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pt/LC_MESSAGES/eea.po +0 -0
  85. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pt/LC_MESSAGES/plone.po +0 -0
  86. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pt_BR/LC_MESSAGES/eea.po +0 -0
  87. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/pt_BR/LC_MESSAGES/plone.po +0 -0
  88. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/ro/LC_MESSAGES/eea.po +0 -0
  89. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/ro/LC_MESSAGES/plone.po +0 -0
  90. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/ru/LC_MESSAGES/eea.po +0 -0
  91. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/ru/LC_MESSAGES/plone.po +0 -0
  92. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sk/LC_MESSAGES/eea.po +0 -0
  93. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sk/LC_MESSAGES/plone.po +0 -0
  94. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sl/LC_MESSAGES/eea.po +0 -0
  95. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sl/LC_MESSAGES/plone.po +0 -0
  96. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sv/LC_MESSAGES/eea.po +0 -0
  97. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/sv/LC_MESSAGES/plone.po +0 -0
  98. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/tr/LC_MESSAGES/eea.po +0 -0
  99. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/tr/LC_MESSAGES/plone.po +0 -0
  100. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/update.sh +0 -0
  101. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/zh_TW/LC_MESSAGES/eea.po +0 -0
  102. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/locales/zh_TW/LC_MESSAGES/plone.po +0 -0
  103. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/models.py +0 -0
  104. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/permissions.zcml +0 -0
  105. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/browserlayer.xml +0 -0
  106. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/controlpanel.json +0 -0
  107. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/controlpanel.xml +0 -0
  108. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/metadata.xml +0 -0
  109. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/registry.xml +0 -0
  110. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/rolemap.xml +0 -0
  111. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/types/visualization.xml +0 -0
  112. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/default/types.xml +0 -0
  113. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/uninstall/browserlayer.xml +0 -0
  114. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/uninstall/controlpanel.xml +0 -0
  115. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles/uninstall/registry.xml +0 -0
  116. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/profiles.zcml +0 -0
  117. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/prompts.py +0 -0
  118. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/__init__.py +0 -0
  119. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/chart/__init__.py +0 -0
  120. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/chart/configure.zcml +0 -0
  121. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/chart/post.py +0 -0
  122. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/configure.zcml +0 -0
  123. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/controlpanel/__init__.py +0 -0
  124. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/controlpanel/configure.zcml +0 -0
  125. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/controlpanel/get.py +0 -0
  126. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/controlpanel/reset.py +0 -0
  127. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/summarize/__init__.py +0 -0
  128. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/summarize/configure.zcml +0 -0
  129. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/summarize/post.py +0 -0
  130. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/visualization/configure.zcml +0 -0
  131. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/restapi/visualization/get.py +0 -0
  132. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/serializer/blocks.py +0 -0
  133. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/serializer/configure.zcml +0 -0
  134. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/serializer/dxfields.py +0 -0
  135. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/serializer/utils.py +0 -0
  136. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/setuphandlers.py +0 -0
  137. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/skills.py +0 -0
  138. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/tests/__init__.py +0 -0
  139. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/tests/test_leak_prevention.py +0 -0
  140. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/tests/test_utils.py +0 -0
  141. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/tools.py +0 -0
  142. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/upgrades/__init__.py +0 -0
  143. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/upgrades/configure.zcml +0 -0
  144. {eea_plotly-2.4 → eea_plotly-2.5}/eea/plotly/utils.py +0 -0
  145. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/dependency_links.txt +0 -0
  146. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/entry_points.txt +0 -0
  147. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/namespace_packages.txt +0 -0
  148. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/not-zip-safe +0 -0
  149. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/requires.txt +0 -0
  150. {eea_plotly-2.4 → eea_plotly-2.5}/eea.plotly.egg-info/top_level.txt +0 -0
  151. {eea_plotly-2.4 → eea_plotly-2.5}/setup.cfg +0 -0
  152. {eea_plotly-2.4 → eea_plotly-2.5}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eea.plotly
3
- Version: 2.4
3
+ Version: 2.5
4
4
  Summary: volto-plotlycharts backend support
5
5
  Home-page: https://github.com/eea/eea.plotly
6
6
  Author: European Environment Agency: IDM2 A-Team
@@ -143,9 +143,64 @@ EEA_ - European Environment Agency (EU)
143
143
  .. _EEA: https://www.eea.europa.eu/
144
144
  .. _`EEA Web Systems Training`: http://www.youtube.com/user/eeacms/videos?view=1
145
145
 
146
+ Secret Scanning
147
+ ===============
148
+
149
+ This repository uses the Betterleaks GitHub Action to scan the current
150
+ repository content on every push and pull request. The scan uses the rules in
151
+ ``.gitleaks.toml`` and uploads a ``betterleaks-report`` artifact when a finding
152
+ is detected.
153
+
154
+ If the optional SMTP secrets are configured, failed scans also send an email to
155
+ the last commit committer. The workflow expects these repository or
156
+ organization secrets:
157
+
158
+ - ``SMTP_URL``
159
+ - ``SMTP_PORT`` (optional, defaults to ``25``)
160
+ - ``SMTP_EMAIL``
161
+ - ``SMTP_PASSWORD`` (optional if the SMTP server does not require authentication)
162
+
163
+ Port ``465`` is sent with direct TLS; other ports use the default SMTP
164
+ handshake. The email includes a short finding summary from the redacted
165
+ Betterleaks report, including the redacted matched line from each finding.
166
+
167
+ There are three common outcomes:
168
+
169
+ 1. Everything is OK. The ``Betterleaks / Scan for secrets`` check is green and
170
+ no action is needed. Regular references to runtime values are OK, for example::
171
+
172
+ token_from_cookie = request.cookies.get("auth_token")
173
+
174
+ 2. A real secret was found. The check is red and the workflow log asks you to
175
+ download the ``betterleaks-report`` artifact. Open the artifact from the
176
+ GitHub Actions run and check the reported file, line and rule. Remove the
177
+ committed value, move it to the proper secret store, and rotate it if it was
178
+ exposed. A report entry looks like this::
179
+
180
+ {
181
+ "RuleID": "secret-literal-assignment",
182
+ "File": "src/config.py",
183
+ "StartLine": 12,
184
+ "Secret": "[REDACTED]"
185
+ }
186
+
187
+ 3. The finding is a false positive. Keep the value only if it is clearly not
188
+ sensitive, such as a test fixture, placeholder, or public example. Add
189
+ ``betterleaks:allow`` on the same line and include a short explanation in the
190
+ pull request::
191
+
192
+ test_password = "admin" #betterleaks:allow
193
+
194
+ Do not add ``betterleaks:allow`` to real credentials.
195
+
146
196
  Changelog
147
197
  =========
148
198
 
199
+ 2.5 - (2026-07-13)
200
+ ---------------------------
201
+ * Change: fix: SonarQube report - refs #305404
202
+ [avoinea]
203
+
149
204
  2.4 - (2026-05-26)
150
205
  ---------------------------
151
206
  * Change: Implement eea.genai.summary customization
@@ -101,3 +101,53 @@ EEA_ - European Environment Agency (EU)
101
101
 
102
102
  .. _EEA: https://www.eea.europa.eu/
103
103
  .. _`EEA Web Systems Training`: http://www.youtube.com/user/eeacms/videos?view=1
104
+
105
+ Secret Scanning
106
+ ===============
107
+
108
+ This repository uses the Betterleaks GitHub Action to scan the current
109
+ repository content on every push and pull request. The scan uses the rules in
110
+ ``.gitleaks.toml`` and uploads a ``betterleaks-report`` artifact when a finding
111
+ is detected.
112
+
113
+ If the optional SMTP secrets are configured, failed scans also send an email to
114
+ the last commit committer. The workflow expects these repository or
115
+ organization secrets:
116
+
117
+ - ``SMTP_URL``
118
+ - ``SMTP_PORT`` (optional, defaults to ``25``)
119
+ - ``SMTP_EMAIL``
120
+ - ``SMTP_PASSWORD`` (optional if the SMTP server does not require authentication)
121
+
122
+ Port ``465`` is sent with direct TLS; other ports use the default SMTP
123
+ handshake. The email includes a short finding summary from the redacted
124
+ Betterleaks report, including the redacted matched line from each finding.
125
+
126
+ There are three common outcomes:
127
+
128
+ 1. Everything is OK. The ``Betterleaks / Scan for secrets`` check is green and
129
+ no action is needed. Regular references to runtime values are OK, for example::
130
+
131
+ token_from_cookie = request.cookies.get("auth_token")
132
+
133
+ 2. A real secret was found. The check is red and the workflow log asks you to
134
+ download the ``betterleaks-report`` artifact. Open the artifact from the
135
+ GitHub Actions run and check the reported file, line and rule. Remove the
136
+ committed value, move it to the proper secret store, and rotate it if it was
137
+ exposed. A report entry looks like this::
138
+
139
+ {
140
+ "RuleID": "secret-literal-assignment",
141
+ "File": "src/config.py",
142
+ "StartLine": 12,
143
+ "Secret": "[REDACTED]"
144
+ }
145
+
146
+ 3. The finding is a false positive. Keep the value only if it is clearly not
147
+ sensitive, such as a test fixture, placeholder, or public example. Add
148
+ ``betterleaks:allow`` on the same line and include a short explanation in the
149
+ pull request::
150
+
151
+ test_password = "admin" #betterleaks:allow
152
+
153
+ Do not add ``betterleaks:allow`` to real credentials.
@@ -1,6 +1,11 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 2.5 - (2026-07-13)
5
+ ---------------------------
6
+ * Change: fix: SonarQube report - refs #305404
7
+ [avoinea]
8
+
4
9
  2.4 - (2026-05-26)
5
10
  ---------------------------
6
11
  * Change: Implement eea.genai.summary customization
@@ -0,0 +1 @@
1
+ 2.5
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eea.plotly
3
- Version: 2.4
3
+ Version: 2.5
4
4
  Summary: volto-plotlycharts backend support
5
5
  Home-page: https://github.com/eea/eea.plotly
6
6
  Author: European Environment Agency: IDM2 A-Team
@@ -143,9 +143,64 @@ EEA_ - European Environment Agency (EU)
143
143
  .. _EEA: https://www.eea.europa.eu/
144
144
  .. _`EEA Web Systems Training`: http://www.youtube.com/user/eeacms/videos?view=1
145
145
 
146
+ Secret Scanning
147
+ ===============
148
+
149
+ This repository uses the Betterleaks GitHub Action to scan the current
150
+ repository content on every push and pull request. The scan uses the rules in
151
+ ``.gitleaks.toml`` and uploads a ``betterleaks-report`` artifact when a finding
152
+ is detected.
153
+
154
+ If the optional SMTP secrets are configured, failed scans also send an email to
155
+ the last commit committer. The workflow expects these repository or
156
+ organization secrets:
157
+
158
+ - ``SMTP_URL``
159
+ - ``SMTP_PORT`` (optional, defaults to ``25``)
160
+ - ``SMTP_EMAIL``
161
+ - ``SMTP_PASSWORD`` (optional if the SMTP server does not require authentication)
162
+
163
+ Port ``465`` is sent with direct TLS; other ports use the default SMTP
164
+ handshake. The email includes a short finding summary from the redacted
165
+ Betterleaks report, including the redacted matched line from each finding.
166
+
167
+ There are three common outcomes:
168
+
169
+ 1. Everything is OK. The ``Betterleaks / Scan for secrets`` check is green and
170
+ no action is needed. Regular references to runtime values are OK, for example::
171
+
172
+ token_from_cookie = request.cookies.get("auth_token")
173
+
174
+ 2. A real secret was found. The check is red and the workflow log asks you to
175
+ download the ``betterleaks-report`` artifact. Open the artifact from the
176
+ GitHub Actions run and check the reported file, line and rule. Remove the
177
+ committed value, move it to the proper secret store, and rotate it if it was
178
+ exposed. A report entry looks like this::
179
+
180
+ {
181
+ "RuleID": "secret-literal-assignment",
182
+ "File": "src/config.py",
183
+ "StartLine": 12,
184
+ "Secret": "[REDACTED]"
185
+ }
186
+
187
+ 3. The finding is a false positive. Keep the value only if it is clearly not
188
+ sensitive, such as a test fixture, placeholder, or public example. Add
189
+ ``betterleaks:allow`` on the same line and include a short explanation in the
190
+ pull request::
191
+
192
+ test_password = "admin" #betterleaks:allow
193
+
194
+ Do not add ``betterleaks:allow`` to real credentials.
195
+
146
196
  Changelog
147
197
  =========
148
198
 
199
+ 2.5 - (2026-07-13)
200
+ ---------------------------
201
+ * Change: fix: SonarQube report - refs #305404
202
+ [avoinea]
203
+
149
204
  2.4 - (2026-05-26)
150
205
  ---------------------------
151
206
  * Change: Implement eea.genai.summary customization
@@ -141,8 +141,6 @@ eea/plotly/serializer/configure.zcml
141
141
  eea/plotly/serializer/dxfields.py
142
142
  eea/plotly/serializer/utils.py
143
143
  eea/plotly/tests/__init__.py
144
- eea/plotly/tests/base.py
145
- eea/plotly/tests/test_doctests.py
146
144
  eea/plotly/tests/test_leak_prevention.py
147
145
  eea/plotly/tests/test_utils.py
148
146
  eea/plotly/upgrades/__init__.py
@@ -1,51 +0,0 @@
1
- """Base test cases"""
2
-
3
- from Products.CMFPlone import setuphandlers
4
- from plone.testing import z2
5
- from plone.app.testing import TEST_USER_ID
6
- from plone.app.testing import PloneSandboxLayer
7
- from plone.app.testing import applyProfile
8
- from plone.app.testing import FunctionalTesting
9
- from plone.app.testing import setRoles
10
- from plone.testing.zope import installProduct
11
-
12
-
13
- class EEAFixture(PloneSandboxLayer):
14
- """EEA Testing Policy"""
15
-
16
- def setUpZope(self, app, configurationContext):
17
- """Setup Zope"""
18
- import eea.plotly
19
-
20
- self.loadZCML(package=eea.plotly)
21
-
22
- installProduct(app, "eea.plotly")
23
-
24
- def setUpPloneSite(self, portal):
25
- """Setup Plone"""
26
- applyProfile(portal, "eea.plotly:default")
27
-
28
- # Default workflow
29
- wftool = portal["portal_workflow"]
30
- wftool.setDefaultChain("simple_publication_workflow")
31
-
32
- # Login as manager
33
- setRoles(portal, TEST_USER_ID, ["Manager"])
34
-
35
- # Add default Plone content
36
- try:
37
- applyProfile(portal, "plone.app.contenttypes:plone-content")
38
- except KeyError:
39
- # BBB Plone 4
40
- setuphandlers.setupPortalContent(portal)
41
-
42
- # Create testing environment
43
- portal.invokeFactory("Folder", "sandbox", title="Sandbox")
44
-
45
- def tearDownZope(self, app):
46
- """Uninstall Zope"""
47
- z2.uninstallProduct(app, "eea.plotly")
48
-
49
-
50
- EEAFIXTURE = EEAFixture()
51
- FUNCTIONAL_TESTING = FunctionalTesting(bases=(EEAFIXTURE,), name="EEAplotly:Functional")
@@ -1,31 +0,0 @@
1
- """Doc tests"""
2
-
3
- import doctest
4
- import unittest
5
- from eea.plotly.tests.base import FUNCTIONAL_TESTING
6
- from plone.testing import layered
7
-
8
- OPTIONFLAGS = (
9
- doctest.REPORT_ONLY_FIRST_FAILURE | doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE
10
- )
11
-
12
-
13
- def test_suite():
14
- """Suite"""
15
- suite = unittest.TestSuite()
16
- suite.addTests(
17
- [
18
- layered(
19
- doctest.DocFileSuite(
20
- "README.txt", optionflags=OPTIONFLAGS, package="eea.plotly"
21
- ),
22
- layer=FUNCTIONAL_TESTING,
23
- ),
24
- ]
25
- )
26
-
27
- return suite
28
-
29
-
30
- if __name__ == "__main__":
31
- unittest.main(defaultTest="test_suite")
@@ -1 +0,0 @@
1
- 2.4
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
File without changes