udata 12.0.2.dev15__py3-none-any.whl → 13.0.1.dev21__py3-none-any.whl

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.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (258) hide show
  1. udata/api/__init__.py +1 -0
  2. udata/api_fields.py +10 -4
  3. udata/app.py +11 -10
  4. udata/auth/__init__.py +9 -10
  5. udata/auth/mails.py +137 -45
  6. udata/auth/views.py +5 -12
  7. udata/commands/__init__.py +2 -3
  8. udata/commands/info.py +1 -3
  9. udata/commands/tests/test_fixtures.py +6 -3
  10. udata/core/access_type/api.py +18 -0
  11. udata/core/access_type/constants.py +98 -0
  12. udata/core/access_type/models.py +44 -0
  13. udata/core/activity/models.py +1 -1
  14. udata/core/badges/models.py +1 -1
  15. udata/core/badges/tasks.py +35 -1
  16. udata/core/badges/tests/test_commands.py +2 -4
  17. udata/core/badges/tests/test_model.py +2 -2
  18. udata/core/badges/tests/test_tasks.py +55 -0
  19. udata/core/constants.py +1 -0
  20. udata/core/contact_point/models.py +8 -0
  21. udata/core/dataservices/api.py +3 -3
  22. udata/core/dataservices/apiv2.py +3 -1
  23. udata/core/dataservices/constants.py +0 -29
  24. udata/core/dataservices/models.py +44 -44
  25. udata/core/dataservices/rdf.py +2 -1
  26. udata/core/dataservices/search.py +5 -9
  27. udata/core/dataservices/tasks.py +33 -0
  28. udata/core/dataset/api_fields.py +11 -0
  29. udata/core/dataset/apiv2.py +11 -0
  30. udata/core/dataset/constants.py +0 -1
  31. udata/core/dataset/forms.py +29 -0
  32. udata/core/dataset/models.py +16 -4
  33. udata/core/dataset/rdf.py +2 -1
  34. udata/core/dataset/search.py +2 -2
  35. udata/core/dataset/tasks.py +86 -8
  36. udata/core/discussions/mails.py +63 -0
  37. udata/core/discussions/tasks.py +4 -18
  38. udata/core/metrics/__init__.py +0 -6
  39. udata/core/organization/api.py +3 -1
  40. udata/core/organization/mails.py +144 -0
  41. udata/core/organization/models.py +2 -1
  42. udata/core/organization/search.py +1 -1
  43. udata/core/organization/tasks.py +21 -49
  44. udata/core/pages/tests/test_api.py +0 -2
  45. udata/core/reuse/api.py +27 -1
  46. udata/core/reuse/mails.py +21 -0
  47. udata/core/reuse/models.py +10 -1
  48. udata/core/reuse/search.py +1 -1
  49. udata/core/reuse/tasks.py +2 -3
  50. udata/core/site/models.py +2 -6
  51. udata/core/spatial/tests/test_api.py +17 -20
  52. udata/core/spatial/tests/test_models.py +3 -3
  53. udata/core/user/mails.py +54 -0
  54. udata/core/user/models.py +2 -3
  55. udata/core/user/tasks.py +8 -23
  56. udata/core/user/tests/test_user_model.py +2 -6
  57. udata/entrypoints.py +0 -5
  58. udata/features/identicon/tests/test_backends.py +3 -13
  59. udata/forms/fields.py +3 -3
  60. udata/forms/widgets.py +2 -2
  61. udata/frontend/__init__.py +3 -32
  62. udata/harvest/actions.py +4 -9
  63. udata/harvest/api.py +5 -14
  64. udata/harvest/backends/__init__.py +20 -11
  65. udata/harvest/backends/base.py +2 -2
  66. udata/harvest/backends/ckan/harvesters.py +2 -1
  67. udata/harvest/backends/dcat.py +3 -0
  68. udata/harvest/backends/maaf.py +1 -0
  69. udata/harvest/commands.py +6 -4
  70. udata/harvest/forms.py +9 -6
  71. udata/harvest/tasks.py +3 -5
  72. udata/harvest/tests/ckan/test_ckan_backend.py +300 -337
  73. udata/harvest/tests/ckan/test_ckan_backend_errors.py +94 -99
  74. udata/harvest/tests/ckan/test_ckan_backend_filters.py +128 -122
  75. udata/harvest/tests/ckan/test_dkan_backend.py +39 -51
  76. udata/harvest/tests/dcat/datara--5a26b0f6-0ccf-46ad-ac58-734054b91977.rdf.xml +255 -0
  77. udata/harvest/tests/dcat/datara--f40c3860-7236-4b30-a141-23b8ae33f7b2.rdf.xml +289 -0
  78. udata/harvest/tests/factories.py +1 -1
  79. udata/harvest/tests/test_actions.py +11 -9
  80. udata/harvest/tests/test_api.py +4 -5
  81. udata/harvest/tests/test_base_backend.py +5 -4
  82. udata/harvest/tests/test_dcat_backend.py +50 -19
  83. udata/harvest/tests/test_models.py +2 -4
  84. udata/harvest/tests/test_notifications.py +2 -4
  85. udata/harvest/tests/test_tasks.py +2 -3
  86. udata/mail.py +90 -53
  87. udata/migrations/2025-01-05-dataservices-fields-changes.py +8 -14
  88. udata/migrations/2025-10-21-remove-ckan-harvest-modified-at.py +28 -0
  89. udata/migrations/2025-10-29-harvesters-sources-integrity.py +27 -0
  90. udata/mongo/taglist_field.py +3 -3
  91. udata/rdf.py +32 -15
  92. udata/sentry.py +3 -4
  93. udata/settings.py +7 -2
  94. udata/tags.py +5 -5
  95. udata/tasks.py +3 -3
  96. udata/templates/mail/message.html +65 -0
  97. udata/templates/mail/message.txt +16 -0
  98. udata/tests/__init__.py +40 -58
  99. udata/tests/api/__init__.py +87 -2
  100. udata/tests/api/test_activities_api.py +17 -23
  101. udata/tests/api/test_auth_api.py +2 -4
  102. udata/tests/api/test_contact_points.py +48 -54
  103. udata/tests/api/test_dataservices_api.py +57 -37
  104. udata/tests/api/test_datasets_api.py +146 -49
  105. udata/tests/api/test_me_api.py +4 -6
  106. udata/tests/api/test_organizations_api.py +19 -38
  107. udata/tests/api/test_reports_api.py +0 -4
  108. udata/tests/api/test_reuses_api.py +92 -19
  109. udata/tests/api/test_security_api.py +124 -0
  110. udata/tests/api/test_swagger.py +2 -3
  111. udata/tests/api/test_tags_api.py +6 -7
  112. udata/tests/api/test_transfer_api.py +0 -2
  113. udata/tests/api/test_user_api.py +8 -10
  114. udata/tests/apiv2/test_datasets.py +0 -4
  115. udata/tests/apiv2/test_me_api.py +0 -2
  116. udata/tests/apiv2/test_organizations.py +0 -2
  117. udata/tests/apiv2/test_swagger.py +2 -3
  118. udata/tests/apiv2/test_topics.py +0 -2
  119. udata/tests/cli/test_cli_base.py +14 -12
  120. udata/tests/cli/test_db_cli.py +51 -54
  121. udata/tests/contact_point/test_contact_point_models.py +2 -2
  122. udata/tests/dataservice/test_csv_adapter.py +2 -5
  123. udata/tests/dataservice/test_dataservice_rdf.py +8 -6
  124. udata/tests/dataservice/test_dataservice_tasks.py +36 -38
  125. udata/tests/dataset/test_csv_adapter.py +2 -5
  126. udata/tests/dataset/test_dataset_actions.py +2 -4
  127. udata/tests/dataset/test_dataset_commands.py +2 -4
  128. udata/tests/dataset/test_dataset_events.py +3 -3
  129. udata/tests/dataset/test_dataset_model.py +6 -7
  130. udata/tests/dataset/test_dataset_rdf.py +201 -12
  131. udata/tests/dataset/test_dataset_recommendations.py +2 -2
  132. udata/tests/dataset/test_dataset_tasks.py +66 -68
  133. udata/tests/dataset/test_resource_preview.py +39 -48
  134. udata/tests/dataset/test_transport_tasks.py +2 -2
  135. udata/tests/features/territories/__init__.py +0 -6
  136. udata/tests/features/territories/test_territories_api.py +25 -24
  137. udata/tests/forms/test_current_user_field.py +2 -2
  138. udata/tests/forms/test_dict_field.py +2 -4
  139. udata/tests/forms/test_extras_fields.py +2 -3
  140. udata/tests/forms/test_image_field.py +2 -2
  141. udata/tests/forms/test_model_field.py +2 -4
  142. udata/tests/forms/test_publish_as_field.py +2 -4
  143. udata/tests/forms/test_user_forms.py +26 -29
  144. udata/tests/frontend/test_auth.py +2 -3
  145. udata/tests/frontend/test_csv.py +5 -6
  146. udata/tests/frontend/test_error_handlers.py +2 -3
  147. udata/tests/frontend/test_hooks.py +5 -7
  148. udata/tests/frontend/test_markdown.py +3 -4
  149. udata/tests/helpers.py +2 -7
  150. udata/tests/metrics/test_metrics.py +52 -48
  151. udata/tests/metrics/test_tasks.py +154 -150
  152. udata/tests/organization/test_csv_adapter.py +2 -5
  153. udata/tests/organization/test_notifications.py +2 -4
  154. udata/tests/organization/test_organization_model.py +3 -4
  155. udata/tests/organization/test_organization_rdf.py +2 -8
  156. udata/tests/plugin.py +6 -110
  157. udata/tests/reuse/test_reuse_model.py +3 -4
  158. udata/tests/site/test_site_api.py +0 -2
  159. udata/tests/site/test_site_csv_exports.py +0 -2
  160. udata/tests/site/test_site_metrics.py +2 -4
  161. udata/tests/site/test_site_model.py +2 -2
  162. udata/tests/site/test_site_rdf.py +4 -7
  163. udata/tests/test_activity.py +3 -3
  164. udata/tests/test_api_fields.py +6 -9
  165. udata/tests/test_cors.py +0 -2
  166. udata/tests/test_dcat_commands.py +2 -3
  167. udata/tests/test_discussions.py +2 -7
  168. udata/tests/test_mail.py +150 -114
  169. udata/tests/test_migrations.py +413 -419
  170. udata/tests/test_model.py +10 -11
  171. udata/tests/test_notifications.py +2 -3
  172. udata/tests/test_owned.py +3 -3
  173. udata/tests/test_rdf.py +19 -15
  174. udata/tests/test_routing.py +5 -5
  175. udata/tests/test_storages.py +6 -5
  176. udata/tests/test_tags.py +2 -4
  177. udata/tests/test_topics.py +2 -4
  178. udata/tests/test_transfer.py +4 -5
  179. udata/tests/topic/test_topic_tasks.py +25 -27
  180. udata/tests/user/test_user_rdf.py +2 -8
  181. udata/tests/user/test_user_tasks.py +3 -5
  182. udata/tests/workers/test_jobs_commands.py +2 -2
  183. udata/tests/workers/test_tasks_routing.py +27 -27
  184. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  185. udata/translations/ar/LC_MESSAGES/udata.po +369 -435
  186. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  187. udata/translations/de/LC_MESSAGES/udata.po +371 -437
  188. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  189. udata/translations/es/LC_MESSAGES/udata.po +369 -435
  190. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  191. udata/translations/fr/LC_MESSAGES/udata.po +381 -447
  192. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  193. udata/translations/it/LC_MESSAGES/udata.po +371 -437
  194. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  195. udata/translations/pt/LC_MESSAGES/udata.po +371 -437
  196. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  197. udata/translations/sr/LC_MESSAGES/udata.po +372 -438
  198. udata/translations/udata.pot +379 -440
  199. udata/utils.py +14 -2
  200. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/METADATA +1 -2
  201. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/RECORD +205 -242
  202. udata/templates/mail/account_deleted.html +0 -5
  203. udata/templates/mail/account_deleted.txt +0 -6
  204. udata/templates/mail/account_inactivity.html +0 -40
  205. udata/templates/mail/account_inactivity.txt +0 -31
  206. udata/templates/mail/badge_added_association.html +0 -33
  207. udata/templates/mail/badge_added_association.txt +0 -11
  208. udata/templates/mail/badge_added_certified.html +0 -33
  209. udata/templates/mail/badge_added_certified.txt +0 -11
  210. udata/templates/mail/badge_added_company.html +0 -33
  211. udata/templates/mail/badge_added_company.txt +0 -11
  212. udata/templates/mail/badge_added_local_authority.html +0 -33
  213. udata/templates/mail/badge_added_local_authority.txt +0 -11
  214. udata/templates/mail/badge_added_public_service.html +0 -33
  215. udata/templates/mail/badge_added_public_service.txt +0 -11
  216. udata/templates/mail/discussion_closed.html +0 -47
  217. udata/templates/mail/discussion_closed.txt +0 -16
  218. udata/templates/mail/inactive_account_deleted.html +0 -5
  219. udata/templates/mail/inactive_account_deleted.txt +0 -6
  220. udata/templates/mail/membership_refused.html +0 -20
  221. udata/templates/mail/membership_refused.txt +0 -11
  222. udata/templates/mail/membership_request.html +0 -46
  223. udata/templates/mail/membership_request.txt +0 -12
  224. udata/templates/mail/new_discussion.html +0 -44
  225. udata/templates/mail/new_discussion.txt +0 -15
  226. udata/templates/mail/new_discussion_comment.html +0 -45
  227. udata/templates/mail/new_discussion_comment.txt +0 -16
  228. udata/templates/mail/new_member.html +0 -27
  229. udata/templates/mail/new_member.txt +0 -11
  230. udata/templates/mail/new_reuse.html +0 -37
  231. udata/templates/mail/new_reuse.txt +0 -9
  232. udata/templates/mail/test.html +0 -6
  233. udata/templates/mail/test.txt +0 -6
  234. udata/templates/mail/user_mail_card.html +0 -26
  235. udata/templates/security/email/base.html +0 -105
  236. udata/templates/security/email/base.txt +0 -6
  237. udata/templates/security/email/button.html +0 -3
  238. udata/templates/security/email/change_notice.html +0 -22
  239. udata/templates/security/email/change_notice.txt +0 -8
  240. udata/templates/security/email/confirmation_instructions.html +0 -20
  241. udata/templates/security/email/confirmation_instructions.txt +0 -7
  242. udata/templates/security/email/login_instructions.html +0 -19
  243. udata/templates/security/email/login_instructions.txt +0 -7
  244. udata/templates/security/email/reset_instructions.html +0 -24
  245. udata/templates/security/email/reset_instructions.txt +0 -9
  246. udata/templates/security/email/reset_notice.html +0 -11
  247. udata/templates/security/email/reset_notice.txt +0 -4
  248. udata/templates/security/email/welcome.html +0 -24
  249. udata/templates/security/email/welcome.txt +0 -9
  250. udata/templates/security/email/welcome_existing.html +0 -32
  251. udata/templates/security/email/welcome_existing.txt +0 -14
  252. udata/terms.md +0 -6
  253. udata/tests/frontend/__init__.py +0 -23
  254. udata/tests/metrics/conftest.py +0 -15
  255. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/WHEEL +0 -0
  256. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/entry_points.txt +0 -0
  257. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/licenses/LICENSE +0 -0
  258. {udata-12.0.2.dev15.dist-info → udata-13.0.1.dev21.dist-info}/top_level.txt +0 -0
