udata 14.0.2.dev1__py3-none-any.whl → 14.0.3.dev1__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.
udata/auth/__init__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ import typing as t
2
3
 
3
4
  from flask import render_template
4
5
  from flask_principal import Permission as BasePermission
@@ -10,6 +11,7 @@ from flask_security import Security as Security
10
11
  from flask_security import current_user as current_user
11
12
  from flask_security import login_required as login_required
12
13
  from flask_security import login_user as login_user
14
+ from flask_security import mail_util
13
15
 
14
16
  from . import mails
15
17
 
@@ -36,6 +38,24 @@ class Permission(BasePermission):
36
38
  admin_permission = Permission()
37
39
 
38
40
 
41
+ class NoopMailUtil(mail_util.MailUtil):
42
+ def send_mail(
43
+ self,
44
+ template: str,
45
+ subject: str,
46
+ recipient: str,
47
+ sender: t.Union[str, tuple],
48
+ body: str,
49
+ html: t.Optional[str],
50
+ **kwargs: t.Any,
51
+ ) -> None:
52
+ log.debug(f"Sending mail {subject} to {recipient}")
53
+ log.debug(body)
54
+ log.debug(html)
55
+
56
+ return None
57
+
58
+
39
59
  def init_app(app):
40
60
  from udata.models import datastore
41
61
 
@@ -61,6 +81,11 @@ def init_app(app):
61
81
  app.config["CDATA_BASE_URL"] + "?flash=confirm_error",
62
82
  )
63
83
 
84
+ # Same logic as in our own mail system :DisableMail
85
+ debug = app.config.get("DEBUG", False)
86
+ send_mail = app.config.get("SEND_MAIL", not debug)
87
+ mail_util_cls = None if send_mail else NoopMailUtil
88
+
64
89
  security.init_app(
65
90
  app,
66
91
  datastore,
@@ -72,6 +97,7 @@ def init_app(app):
72
97
  reset_password_form=ExtendedResetPasswordForm,
73
98
  forgot_password_form=ExtendedForgotPasswordForm,
74
99
  password_util_cls=UdataPasswordUtil,
100
+ mail_util_cls=mail_util_cls,
75
101
  )
76
102
 
77
103
  security_bp = create_security_blueprint(app, app.extensions["security"], "security_blueprint")
@@ -13,6 +13,6 @@ class ReasonCategoriesAPI(API):
13
13
  def get(self):
14
14
  """List all limitation reason categories"""
15
15
  return [
16
- {"value": category.value, "label": category.label}
16
+ {"value": category.value, "label": category.label, "definition": category.definition}
17
17
  for category in InspireLimitationCategory
18
18
  ]
@@ -63,31 +63,35 @@ class InspireLimitationCategory(StrEnum):
63
63
  match self:
64
64
  case InspireLimitationCategory.PUBLIC_AUTHORITIES:
65
65
  return _(
66
- "The confidentiality of the proceedings of public authorities, where such confidentiality is provided for by law."
66
+ "Public access to datasets and services would adversely affect the confidentiality of the proceedings of public authorities, where such confidentiality is provided for by law."
67
67
  )
68
68
  case InspireLimitationCategory.INTERNATIONAL_RELATIONS:
69
- return _("International relations, public security or national defence.")
69
+ return _(
70
+ "Public access to datasets and services would adversely affect international relations, public security or national defence."
71
+ )
70
72
  case InspireLimitationCategory.COURSE_OF_JUSTICE:
71
73
  return _(
72
- "The course of justice, the ability of any person to receive a fair trial or the ability of a public authority to conduct an enquiry of a criminal or disciplinary nature."
74
+ "Public access to datasets and services would adversely affect the course of justice, the ability of any person to receive a fair trial or the ability of a public authority to conduct an enquiry of a criminal or disciplinary nature."
73
75
  )
74
76
  case InspireLimitationCategory.COMMERCIAL_CONFIDENTIALITY:
75
77
  return _(
76
- "The confidentiality of commercial or industrial information, where such confidentiality is provided for by national or Community law to protect a legitimate economic interest."
78
+ "Public access to datasets and services would adversely affect the confidentiality of commercial or industrial information, where such confidentiality is provided for by national or Community law to protect a legitimate economic interest, including the public interest in maintaining statistical confidentiality and tax secrecy."
77
79
  )
