From f267ca1ad50eafcff219e4107d54c1b5e8d1d532 Mon Sep 17 00:00:00 2001 From: Fabian Schindler <fabian.schindler.strauss@gmail.com> Date: Tue, 3 Nov 2020 09:47:23 +0100 Subject: [PATCH] Improved error handling in XML parsing --- core/registrar/xml.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/registrar/xml.py b/core/registrar/xml.py index 519d8a54..cc7b37ee 100644 --- a/core/registrar/xml.py +++ b/core/registrar/xml.py @@ -8,6 +8,7 @@ import logging import lxml.etree from .source import Source +from .exceptions import RegistrationError logger = logging.getLogger(__name__) @@ -29,6 +30,9 @@ class Parameter: namespaces: dict = field(default_factory=dict) +class ParserError(RegistrationError): + pass + def parse_metadata_schema(tree: lxml.etree._ElementTree, schema: dict, namespaces: dict=None) -> dict: out = {} for key, param in schema.items(): @@ -39,7 +43,10 @@ def parse_metadata_schema(tree: lxml.etree._ElementTree, schema: dict, namespace for v in values ] else: - value = param.parser(values[0]) if param.parser else values[0] + try: + value = param.parser(values[0]) if param.parser else values[0] + except IndexError: + raise ParserError(f'Failed to fetch single value for parameter {key}') out[key] = value -- GitLab