Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions packtools/sps/validation/alternatives.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from itertools import chain
import gettext

from packtools.sps.validation.utils import format_response
from packtools.sps.validation.utils import build_response
from packtools.sps.validation.exceptions import ValidationAlternativesException
from packtools.sps.models import fig, formula, tablewrap

_ = gettext.gettext


class AlternativeValidation:
"""
Expand Down Expand Up @@ -46,21 +49,29 @@ def validate(self, error_level="CRITICAL"):
is_valid = False
break

yield format_response(
advice = f'Add {self.expected_elements} as sub-elements of {self.parent_element}/alternatives'
advice_text = _(
'Add {expected_elements} as sub-elements of {parent_element}/alternatives'
)
advice_params = {
"expected_elements": str(self.expected_elements),
"parent_element": self.parent_element
}

yield build_response(
title="Alternatives validation",
parent=self.alternative_data.get("parent"),
parent_id=self.alternative_data.get("parent_id"),
parent_article_type=self.alternative_data.get("parent_article_type"),
parent_lang=self.alternative_data.get("parent_lang"),
parent=self.alternative_data,
item=self.parent_element,
sub_item="alternatives",
validation_type="value in list",
is_valid=is_valid,
expected=self.expected_elements,
obtained=self.obtained_elements,
advice=f'Add {self.expected_elements} as sub-elements of {self.parent_element}/alternatives',
advice=advice,
data=self.alternative_data,
error_level=error_level
error_level=error_level,
advice_text=advice_text,
advice_params=advice_params
)


Expand Down
41 changes: 28 additions & 13 deletions packtools/sps/validation/app_group.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import gettext

from packtools.sps.models.app_group import XmlAppGroup
from packtools.sps.validation.utils import format_response
from packtools.sps.validation.utils import build_response

_ = gettext.gettext


class AppValidation:
Expand All @@ -13,32 +17,41 @@ def validate(self):

def validate_app_existence(self):
if not self.apps:
yield format_response(
title="<app>",
parent="article",
parent_id=None,
parent_article_type=self.xmltree.get("article-type"),
parent_lang=self.xmltree.get(
advice = "Consider adding an <app> element to include additional content such as supplementary materials or appendices."
advice_text = _(
"Consider adding an <app> element to include additional content such as supplementary materials or appendices."
)
advice_params = {}

parent_data = {
"parent": "article",
"parent_id": None,
"parent_article_type": self.xmltree.get("article-type"),
"parent_lang": self.xmltree.get(
"{http://www.w3.org/XML/1998/namespace}lang"
),
}

yield build_response(
title="<app>",
parent=parent_data,
item="app-group",
sub_item="app",
validation_type="exist",
is_valid=False,
expected="<app> element",
obtained=None,
advice="Consider adding an <app> element to include additional content such as supplementary materials or appendices.",
advice=advice,
data=None,
error_level=self.params["app_existence_error_level"],
advice_text=advice_text,
advice_params=advice_params,
)
else:
for app in self.apps:
yield format_response(
yield build_response(
title="<app>",
parent=app.get("parent"),
parent_id=app.get("parent_id"),
parent_article_type=app.get("parent_article_type"),
parent_lang=app.get("parent_lang"),
parent=app,
item="app-group",
sub_item="app",
validation_type="exist",
Expand All @@ -48,4 +61,6 @@ def validate_app_existence(self):
advice=None,
data=app,
error_level=self.params["app_existence_error_level"],
advice_text=None,
advice_params=None,
)
35 changes: 29 additions & 6 deletions packtools/sps/validation/article_abstract.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import gettext

from packtools.sps.models.v2.abstract import XMLAbstracts
from packtools.sps.validation.utils import format_response, build_response
from packtools.sps.validation.utils import build_response

_ = gettext.gettext


class AbstractValidation:
Expand Down Expand Up @@ -71,6 +75,8 @@ def _format_response(
obtained=None,
advice=None,
error_level="WARNING",
advice_text=None,
advice_params=None,
):
"""
Formats the validation response.
Expand All @@ -84,6 +90,8 @@ def _format_response(
obtained (str, optional): The obtained value.
advice (str, optional): Advice on how to resolve the issue. Default is None.
error_level (str): The error level. Default is 'WARNING'.
advice_text (str, optional): Internationalized advice text template.
advice_params (dict, optional): Parameters for the advice text template.

Returns:
dict: A formatted validation response.
Expand All @@ -100,6 +108,8 @@ def _format_response(
advice=advice,
data=self.abstract,
error_level=error_level,
advice_text=advice_text,
advice_params=advice_params,
)

def validate(self):
Expand Down Expand Up @@ -300,17 +310,23 @@ def validate_exists(self):
error_level = self.params["default_error_level"]
is_valid = True
advice = None
advice_text = None
advice_params = {}

if self.article_type in self.params["article_type_requires"]:
expected = f"Abstract is required"
is_valid = bool(data)
error_level = self.params["article_type_requires_abstract_error_level"]
advice = f"Mark abstract which is required for {self.article_type}"
advice_text = _("Mark abstract which is required for {article_type}")
advice_params = {"article_type": self.article_type}
elif self.article_type in self.params["article_type_unexpects"]:
expected = f"Abstract is unexpected"
is_valid = not bool(data)
error_level = self.params["article_type_unexpects_abstract_error_level"]
advice = f"Abstract is not expected for {self.article_type}"
advice_text = _("Abstract is not expected for {article_type}")
advice_params = {"article_type": self.article_type}
elif self.article_type in self.params["article_type_neutral"]:
is_valid = True
expected = f"Abstract is optional"
Expand All @@ -319,12 +335,17 @@ def validate_exists(self):
raise ValueError(
f"Unable to identify if abstract is required or unexpected or neutral or acceptable"
)
return format_response(

parent_data = {
"parent": "article",
"parent_id": None,
"parent_article_type": self.article_type,
"parent_lang": self.lang,
}

return build_response(
title="abstract",
parent="article",
parent_id=None,
parent_article_type=self.article_type,
parent_lang=self.lang,
parent=parent_data,
item="abstract",
sub_item=None,
validation_type="exist",
Expand All @@ -334,6 +355,8 @@ def validate_exists(self):
advice=advice,
data=data,
error_level=error_level,
advice_text=advice_text,
advice_params=advice_params,
)

def validate(self):
Expand Down
Loading