78
80
  case InspireLimitationCategory.INTELLECTUAL_PROPERTY:
79
- return _("Intellectual property rights.")
81
+ return _(
82
+ "Public access to datasets and services would adversely affect intellectual property rights."
83
+ )
80
84
  case InspireLimitationCategory.PERSONAL_DATA:
81
85
  return _(
82
- "The confidentiality of personal data and/or files relating to a natural person where that person has not consented to the disclosure."
86
+ "Public access to datasets and services would adversely affect the confidentiality of personal data and/or files relating to a natural person where that person has not consented to the disclosure of the information to the public, where such confidentiality is provided for by national or Community law."
83
87
  )
84
88
  case InspireLimitationCategory.VOLUNTARY_SUPPLIER:
85
89
  return _(
86
- "The interests or protection of any person who supplied the information requested on a voluntary basis without being under a legal obligation."
90
+ "Public access to datasets and services would adversely affect the interests or protection of any person who supplied the information requested on a voluntary basis without being under, or capable of being put under, a legal obligation to do so, unless that person has consented to the release of the information concerned."
87
91
  )
88
92
  case InspireLimitationCategory.ENVIRONMENTAL_PROTECTION:
89
93
  return _(
90
- "The protection of the environment to which such information relates, such as the location of rare species."
94
+ "Public access to datasets and services would adversely affect the protection of the environment to which such information relates, such as the location of rare species."
91
95
  )
92
96
  case _:
93
97
  assert_never(self)
udata/harvest/api.py CHANGED
@@ -437,7 +437,7 @@ class JobAPI(API):
437
437
  @api.expect(parser)
438
438
  @api.marshal_with(job_fields)
439
439
  def get(self, ident):
440
- """List all jobs for a given source"""
440
+ """Get a single job given an ID"""
441
441
  return actions.get_job(ident)
442
442
 
443
443
 
udata/mail.py CHANGED
@@ -28,7 +28,7 @@ class LabelledContent:
28
28
  label: LazyString
29
29
  content: str
30
30
  inline: bool = False
31
- truncated_at: int = 50
31
+ truncated_at: int = 200
32
32
 
33
33
  @property
34
34
  def truncated_content(self) -> str:
@@ -90,6 +90,10 @@ def init_app(app):
90
90
 
91
91
 
92
92
  def send_mail(recipients: object | list, message: MailMessage):
93
+ # Security mails are sent via the Flask-Security package and not
94
+ # from this function. Disabling mail sending logic is duplicated
95
+ # in :DisableMail.
96
+ # Flask-Security templates are rendered in `render_mail_template`.
93
97
  debug = current_app.config.get("DEBUG", False)
94
98
  send_mail = current_app.config.get("SEND_MAIL", not debug)
95
99
 
@@ -7,35 +7,7 @@
7
7
  </head>
8
8
  <body style="font-family: Marianne, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; background-color: #ffffff; max-width: 600px; margin: 0 auto; padding: 20px;">
9
9
  <div style="margin-bottom: 30px;">
