emrt.necd.content 2.5.49__zip → 2.5.51__zip

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 (260) hide show
  1. emrt.necd.content-2.5.51/PKG-INFO +1724 -0
  2. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/docs/HISTORY.txt +10 -0
  3. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/conclusions.py +3 -5
  4. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/configure.zcml +6 -0
  5. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/metadata.xml +1 -1
  6. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/reviewfolder.py +40 -6
  7. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscribers.py +9 -0
  8. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/configure.zcml +25 -0
  9. emrt.necd.content-2.5.51/emrt/necd/content/upgrades/evolve2550.py +56 -0
  10. emrt.necd.content-2.5.51/emrt/necd/content/upgrades/evolve2551.py +31 -0
  11. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utils.py +1 -1
  12. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/vocabularies.py +9 -8
  13. emrt.necd.content-2.5.51/emrt.necd.content.egg-info/PKG-INFO +1724 -0
  14. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/SOURCES.txt +2 -0
  15. emrt.necd.content-2.5.51/emrt.necd.content.egg-info/entry_points.txt +2 -0
  16. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/setup.py +1 -1
  17. emrt.necd.content-2.5.49/PKG-INFO +0 -1692
  18. emrt.necd.content-2.5.49/emrt.necd.content.egg-info/PKG-INFO +0 -1692
  19. emrt.necd.content-2.5.49/emrt.necd.content.egg-info/entry_points.txt +0 -5
  20. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/.editorconfig +0 -0
  21. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/.gitignore +0 -0
  22. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/MANIFEST.in +0 -0
  23. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/Makefile +0 -0
  24. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/README.txt +0 -0
  25. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/bootstrap.py +0 -0
  26. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/build_manylinux.sh +0 -0
  27. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/buildout.cfg +0 -0
  28. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/docs/INSTALL.txt +0 -0
  29. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/docs/LICENSE.GPL +0 -0
  30. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/docs/LICENSE.txt +0 -0
  31. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/__init__.py +0 -0
  32. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/__init__.py +0 -0
  33. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/INTEGRATION.txt +0 -0
  34. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/__init__.py +0 -0
  35. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/adapters/__init__.py +0 -0
  36. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/adapters/configure.zcml +0 -0
  37. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/adapters/reference_number.py +0 -0
  38. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/__init__.py +0 -0
  39. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/attachmentdownload.py +0 -0
  40. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/bulk_update.py +0 -0
  41. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/carryover.py +0 -0
  42. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/comments.py +0 -0
  43. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/configure.zcml +0 -0
  44. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/copyfiles.py +0 -0
  45. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/flatten_json.so +0 -0
  46. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/get_sample_xls.py +0 -0
  47. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/interfaces.py +0 -0
  48. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/macros.py +0 -0
  49. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/observation_import.py +0 -0
  50. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/reminder.py +0 -0
  51. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/statechange.py +0 -0
  52. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/statisticsview.py +0 -0
  53. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/tableau.py +0 -0
  54. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/assign_answerer_form.pt +0 -0
  55. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/assign_conclusion_reviewer_form.pt +0 -0
  56. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/assign_counterpart_form.pt +0 -0
  57. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/bulk_update.pt +0 -0
  58. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/carryover.pt +0 -0
  59. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/finalisedfolderview.pt +0 -0
  60. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/import_observation.pt +0 -0
  61. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/inboxreviewfolderview.pt +0 -0
  62. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/macros.pt +0 -0
  63. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/multi_input.pt +0 -0
  64. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/reminder.pt +0 -0
  65. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/reminder_default_content.pt +0 -0
  66. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/reviewfolder_get_table.pt +0 -0
  67. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/reviewfolderview.pt +0 -0
  68. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/statisticsview.pt +0 -0
  69. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/tableau_connector.pt +0 -0
  70. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/templates/tableau_dashboard.pt +0 -0
  71. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/browser/xls_utils.py +0 -0
  72. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/comment.py +0 -0
  73. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/commentanswer.py +0 -0
  74. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/commentextender.py +0 -0
  75. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/constants.py +0 -0
  76. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/converter.py +0 -0
  77. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/crons.py +0 -0
  78. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/forms/__init__.py +0 -0
  79. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/forms/configure.zcml +0 -0
  80. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/forms/redraft.py +0 -0
  81. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/inbox_sections.py +0 -0
  82. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/indexers.py +0 -0
  83. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/locales/README.txt +0 -0
  84. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/necdfile.py +0 -0
  85. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/nfr_code_matching.py +0 -0
  86. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/__init__.py +0 -0
  87. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/answer_acknowledged.pt +0 -0
  88. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/answer_acknowledged.py +0 -0
  89. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/answer_to_msexperts.pt +0 -0
  90. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/answer_to_msexperts.py +0 -0
  91. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/comment_added.py +0 -0
  92. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/comment_added.zcml +0 -0
  93. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/comment_to_msa.pt +0 -0
  94. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/comment_to_mse.pt +0 -0
  95. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/conclusion_to_comment.pt +0 -0
  96. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/conclusion_to_comment.py +0 -0
  97. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/configure.zcml +0 -0
  98. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/new_comment.pt +0 -0
  99. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalisation_denied.pt +0 -0
  100. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalisation_denied.py +0 -0
  101. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalisation_request.pt +0 -0
  102. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalisation_request.py +0 -0
  103. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalised.pt +0 -0
  104. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalised.py +0 -0
  105. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_finalised_rev_msg.pt +0 -0
  106. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_recalled.py +0 -0
  107. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_recalled.zcml +0 -0
  108. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_recalled_closed_msa.pt +0 -0
  109. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_recalled_closed_se.pt +0 -0
  110. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/observation_recalled_denied_se.pt +0 -0
  111. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_answered.py +0 -0
  112. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_answered_lr_msg.pt +0 -0
  113. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_answered_msexperts_msg.pt +0 -0
  114. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_answered_rev_msg.pt +0 -0
  115. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_ready_for_approval.pt +0 -0
  116. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_ready_for_approval.py +0 -0
  117. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_redraft.pt +0 -0
  118. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_redraft.py +0 -0
  119. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_redraft.zcml +0 -0
  120. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_to_counterpart.pt +0 -0
  121. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_to_counterpart.py +0 -0
  122. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_to_ms.pt +0 -0
  123. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_to_ms.py +0 -0
  124. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/question_to_ms_rev_msg.pt +0 -0
  125. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/notifications/utils.py +0 -0
  126. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/observation.py +0 -0
  127. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/overrides.zcml +0 -0
  128. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/patches.py +0 -0
  129. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/patches.zcml +0 -0
  130. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/permissions.zcml +0 -0
  131. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/catalog.xml +0 -0
  132. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/cssregistry.xml +0 -0
  133. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/diff_tool.xml +0 -0
  134. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/emrt.necd.content_various.txt +0 -0
  135. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/jsregistry.xml +0 -0
  136. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/ldap_plugin.xml +0 -0
  137. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/conclusion_reasons.csv +0 -0
  138. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/eea_member_states.csv +0 -0
  139. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/fuel.csv +0 -0
  140. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/ghg_source_category.csv +0 -0
  141. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/ghg_source_sectors.csv +0 -0
  142. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/highlight.csv +0 -0
  143. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/highlight_2024_onwards.csv +0 -0
  144. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/highlight_projection.csv +0 -0
  145. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/parameter.csv +0 -0
  146. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/pollutants.csv +0 -0
  147. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/necdvocabularies/scenario_type.csv +0 -0
  148. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/registry.xml +0 -0
  149. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/rolemap.xml +0 -0
  150. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/sharing.xml +0 -0
  151. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/tinymce.xml +0 -0
  152. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/Comment.xml +0 -0
  153. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/CommentAnswer.xml +0 -0
  154. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/Conclusions.xml +0 -0
  155. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/Folder.xml +0 -0
  156. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/NECDFile.xml +0 -0
  157. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/Observation.xml +0 -0
  158. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/Question.xml +0 -0
  159. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types/ReviewFolder.xml +0 -0
  160. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/types.xml +0 -0
  161. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-answer-workflow/definition.xml +0 -0
  162. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-comment-workflow/definition.xml +0 -0
  163. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-conclusion-workflow/definition.xml +0 -0
  164. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-file-workflow/definition.xml +0 -0
  165. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-question-review-workflow/definition.xml +0 -0
  166. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-review-workflow/definition.xml +0 -0
  167. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows/esd-reviewtool-folder-workflow/definition.xml +0 -0
  168. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles/default/workflows.xml +0 -0
  169. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/profiles.zcml +0 -0
  170. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/question.py +0 -0
  171. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/roles/__init__.py +0 -0
  172. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/roles/configure.zcml +0 -0
  173. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/roles/localroles.py +0 -0
  174. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/roles/localrolesubscriber.py +0 -0
  175. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/setuphandlers.py +0 -0
  176. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/chosen-sprite.png +0 -0
  177. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/chosen-sprite@2x.png +0 -0
  178. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/chosen.jquery.js +0 -0
  179. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/chosen.min.css +0 -0
  180. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/cookies.js +0 -0
  181. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/eea-tabs.css +0 -0
  182. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/eea-tabs.js +0 -0
  183. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/emrt.necd.content.css +0 -0
  184. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/flags.css +0 -0
  185. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/flags.png +0 -0
  186. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/inbox_view.css +0 -0
  187. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/inbox_view.js +0 -0
  188. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/moment.min.js +0 -0
  189. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/phase-1.png +0 -0
  190. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/phase-12.png +0 -0
  191. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/phase-2.png +0 -0
  192. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/tableauwdc-2.3.1.min.js +0 -0
  193. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/static/tableauwdc-2.3.latest.min.js +0 -0
  194. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscriptionconfiguration.py +0 -0
  195. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscriptions/__init__.py +0 -0
  196. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscriptions/configure.zcml +0 -0
  197. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscriptions/dexterity.py +0 -0
  198. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/subscriptions/interfaces.py +0 -0
  199. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/conclusion_layout.pt +0 -0
  200. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/diffedview.pt +0 -0
  201. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/macro_qa_chat.pt +0 -0
  202. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/observationview.pt +0 -0
  203. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/subscriptionconfiguration.pt +0 -0
  204. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/subscriptionconfigurationreview.pt +0 -0
  205. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/widget_activity.pt +0 -0
  206. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/widget_activity_type.pt +0 -0
  207. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/widget_highlight.pt +0 -0
  208. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/templates/widget_pollutants.pt +0 -0
  209. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/tests.py +0 -0
  210. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/timeit.py +0 -0
  211. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/transform_html_to_docx.py +0 -0
  212. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/__init__.py +0 -0
  213. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2010.py +0 -0
  214. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2015.py +0 -0
  215. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2016.py +0 -0
  216. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2022.py +0 -0
  217. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2024.py +0 -0
  218. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2025.py +0 -0
  219. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2029.py +0 -0
  220. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2032.py +0 -0
  221. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2037.py +0 -0
  222. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2038.py +0 -0
  223. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2042.py +0 -0
  224. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2044.py +0 -0
  225. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2045.py +0 -0
  226. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve205.py +0 -0
  227. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve206.py +0 -0
  228. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve207.py +0 -0
  229. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2201.py +0 -0
  230. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve230.py +0 -0
  231. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve235.py +0 -0
  232. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve236.py +0 -0
  233. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve237.py +0 -0
  234. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve240.py +0 -0
  235. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve243.py +0 -0
  236. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve252.py +0 -0
  237. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2524.py +0 -0
  238. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2537.py +0 -0
  239. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2538.py +0 -0
  240. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2540.py +0 -0
  241. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve2542.py +0 -0
  242. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/evolve258.py +0 -0
  243. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/portal_workflow.py +0 -0
  244. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/upgrades/templates/portal_workflow_apply_and_reindex.pt +0 -0
  245. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/__init__.py +0 -0
  246. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/configure.zcml +0 -0
  247. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/interfaces.py +0 -0
  248. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/ldap_utils.py +0 -0
  249. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/ldap_wrapper.py +0 -0
  250. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/ms_user.py +0 -0
  251. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/question.py +0 -0
  252. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/utilities/roles.py +0 -0
  253. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/views.zcml +0 -0
  254. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt/necd/content/vocabularies.zcml +0 -0
  255. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/dependency_links.txt +0 -0
  256. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/namespace_packages.txt +0 -0
  257. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/not-zip-safe +0 -0
  258. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/requires.txt +0 -0
  259. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/emrt.necd.content.egg-info/top_level.txt +0 -0
  260. {emrt.necd.content-2.5.49 → emrt.necd.content-2.5.51}/setup.cfg +0 -0