@@ -1,5 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
-
3
- {% block body %}
4
- <p style="margin: 0;padding: 0;">{{ _('Your account has now been deleted') }}</p>
5
- {% endblock %}
@@ -1,6 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('Your account has now been deleted') }}.
5
-
6
- {% endblock %}
@@ -1,40 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">
6
- {{ _(
7
- 'We have noticed that your account associated to (%(user_email)s) has been inactive for %(inactivity_years)d years or more'
8
- ' on %(site)s, the open platform for public data.',
9
- user_email=user.email,
10
- inactivity_years=config.YEARS_OF_INACTIVITY_BEFORE_DELETION,
11
- site=config.SITE_TITLE
12
- )
13
- }}
14
- </p>
15
- <br/>
16
- <p style="margin: 0;padding: 0;"><b>
17
- {{ _(
18
- 'If you want to keep your account, please log in with your account on %(home)s.',
19
- home=homepage_url()
20
- )
21
- }}
22
- </b></p>
23
- <br/>
24
- <p style="margin: 0;padding: 0;">
25
- {{ _(
26
- 'Without logging in, your account will be deleted within %(notify_delay)d days.',
27
- notify_delay=config.DAYS_BEFORE_ACCOUNT_INACTIVITY_NOTIFY_DELAY
28
- )
29
- }}
30
- </p>
31
- <br/>
32
- <p style="margin: 0;padding: 0;">
33
- {{ _(
34
- 'This account is not tied to your other administration accounts and '
35
- 'you can always re-create an account on the %(site)s platform if necessary.',
36
- site=config.SITE_TITLE
37
- )
38
- }}
39
- </p>
40
- {% endblock %}
@@ -1,31 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _(
5
- 'We have noticed that your account associated to (%(user_email)s) has been inactive for %(inactivity_years)d years or more'
6
- ' on %(site)s, the open platform for public data.',
7
- user_email=user.email,
8
- inactivity_years=config.YEARS_OF_INACTIVITY_BEFORE_DELETION,
9
- site=config.SITE_TITLE
10
- )
11
- }}
12
-
13
- {{ _(
14
- 'If you want to keep your account, please log in with your account on %(home)s.',
15
- home=homepage_url()
16
- )
17
- }}
18
-
19
- {{ _(
20
- 'Without logging in, your account will be deleted within %(notify_delay)d days.',
21
- notify_delay=config.DAYS_BEFORE_ACCOUNT_INACTIVITY_NOTIFY_DELAY
22
- )
23
- }}
24
- {{
25
- _(
26
- 'This account is not tied to your other administration accounts and '
27
- 'you can always re-create an account on the %(site)s platform if necessary',
28
- site=config.SITE_TITLE
29
- )
30
- }}
31
- {% endblock %}
@@ -1,33 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s has identified your organization "%(name)s" as an association',
7
- user=(
8
- '<a href="'|safe
9
- + badge.created_by.url_for(_mailCampaign=True)
10
- + '">'|safe
11
- + badge.created_by.fullname
12
- + '</a>'|safe
13
- ),
14
- name=(
15
- '<a href="'|safe
16
- + organization.url_for(_mailCampaign=True)
17
- + '">'|safe
18
- + organization.name|string
19
- + '</a>'|safe
20
- )
21
- ) }}.</p>
22
- <br/>
23
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td align="center">
26
- {{ mail_button(
27
- _('See the badge'),
28
- organization.url_for(_mailCampaign=True)
29
- ) }}
30
- </td>
31
- </tr>
32
- </table>
33
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s has identified your organization "%(name)s" as an association',
5
- name=organization.name,
6
- user=badge.created_by.fullname
7
- ) }}.
8
-
9
- {{ _('You can see the badge on this page:') }}
10
- {{ organization.url_for(_mailCampaign=True) }}
11
- {% endblock %}
@@ -1,33 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s has certified your organization "%(name)s"',
7
- user=(
8
- '<a href="'|safe
9
- + badge.created_by.url_for(_mailCampaign=True)
10
- + '">'|safe
11
- + badge.created_by.fullname
12
- + '</a>'|safe
13
- ),
14
- name=(
15
- '<a href="'|safe
16
- + organization.url_for(_mailCampaign=True)
17
- + '">'|safe
18
- + organization.name|string
19
- + '</a>'|safe
20
- )
21
- ) }}.</p>
22
- <br/>
23
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td align="center">
26
- {{ mail_button(
27
- _('See the badge'),
28
- organization.url_for(_mailCampaign=True)
29
- ) }}
30
- </td>
31
- </tr>
32
- </table>
33
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s has certified your organization "%(name)s"',
5
- name=organization.name,
6
- user=badge.created_by.fullname
7
- ) }}.
8
-
9
- {{ _('You can see the badge on this page:') }}
10
- {{ organization.url_for(_mailCampaign=True) }}
11
- {% endblock %}
@@ -1,33 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s has identified your organization "%(name)s" as a company',
7
- user=(
8
- '<a href="'|safe
9
- + badge.created_by.url_for(_mailCampaign=True)
10
- + '">'|safe
11
- + badge.created_by.fullname
12
- + '</a>'|safe
13
- ),
14
- name=(
15
- '<a href="'|safe
16
- + organization.url_for(_mailCampaign=True)
17
- + '">'|safe
18
- + organization.name|string
19
- + '</a>'|safe
20
- )
21
- ) }}.</p>
22
- <br/>
23
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td align="center">
26
- {{ mail_button(
27
- _('See the badge'),
28
- organization.url_for(_mailCampaign=True)
29
- ) }}
30
- </td>
31
- </tr>
32
- </table>
33
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s has identified your organization "%(name)s" as a company',
5
- name=organization.name,
6
- user=badge.created_by.fullname
7
- ) }}.
8
-
9
- {{ _('You can see the badge on this page:') }}
10
- {{ organization.url_for(_mailCampaign=True) }}
11
- {% endblock %}
@@ -1,33 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s has identified your organization "%(name)s" as a local authority',
7
- user=(
8
- '<a href="'|safe
9
- + badge.created_by.url_for(_mailCampaign=True)
10
- + '">'|safe
11
- + badge.created_by.fullname
12
- + '</a>'|safe
13
- ),
14
- name=(
15
- '<a href="'|safe
16
- + organization.url_for(_mailCampaign=True)
17
- + '">'|safe
18
- + organization.name|string
19
- + '</a>'|safe
20
- )
21
- ) }}.</p>
22
- <br/>
23
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td align="center">
26
- {{ mail_button(
27
- _('See the badge'),
28
- organization.url_for(_mailCampaign=True)
29
- ) }}
30
- </td>
31
- </tr>
32
- </table>
33
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s has identified your organization "%(name)s" as a local authority',
5
- name=organization.name,
6
- user=badge.created_by.fullname
7
- ) }}.
8
-
9
- {{ _('You can see the badge on this page:') }}
10
- {{ organization.url_for(_mailCampaign=True) }}
11
- {% endblock %}
@@ -1,33 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s has identified your organization "%(name)s" as public service',
7
- user=(
8
- '<a href="'|safe
9
- + badge.created_by.url_for(_mailCampaign=True)
10
- + '">'|safe
11
- + badge.created_by.fullname
12
- + '</a>'|safe
13
- ),
14
- name=(
15
- '<a href="'|safe
16
- + organization.url_for(_mailCampaign=True)
17
- + '">'|safe
18
- + organization.name|string
19
- + '</a>'|safe
20
- )
21
- ) }}.</p>
22
- <br/>
23
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td align="center">
26
- {{ mail_button(
27
- _('See the badge'),
28
- organization.url_for(_mailCampaign=True)
29
- ) }}
30
- </td>
31
- </tr>
32
- </table>
33
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s has identified your organization "%(name)s" as a public service',
5
- name=organization.name,
6
- user=badge.created_by.fullname
7
- ) }}.
8
-
9
- {{ _('You can see the badge on this page:') }}
10
- {{ organization.url_for(_mailCampaign=True) }}
11
- {% endblock %}
@@ -1,47 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s closed an discussion on your %(type)s %(subject)s',
7
- type=discussion.subject.verbose_name,
8
- user=(
9
- '<a href="'|safe
10
- + discussion.closed_by_org_or_user.url_for(_mailCampaign=True)
11
- + '">'|safe
12
- + discussion.closed_by_name
13
- + '</a>'|safe
14
- ),
15
- subject=(
16
- '<a href="'|safe
17
- + discussion.url_for(_mailCampaign=True)
18
- + '">'|safe
19
- + discussion.subject|string
20
- + '</a>'|safe
21
- )
22
- )
23
- }}.</p>
24
- <br/>
25
- <p style="margin: 0;padding: 0;">
26
- <b>{{ _('Title') }}:</b>
27
- {{ discussion.title }}
28
- </p>
29
-
30
- {% if message %}
31
- <p style="margin: 0;padding: 0;">
32
- <b>{{ _('Message') }}:</b>
33
- {{ message.content | markdown }}
34
- </p>
35
- {% endif %}
36
-
37
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
38
- <tr>
39
- <td align="center">
40
- {{ mail_button(
41
- _('See the discussion'),
42
- discussion.url_for(_mailCampaign=True)
43
- ) }}
44
- </td>
45
- </tr>
46
- </table>
47
- {% endblock %}
@@ -1,16 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s closed an discussion on your %(type)s %(subject)s',
5
- type=discussion.subject.verbose_name,
6
- user=discussion.closed_by_name,
7
- subject=discussion.subject|string
8
- ) }}.
9
-
10
-
11
- {{ _('Title') }}: {{ discussion.title }}
12
-
13
-
14
- {{ _('You can see the discussion on this page:') }}
15
- {{ discussion.url_for(_mailCampaign=True) }}
16
- {% endblock %}
@@ -1,5 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
-
3
- {% block body %}
4
- <p style="margin: 0;padding: 0;">{{ _('Your account on %(site)s has been deleted due to inactivity', site=config.SITE_TITLE) }}</p>
5
- {% endblock %}
@@ -1,6 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('Your account on %(site)s has been deleted due to inactivity', site=config.SITE_TITLE) }}.
5
-
6
- {% endblock %}
@@ -1,20 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
-
5
- {% block body %}
6
- <p style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;">
7
- {{ _('Your membership for the organization "%(org)s" has been refused',
8
- org=(
9
- '<a href="'|safe
10
- + org.url_for(_mailCampaign=True)
11
- + '">'|safe
12
- + org.name
13
- + '</a>'|safe
14
- )
15
- ) }}.</p>
16
-
17
- <br/>
18
- <p style="margin: 0;padding: 0;"><b>{{ _('Refusal reason') }}:</b></p>
19
- <p style="margin: 0;padding: 0;">{{ request.refusal_comment }}</p>
20
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('Your membership for the organization "%(org)s" has been refused',
5
- org=org.name
6
- ) }}.
7
-
8
- {{ _('Refusal reason') }}:
9
-
10
- {{ request.refusal_comment }}
11
- {% endblock %}
@@ -1,46 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
- {% from 'mail/user_mail_card.html' import user_mail_card with context %}
4
-
5
-
6
- {% block body %}
7
- <p style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;">
8
- {{ _('As an administrator of "%(org)s" you are being informed than a new membership request from %(user)s is pending for validation',
9
- user=(
10
- '<a href="'|safe
11
- + request.user.url_for(_mailCampaign=True)
12
- + '">'|safe
13
- + request.user.fullname
14
- + '</a>'|safe
15
- ),
16
- org=(
17
- '<a href="'|safe
18
- + org.url_for(_mailCampaign=True)
19
- + '">'|safe
20
- + org.name
21
- + '</a>'|safe
22
- ),
23
- ) }}.</p>
24
-
25
- <br/>
26
-
27
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
28
- <tr>
29
- <td width="15%"></td>
30
- <td width="70%" align="center">
31
- {{ user_mail_card(request.user, request.comment) }}
32
- </td>
33
- <td width="15%"></td>
34
- </tr>
35
- </table>
36
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
37
- <tr>
38
- <td align="center">
39
- {{ mail_button(
40
- _('See the request'),
41
- cdata_url('/admin/organizations/' ~ org.id ~ '/members/')
42
- ) }}
43
- </td>
44
- </tr>
45
- </table>
46
- {% endblock %}
@@ -1,12 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('As an administrator of "%(org)s" you are being informed than a new membership request from %(user)s is pending for validation',
5
- user=request.user.fullname,
6
- org=org.name
7
- ) }}.
8
-
9
-
10
- {{ _('You can go on your organization backoffice to accept or refuse the request') }}:
11
- {{ cdata_url('/admin/organizations/' ~ org.id ~ '/members/') }}
12
- {% endblock %}
@@ -1,44 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s submitted a new discussion on your %(type)s %(subject)s',
7
- type=discussion.subject.verbose_name,
8
- user=(
9
- '<a href="'|safe
10
- + discussion.user.url_for(_mailCampaign=True)
11
- + '">'|safe
12
- + discussion.user.fullname
13
- + '</a>'|safe
14
- ),
15
- subject=(
16
- '<a href="'|safe
17
- + discussion.url_for(_mailCampaign=True)
18
- + '">'|safe
19
- + discussion.subject|string
20
- + '</a>'|safe
21
- )
22
- ) }}.</p>
23
- <br/>
24
- <p style="margin: 0;padding: 0;">
25
- <b>{{ _('Title') }}:</b>
26
- {{ discussion.title }}
27
- </p>
28
-
29
- <p style="margin: 0;padding: 0;">
30
- <b>{{ _('Message') }}:</b>
31
- {{ message.content | markdown }}
32
- </p>
33
-
34
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
35
- <tr>
36
- <td align="center">
37
- {{ mail_button(
38
- _('See the discussion'),
39
- discussion.url_for(_mailCampaign=True)
40
- ) }}
41
- </td>
42
- </tr>
43
- </table>
44
- {% endblock %}
@@ -1,15 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s submitted a new discussion on your %(type)s %(subject)s',
5
- type=discussion.subject.verbose_name,
6
- user=discussion.user.fullname,
7
- subject=discussion.subject|string
8
- ) }}.
9
-
10
-
11
- {{ _('Title') }}: {{ discussion.title }}
12
-
13
- {{ _('You can see the discussion on this page:') }}
14
- {{ discussion.subject.url_for(_mailCampaign=True) }}
15
- {% endblock %}
@@ -1,45 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
- {% block body %}
5
- <p style="margin: 0;padding: 0;">{{
6
- _('%(user)s commented an discussion on your %(type)s %(subject)s',
7
- type=discussion.subject.verbose_name,
8
- user=(
9
- '<a href="'|safe
10
- + message.posted_by_org_or_user.url_for(_mailCampaign=True)
11
- + '">'|safe
12
- + message.posted_by_name
13
- + '</a>'|safe
14
- ),
15
- subject=(
16
- '<a href="'|safe
17
- + discussion.url_for(_mailCampaign=True)
18
- + '">'|safe
19
- + discussion.subject|string
20
- + '</a>'|safe
21
- )
22
- )
23
- }}.</p>
24
- <br/>
25
- <p style="margin: 0;padding: 0;">
26
- <b>{{ _('Title') }}:</b>
27
- {{ discussion.title }}
28
- </p>
29
-
30
- <p style="margin: 0;padding: 0;">
31
- <b>{{ _('Message') }}:</b>
32
- {{ message.content | markdown }}
33
- </p>
34
-
35
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
36
- <tr>
37
- <td align="center">
38
- {{ mail_button(
39
- _('See the discussion'),
40
- discussion.url_for(_mailCampaign=True)
41
- ) }}
42
- </td>
43
- </tr>
44
- </table>
45
- {% endblock %}
@@ -1,16 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('%(user)s commented an discussion on your %(type)s %(subject)s',
5
- type=discussion.subject.verbose_name,
6
- user=message.posted_by.fullname,
7
- subject=discussion.subject|string
8
- ) }}.
9
-
10
-
11
- {{ _('Title') }}: {{ discussion.title }}
12
-
13
-
14
- {{ _('You can see the discussion on this page:') }}
15
- {{ discussion.url_for(_mailCampaign=True) }}
16
- {% endblock %}
@@ -1,27 +0,0 @@
1
- {% extends 'mail/base.html' %}
2
- {% from 'mail/button.html' import mail_button %}
3
-
4
-
5
- {% block body %}
6
- <p style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;">
7
- {{ _('Congratulations, you are now a member of the organization "%(org)s"',
8
- org=(
9
- '<a href="'|safe
10
- + org.url_for(_mailCampaign=True)
11
- + '">'|safe
12
- + org.name
13
- + '</a>'|safe
14
- ),
15
- ) }}.</p>
16
-
17
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
18
- <tr>
19
- <td align="center">
20
- {{ mail_button(
21
- _('See the organization page'),
22
- org.url_for(_mailCampaign=True)
23
- ) }}
24
- </td>
25
- </tr>
26
- </table>
27
- {% endblock %}
@@ -1,11 +0,0 @@
1
- {% extends 'mail/base.txt' %}
2
-
3
- {% block body %}
4
- {{ _('Congratulations, you are now a member of the organization "%(org)s"',
5
- org=org.name
6
- ) }}.
7
-
8
-
9
- {{ _('You can go on your organization page') }}:
10
- {{ org.url_for(_mailCampaign=True) }}
11
- {% endblock %}