10
- <svg width="186" height="59" viewBox="0 0 186 59" fill="none" xmlns="http://www.w3.org/2000/svg">
11
- <path d="M143.469 29.5086H145.86L152.728 46.4699L159.558 29.5086H161.986L154.208 48.6328H151.248L143.469 29.5086Z" fill="#3558A2"/>
12
- <path d="M138.218 40.5126V29.5086H140.419V40.4746C140.419 46.1664 137.155 49.3917 132.26 49.3917C127.328 49.3917 124.026 46.1664 124.026 40.4746V29.5086H126.265V40.5126C126.265 44.8383 128.656 47.2668 132.26 47.2668C135.789 47.2668 138.218 44.8383 138.218 40.5126Z" fill="#3558A2"/>
13
- <path d="M109.662 28.7498C115.809 28.7498 119.945 33.6067 119.945 39.0708C119.945 44.5348 115.809 49.3918 109.662 49.3918C103.553 49.3918 99.4167 44.5348 99.4167 39.0708C99.4167 33.6067 103.553 28.7498 109.662 28.7498ZM109.7 47.2669C114.215 47.2669 117.554 43.3965 117.554 39.0708C117.554 34.6692 114.215 30.8747 109.7 30.8747C105.033 30.8747 101.731 34.7071 101.731 39.0708C101.731 43.4344 105.033 47.2669 109.7 47.2669Z" fill="#3558A2"/>
14
- <path d="M79.7158 52.1617C79.7158 50.1886 80.7024 48.6328 82.6755 47.1909C81.7269 46.5459 81.2716 45.5214 81.2716 44.4968C81.2716 43.017 82.1822 41.7269 83.6621 40.8541C81.9546 39.602 80.968 37.6288 80.968 35.5039C80.968 31.8991 83.8139 28.7118 88.2155 28.7118C89.5435 28.7118 90.7578 29.0153 91.7823 29.5086H98.9539V31.4817H94.1728C95.0076 32.6201 95.5009 34.024 95.5009 35.5039C95.5009 39.1087 92.655 42.296 88.2155 42.296C87.0771 42.296 86.0526 42.0684 85.1419 41.7269C84.0036 42.3719 83.3965 43.3205 83.3965 44.1553C83.3965 45.0281 83.8139 45.7111 85.2178 45.7111H91.0613C96.2598 45.7111 98.4227 48.1016 98.4227 51.4028C98.4227 55.2732 94.4764 58.1191 88.8605 58.1191C83.4724 58.1191 79.7158 55.8424 79.7158 52.1617ZM88.2534 40.3988C91.4787 40.3988 93.2621 38.0842 93.2621 35.5039C93.2621 32.8478 91.4787 30.609 88.2534 30.609C84.9522 30.609 83.1688 32.8478 83.1688 35.5039C83.1688 38.1221 84.9522 40.3988 88.2534 40.3988ZM81.9546 51.972C81.9546 54.5522 84.7625 56.1839 88.8226 56.1839C93.2242 56.1839 96.1839 54.4005 96.1839 51.5166C96.1839 49.4297 95.0456 47.7601 90.9854 47.7601H84.6487C82.9032 48.9364 81.9546 50.2645 81.9546 51.972Z" fill="#3558A2"/>
15
- <path d="M65.9257 49.2021C62.0933 49.2021 59.4751 47.0013 59.4751 43.4724C59.4751 40.5886 61.7138 38.4257 65.8119 37.7427L71.6554 36.7561V36.2628C71.6554 34.2518 70.1376 32.9616 67.9368 32.9616C66.0775 32.9616 64.6356 33.8344 63.6111 35.2383L60.0822 32.5442C61.7897 30.1917 64.5977 28.7498 68.0886 28.7498C73.6285 28.7498 76.4744 32.051 76.4744 36.2628V48.6329H71.6554V46.7736C70.4412 48.2534 68.1645 49.2021 65.9257 49.2021ZM64.2562 43.2447C64.2562 44.5348 65.2807 45.3696 66.9123 45.3696C69.1131 45.3696 70.7068 44.3451 71.6554 42.8273V40.1332L67.102 40.8921C65.0909 41.2336 64.2562 42.0684 64.2562 43.2447Z" fill="#3558A2"/>
16
- <path d="M46.6593 41.6509V33.8343H43.0925V29.5086H46.6593V24.7275H51.5163V29.5086H57.3598V33.8343H51.5163V41.6509C51.5163 43.7759 52.6546 44.6106 54.5519 44.6106C55.88 44.6106 56.7527 44.4589 57.3978 44.1932V48.4051C56.4491 48.8225 55.3108 49.0123 53.7171 49.0123C48.936 49.0123 46.6593 46.3182 46.6593 41.6509Z" fill="#3558A2"/>
17
- <path d="M30.5161 49.2021C26.6836 49.2021 24.0654 47.0013 24.0654 43.4724C24.0654 40.5886 26.3042 38.4257 30.4022 37.7427L36.2457 36.7561V36.2628C36.2457 34.2518 34.7279 32.9616 32.5271 32.9616C30.6678 32.9616 29.2259 33.8344 28.2014 35.2383L24.6725 32.5442C26.3801 30.1917 29.188 28.7498 32.6789 28.7498C38.2189 28.7498 41.0647 32.051 41.0647 36.2628V48.6329H36.2457V46.7736C35.0315 48.2534 32.7548 49.2021 30.5161 49.2021ZM28.8465 43.2447C28.8465 44.5348 29.871 45.3696 31.5026 45.3696C33.7034 45.3696 35.2971 44.3451 36.2457 42.8273V40.1332L31.6924 40.8921C29.6813 41.2336 28.8465 42.0684 28.8465 43.2447Z" fill="#3558A2"/>
18
- <path d="M0 39.0706C0 33.4927 3.68066 28.7496 9.71389 28.7496C12.2941 28.7496 14.1534 29.5465 15.6333 31.0263V20.1741H20.4902V48.6327H15.6333V47.115C14.1534 48.5948 12.2941 49.3916 9.71389 49.3916C3.68066 49.3916 0 44.6485 0 39.0706ZM5.04667 39.0706C5.04667 42.4098 7.13364 44.8383 10.3969 44.8383C12.5598 44.8383 14.3432 43.9276 15.6333 42.1821V35.9591C14.3432 34.2137 12.5598 33.303 10.3969 33.303C7.13364 33.303 5.04667 35.7315 5.04667 39.0706Z" fill="#3558A2"/>
19
- <path d="M179.017 11.7431C179.017 11.7431 179.017 11.7297 179.017 11.7207C179.008 10.9944 178.619 10.3218 177.994 9.96316L174.864 8.1518C174.573 7.98142 174.238 7.89175 173.894 7.88278C173.845 7.88278 173.8 7.88278 173.751 7.88727C173.509 7.90072 173.281 7.94555 173.067 8.03074C172.982 8.06661 172.901 8.10696 172.821 8.1518L170.916 9.25476L169.731 9.94074C169.66 9.98109 169.593 10.0259 169.53 10.0752C169.53 10.0752 169.503 10.0932 169.499 10.0932C169.248 10.277 169.052 10.5146 168.913 10.7792C168.904 10.7971 168.891 10.815 168.882 10.833C168.873 10.8509 168.864 10.8688 168.859 10.8868C168.734 11.1603 168.667 11.4696 168.667 11.7969V15.2672V15.321C168.667 15.3838 168.672 15.4511 168.681 15.5318C168.681 15.5721 168.69 15.6169 168.699 15.6663C168.734 15.9084 168.815 16.137 168.927 16.3433C169.11 16.684 169.383 16.9665 169.718 17.1593L172.794 18.9393C172.906 19.002 172.991 19.0424 173.076 19.0783C173.29 19.1679 173.518 19.2173 173.751 19.2262C173.76 19.2262 173.769 19.2262 173.777 19.2262C173.997 19.2307 174.22 19.2083 174.435 19.141C174.582 19.0962 174.73 19.0334 174.864 18.9527L177.971 17.1548C178.289 16.971 178.552 16.7065 178.736 16.3881C178.919 16.0698 179.017 15.7066 179.017 15.3434V11.7431Z" fill="#3558A2"/>
20
- <path d="M168.667 18.4043V22.8378V24.1148L173.602 26.9722V21.2617L172.451 20.5965L168.667 18.4043Z" fill="#3558A2"/>
21
- <path d="M178.359 9.68272C178.359 9.68272 178.4 9.71397 178.418 9.72736C178.418 9.72736 178.427 9.73183 178.431 9.73629C178.462 9.75862 178.494 9.78541 178.525 9.80773C178.525 9.80773 178.53 9.8122 178.534 9.81666C178.539 9.82112 178.548 9.82559 178.552 9.83005C178.588 9.86131 178.628 9.89256 178.66 9.92382C178.669 9.93275 178.678 9.94167 178.687 9.9506C178.709 9.97293 178.732 9.99525 178.754 10.0176C178.763 10.0265 178.772 10.0354 178.776 10.0399C178.808 10.0756 178.839 10.1113 178.871 10.1471C178.889 10.1649 178.902 10.1872 178.915 10.2051C178.924 10.2185 178.938 10.2319 178.947 10.2453C178.956 10.2542 178.965 10.2676 178.974 10.2765C179.005 10.3167 179.032 10.3614 179.059 10.406C179.086 10.4507 179.113 10.4908 179.14 10.5355C179.167 10.5846 179.189 10.6337 179.216 10.6828C179.238 10.7275 179.256 10.7677 179.274 10.8123C179.292 10.8525 179.306 10.8971 179.319 10.9373C179.319 10.9463 179.324 10.9507 179.328 10.9597C179.328 10.9686 179.333 10.9775 179.337 10.982C179.351 11.0222 179.364 11.0623 179.377 11.1025C179.395 11.1695 179.409 11.2365 179.418 11.3079C179.418 11.3079 179.418 11.3124 179.418 11.3168C179.418 11.3258 179.422 11.3392 179.422 11.3481C179.422 11.3704 179.431 11.3883 179.436 11.4106C179.449 11.5133 179.458 11.6204 179.458 11.7276V15.1968L180.149 15.5941V9.88363L175.179 7.02615V7.84321L178.207 9.58449C178.256 9.61128 178.306 9.64253 178.355 9.67825L178.359 9.68272Z" fill="#3558A2"/>
22
- <path d="M161.984 7.02615V12.7595L166.954 15.6284V9.89506L161.984 7.02615Z" fill="#3558A2"/>
23
- <path d="M178.969 16.8342C178.929 16.8925 178.884 16.9419 178.84 16.9958C178.809 17.0317 178.777 17.0676 178.746 17.1035C178.697 17.1573 178.639 17.2022 178.586 17.2516C178.559 17.274 178.532 17.3009 178.505 17.3279L179.352 17.8215C179.419 17.8619 179.464 17.9337 179.464 18.0145V22.8032L180.15 23.2026V17.4625L179.005 16.7938C179.005 16.7938 178.982 16.8207 178.973 16.8342H178.969Z" fill="#3558A2"/>
24
- <path d="M172.779 6.64593V7.67751C172.779 7.67751 172.811 7.66858 172.828 7.65965C172.917 7.61946 173.015 7.5882 173.109 7.5614C173.185 7.53908 173.26 7.52121 173.341 7.50782C173.416 7.49442 173.488 7.48102 173.563 7.47209C173.59 7.47209 173.612 7.46316 173.639 7.45869V6.11451L168.704 3.25644V4.15405L172.668 6.44944C172.735 6.48963 172.779 6.56108 172.779 6.64146V6.64593Z" fill="#3558A2"/>
25
- <path d="M161.984 20.3141L166.954 23.1686V17.4551L161.984 14.6006V20.3141Z" fill="#3558A2"/>
26
- <path d="M185.53 20.314V14.6005L180.594 17.455V23.1685L185.53 20.314Z" fill="#3558A2"/>
27
- <path d="M174.048 26.9723L179.018 24.1148V22.9138V18.4043L174.048 21.2618V26.9723Z" fill="#3558A2"/>
28
- <path d="M167.4 15.6284L168.215 15.1533V11.7554C168.215 10.9754 168.585 10.2313 169.209 9.76061C169.209 9.76061 169.217 9.75613 169.222 9.75165C169.222 9.75165 169.226 9.75165 169.231 9.74716C169.24 9.74268 169.249 9.73372 169.253 9.73372C169.333 9.67544 169.391 9.6351 169.458 9.59475L172.335 7.92272V7.02618L167.4 9.89509V15.6284Z" fill="#3558A2"/>
29
- <path d="M185.53 12.7595V7.02618L180.594 9.89509V15.6284L185.53 12.7595Z" fill="#3558A2"/>
30
- <path d="M174.169 7.46644C174.218 7.47089 174.262 7.48426 174.311 7.48871C174.369 7.49762 174.431 7.51099 174.489 7.52435C174.543 7.53772 174.592 7.55554 174.641 7.57336C174.681 7.58672 174.721 7.59563 174.761 7.609V6.63336C174.761 6.55317 174.806 6.48189 174.872 6.44179L179.055 4.02718V3.25647L174.12 6.10767V7.45753C174.12 7.45753 174.155 7.46644 174.173 7.46644H174.169Z" fill="#3558A2"/>
31
- <path d="M168.26 17.9037C168.273 17.8815 168.296 17.8637 168.318 17.8459C168.323 17.8459 168.327 17.837 168.332 17.8325L169.182 17.343C169.182 17.343 169.146 17.3074 169.124 17.2896C169.052 17.2273 168.981 17.165 168.914 17.0937C168.882 17.0626 168.855 17.027 168.829 16.9958C168.775 16.9335 168.726 16.8712 168.681 16.8045C168.672 16.7911 168.658 16.7778 168.645 16.7599L168.623 16.7733L167.4 17.4765V23.1688L168.22 22.697V18.0239C168.22 17.9883 168.233 17.9527 168.246 17.9216C168.246 17.9127 168.255 17.9082 168.26 17.8993V17.9037Z" fill="#3558A2"/>
32
- <path d="M172.132 6.629L167.182 3.76953L162.227 6.629L167.182 9.49294L172.132 6.629Z" fill="#3558A2"/>
33
- <path d="M178.847 2.86394L173.878 0L168.908 2.86394L173.878 5.72341L178.847 2.86394Z" fill="#3558A2"/>
34
- <path d="M180.045 9.30052L180.371 9.49294L185.326 6.629L180.371 3.76953L179.396 4.33337L175.421 6.629L177.514 7.8417L180.045 9.30052Z" fill="#3558A2"/>
35
- <path d="M180.264 16.1917L179.438 15.7158C179.433 15.7469 179.42 15.7825 179.415 15.8136C179.402 15.8892 179.384 15.9648 179.366 16.036C179.353 16.0805 179.335 16.125 179.321 16.165C179.299 16.2317 179.277 16.294 179.245 16.3607C179.236 16.3785 179.232 16.3918 179.228 16.4096L180.376 17.0679L185.328 14.2213L184.617 13.8121L180.492 16.1828C180.457 16.2006 180.421 16.2139 180.381 16.2139C180.34 16.2139 180.305 16.205 180.269 16.1828L180.264 16.1917Z" fill="#3558A2"/>
36
- <path d="M175.068 19.3326C174.902 19.426 174.723 19.5016 174.544 19.5594C174.419 19.5994 174.29 19.6217 174.16 19.6395C174.115 19.6439 174.071 19.6439 174.026 19.6484C173.959 19.6528 173.896 19.6617 173.829 19.6617C173.793 19.6617 173.757 19.6617 173.722 19.6617C173.722 19.6617 173.717 19.6617 173.713 19.6617C173.57 19.6573 173.431 19.6395 173.292 19.6083C173.154 19.5772 173.02 19.5372 172.89 19.4838C172.787 19.4393 172.684 19.3904 172.581 19.337L169.585 17.6157L169.349 17.7536L168.875 18.0249L173.829 20.8715L174.366 20.5602L174.871 20.2711L175.881 19.6884L178.779 18.0249L178.305 17.7536L178.068 17.6157L175.072 19.337L175.068 19.3326Z" fill="#3558A2"/>
37
- <path d="M168.256 15.7246C168.256 15.6935 168.247 15.6668 168.242 15.6357L167.29 16.1828C167.254 16.2006 167.218 16.2139 167.178 16.2139C167.138 16.2139 167.102 16.205 167.066 16.1828L162.938 13.8121L162.227 14.2213L167.182 17.0679L168.43 16.3518C168.354 16.1739 168.296 15.9693 168.26 15.7424C168.26 15.7424 168.26 15.7335 168.26 15.7291L168.256 15.7246Z" fill="#3558A2"/>
38
- </svg>
10
+ <img width="186" src="data:image/png;base64,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" alt="Logo">
39
11
  </div>
40
12
 
41
13
  <p style="margin-bottom: 20px;">{{ _('Hi %(user)s', user=recipient.first_name) }},</p>
@@ -43,14 +15,14 @@
43
15
  {% for item in message.paragraphs %}
44
16
  {% if item.__class__.__name__ == 'MailCTA' %}
45
17
  <p style="margin: 25px 0;">
46
- <a href="{{ item.link }}" style="color: #3558A2; text-decoration: underline; font-weight: 700;">{{ item.label }}</a>
18
+ <a href="{{ item.link }}" style="color: #000091; text-decoration: underline; font-weight: 700;">{{ item.label }}</a>
47
19
  </p>
48
20
  {% elif item.__class__.__name__ == 'LabelledContent' %}
49
21
  {% if item.inline %}
50
22
  <p style="margin-bottom: 15px;"><strong>{{ item.label }}</strong> {{ item.truncated_content }}</p>
51
23
  {% else %}
52
24
  <p style="margin-bottom: 5px; font-weight: bold;">{{ item.label }}</p>
53
- <p style="margin-bottom: 15px; margin-top: 0;">{{ item.truncated_content }}</p>
25
+ <p style="margin-bottom: 15px; margin-top: 0; font-style: italic;">{{ item.truncated_content }}</p>
54
26
  {% endif %}
55
27
  {% elif item.__class__.__name__ == 'ParagraphWithLinks' %}
56
28
  <p style="margin-bottom: 15px;">{{ item.html|safe }}</p>
Binary file