@@ -1,6 +1,16 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 2.5.51 (2024-05-23)
5
+
6
+ - Bug #270288 - Fix observation not reindexing after new comments
7
+
8
+ 2.5.50 (2024-04-30)
9
+
10
+ - Task #260973 - Add formatting
11
+ - Task #260971 - Review if flags need updating/ all are still relevant
12
+ - Bug #269439 - Error when editing conclusion text
13
+
4
14
  2.5.49 (2024-04-25)
5
15
 
6
16
  - Task #260971 - Add "Description flags" to carryover
@@ -1,5 +1,3 @@
1
- import datetime
2
- from copy import copy
3
1
  from logging import getLogger
4
2
  from AccessControl import getSecurityManager
5
3
  from Acquisition import aq_base
@@ -12,9 +10,7 @@ from emrt.necd.content import MessageFactory as _
12
10
  from emrt.necd.content.utils import hidden
13
11
  from emrt.necd.content.utils import get_vocabulary_value
14
12
  from plone import api
15
- import plone.z3cform.templates
16
13
  from plone.app.dexterity.behaviors.discussion import IAllowDiscussion
17
- from plone.app.textfield import RichText
18
14
  from plone.dexterity.browser import add
19
15
  from plone.dexterity.browser import edit
20
16
  from plone.dexterity.content import Container
@@ -70,7 +66,7 @@ class IConclusions(form.Schema, IImageScaleTraversable):
70
66
  required=True,
71
67
  )
72
68
 
73
- text = RichText(
69
+ text = schema.Text(
74
70
  title=_(u'Text'),
75
71
  required=True,
76
72
  default=u'',
@@ -244,6 +240,7 @@ class PseudoConclusion(object):
244
240
  text = u''
245
241
  closing_reason = ''
246
242
  highlight = ''
243
+ highlight_vocabulary = ''
247
244
 
248
245
  def __init__(self, context):
249
246
  self.context = context
@@ -258,6 +255,7 @@ class PseudoConclusion(object):
258
255
 
259
256
  def __call__(self, container):
260
257
  self.highlight = container.highlight
258
+ self.highlight_vocabulary = container.highlight_vocabulary
261
259
  # [refs #102793] needed by vocabularies
262
260
  self.type = container.type # inventory/projection
263
261
  return self
@@ -193,6 +193,12 @@
193
193
  handler="emrt.necd.content.notifications.observation_finalisation_request.notification_lr"
194
194
  />
195
195
 
196
+ <!-- New comment, reindex number of replies -->
197
+ <subscriber
198
+ for="plone.app.discussion.interfaces.IComment zope.lifecycleevent.IObjectAddedEvent"
199
+ handler="emrt.necd.content.subscribers.new_discussion_comment"
200
+ />
201
+
196
202
  <!-- Crons view -->
197
203
  <browser:page
198
204
  name="cron_update_vocabularies"
@@ -1,5 +1,5 @@
1
1
  <metadata>
2
- <version>2.5.49</version>
2
+ <version>2.5.51</version>
3
3
  <dependencies>
4
4
  <dependency>profile-plone.app.dexterity:default</dependency>
5
5
  <dependency>profile-plone.app.ldap:ldap</dependency>
@@ -1,3 +1,4 @@
1
+ from collections import namedtuple
1
2
  import itertools
2
3
  import time
3
4
  from StringIO import StringIO
@@ -133,14 +134,17 @@ def get_finalisation_reasons(reviewfolder):
133
134
  return reasons
134
135
 
135
136
 
137
+ MissingHighlight = namedtuple("MissingHighlight", ["title"])
138
+
136
139
  def translate_highlights(vocab, keys):
137
- return tuple(vocab.getTerm(x).title for x in keys)
140
+ return tuple(
141
+ vocab.by_token.get(x, MissingHighlight(x)).title for x in keys)
138
142
 
139
143
 
140
- def get_highlight_vocabs(context):
144
+ def get_highlight_vocabs(context, voc_name=None):
141
145
  vocab_highlight = getUtility(
142
146
  IVocabularyFactory,
143
- name='emrt.necd.content.highlight')(context)
147
+ name='emrt.necd.content.highlight')(context, voc_name)
144
148
 
145
149
  vocab_highlight_values = tuple([
146
150
  term.value for term in vocab_highlight
@@ -159,6 +163,28 @@ def get_highlight_vocabs(context):
159
163
 
160
164
  return vocab_description_flags, vocab_conclusion_flags, vocab_highlight
161
165
 
166
+ def classify_unknown_highlights(context, unknown_highlights):
167
+ result = {
168
+ "description_flags": set(),
169
+ "conclusion_flags": set()
170
+ }
171
+ if context.type == 'inventory':
172
+ other_highlight_vocabularies = [
173
+ x for x in HIGHLIGHT_VOCABULARY_TYPES.by_value
174
+ if x and x != context.highlight_vocabulary
175
+ and not x.endswith('projection')
176
+ ]
177
+ for voc_name in other_highlight_vocabularies:
178
+ vocab_description_flags, vocab_conclusion_flags, vocab_highlight = (
179
+ get_highlight_vocabs(context, voc_name)
180
+ )
181
+ highlights = translate_highlights(vocab_highlight, unknown_highlights)
182
+ description_flags = get_common(highlights, vocab_description_flags)
183
+ conclusion_flags = get_common(highlights, vocab_conclusion_flags)
184
+ result["conclusion_flags"].update(conclusion_flags)
185
+ result["description_flags"].update(description_flags)
186
+
187
+ return result
162
188
 
163
189
  def filter_for_ms(brains, context):
164
190
  if api.user.is_anonymous():
@@ -654,6 +680,14 @@ class ExportReviewFolderForm(form.Form, ReviewFolderMixin):
654
680
  row = [observation.getId]
655
681
  highlights = translate_highlights(
656
682
  vocab_highlight, observation['get_highlight'] or [])
683
+ description_flags = get_common(highlights, vocab_description_flags)
684
+ conclusion_flags = get_common(highlights, vocab_conclusion_flags)
685
+ unknown_flags = classify_unknown_highlights(
686
+ self.context,
687
+ set(highlights).difference(
688
+ itertools.chain(description_flags, conclusion_flags)
689
+ )
690
+ )
657
691
 
658
692
  for key in fields_to_export:
659
693
  if key == 'observation_is_potential_technical_correction':
@@ -664,11 +698,11 @@ class ExportReviewFolderForm(form.Form, ReviewFolderMixin):
664
698
  row.append(yes_no_bool(IS_FIELD_MAP[key] in highlights))
665
699
  elif key == 'get_description_flags':
666
700
  row.append(', '.join(
667
- get_common(highlights, vocab_description_flags)
701
+ list(itertools.chain(description_flags, unknown_flags["description_flags"]))
668
702
  ))
669
703
  elif key == 'get_conclusion_flags':
670
704
  row.append(', '.join(
671
- get_common(highlights, vocab_conclusion_flags)
705
+ list(itertools.chain(conclusion_flags, unknown_flags["conclusion_flags"]))
672
706
  ))
673
707
  elif key == 'get_is_ms_key_category':
674
708
  row.append(
@@ -784,7 +818,7 @@ class ExportReviewFolderForm(form.Form, ReviewFolderMixin):
784
818
 
785
819
  try:
786
820
  comment_html = comment.text.output_relative_to(context)
787
- output_text = html2text.html2text(comment_html)
821
+ output_text = html2text.html2text(comment_html, bodywidth=0)
788
822
  except AttributeError:
789
823
  output_text = comment.text
790
824
 
@@ -3,6 +3,9 @@ from DateTime import DateTime
3
3
  from plone import api
4
4
  from Products.CMFCore.utils import getToolByName
5
5
 
6
+ from emrt.necd.content.observation import IObservation
7
+ from emrt.necd.content.utils import find_parent_with_interface
8
+
6
9
 
7
10
  def question_transition(question, event):
8
11
  if event.action in ['approve-question']:
@@ -158,3 +161,9 @@ def observation_transition(observation, event):
158
161
 
159
162
 
160
163
  observation.reindexObject()
164
+
165
+
166
+ def new_discussion_comment(comment, event):
167
+ with api.env.adopt_roles(roles=['Manager']):
168
+ observation = find_parent_with_interface(IObservation, comment)
169
+ observation.reindexObject()
@@ -810,5 +810,30 @@
810
810
 
811
811
  </genericsetup:upgradeSteps>
812
812
 
813
+ <genericsetup:upgradeSteps
814
+ source="2.5.48"
815
+ destination="2.5.50"
816
+ profile="emrt.necd.content:default">
817
+
818
+ <genericsetup:upgradeStep
819
+ title="Roll-back formatting for conclusion text."
820
+ description="[refs #260973] Add formatting."
821
+ handler=".evolve2550.run"
822
+ />
823
+
824
+ </genericsetup:upgradeSteps>
825
+
826
+ <genericsetup:upgradeSteps
827
+ source="2.5.50"
828
+ destination="2.5.51"
829
+ profile="emrt.necd.content:default">
830
+
831
+ <genericsetup:upgradeStep
832
+ title="Reindex observation discussion counts"
833
+ description="[refs #270288] observation not reindexed when new discussion comments are added."
834
+ handler=".evolve2551.run"
835
+ />
836
+
837
+ </genericsetup:upgradeSteps>
813
838
 
814
839
  </configure>
@@ -0,0 +1,56 @@
1
+ from logging import getLogger
2
+
3
+ import transaction
4
+ from DateTime import DateTime
5
+
6
+ from zope.component import getMultiAdapter
7
+ from zope.globalrequest import getRequest
8
+
9
+ from plone.app.textfield.value import RichTextValue
10
+
11
+ import plone.api as api
12
+
13
+ import html2text
14
+
15
+
16
+ LOGGER = getLogger(__name__)
17
+
18
+
19
+ def filter_is_carried_over(obs):
20
+ return hasattr(obs, "carryover_from")
21
+
22
+
23
+ def filter_has_comments(obs):
24
+ return (
25
+ getattr(obs, "closing_comments", None)
26
+ or getattr(obs, "closing_deny_comments", None)
27
+ )
28
+
29
+ def run(_):
30
+ catalog = api.portal.get_tool("portal_catalog")
31
+ brains = catalog(portal_type="Conclusions", modified={"range": "min", "query": DateTime("2024/02/19")})
32
+ brains_len = len(brains)
33
+ a_tenth = brains_len / 10
34
+ conclusions = (brain.getObject() for brain in brains)
35
+ LOGGER.info("Found %s brains. Selecting some...", brains_len)
36
+ valid_conclusions = (
37
+ obj
38
+ for obj in conclusions
39
+ if isinstance(obj.text, RichTextValue)
40
+ )
41
+ for idx, conclusion in enumerate(valid_conclusions, start=1):
42
+ LOGGER.info(conclusion.absolute_url(1))
43
+
44
+ try:
45
+ conclusion_html = conclusion.text.output_relative_to(conclusion)
46
+ conclusion.text = html2text.html2text(conclusion_html, bodywidth=0)
47
+ except Exception:
48
+ LOGGER.exception("Could not update conclusion text!")
49
+
50
+ conclusion.aq_parent.reindexObject()
51
+ conclusion.reindexObject()
52
+
53
+ # log progress
54
+ if a_tenth and idx % a_tenth == 0:
55
+ transaction.savepoint(optimistic=True)
56
+ LOGGER.info("Done %s/%s.", idx, brains_len)
@@ -0,0 +1,31 @@
1
+ from logging import getLogger
2
+
3
+ import transaction
4
+ from DateTime import DateTime
5
+
6
+ import plone.api as api
7
+
8
+
9
+ LOGGER = getLogger(__name__)
10
+
11
+
12
+ def run(_):
13
+ catalog = api.portal.get_tool("portal_catalog")
14
+ brains = catalog(portal_type="Observation", modified={"range": "min", "query": DateTime("2024/02/19")})
15
+
16
+ brains_len = len(brains)
17
+ a_tenth = brains_len / 10
18
+
19
+ LOGGER.info("Found %s brains...", brains_len)
20
+
21
+ observations = (b.getObject() for b in brains)
22
+
23
+ for idx, observation in enumerate(observations, start=1):
24
+ LOGGER.info(observation.absolute_url(1))
25
+
26
+ observation.reindexObject()
27
+
28
+ # log progress
29
+ if a_tenth and idx % a_tenth == 0:
30
+ transaction.savepoint(optimistic=True)
31
+ LOGGER.info("Done %s/%s.", idx, brains_len)
@@ -143,7 +143,7 @@ def render_rich_text_value(context, obj):
143
143
 
144
144
  def richtext2text(value, context):
145
145
  html_value = value.output_relative_to(context)
146
- output_text = html2text.html2text(html_value)
146
+ output_text = html2text.html2text(html_value, bodywidth=0)
147
147
  return safe_unicode(output_text)
148
148
 
149
149
 
@@ -199,16 +199,17 @@ class Fuel(object):
199
199
  @implementer(IVocabularyFactory)
200
200
  class Highlight(object):
201
201
 
202
- def __call__(self, context):
202
+ def __call__(self, context, voc_name=None):
203
203
  pvoc = api.portal.get_tool('portal_vocabularies')
204
204
 
205
- if context.highlight_vocabulary:
206
- voc_name = context.highlight_vocabulary
207
- else:
208
- voc_name = (
209
- 'highlight' if context.type == 'inventory'
210
- else 'highlight_projection'
211
- )
205
+ if voc_name is None:
206
+ if context.highlight_vocabulary:
207
+ voc_name = context.highlight_vocabulary
208
+ else:
209
+ voc_name = (
210
+ 'highlight' if context.type == 'inventory'
211
+ else 'highlight_projection'
212
+ )
212
213
 
213
214
  voc = pvoc.getVocabularyByName(voc_name)
214
215
  if voc is None: