diff --git a/core/registrar/xml.py b/core/registrar/xml.py index 519d8a54b19bf0eb4dd592270fbd58c676f1afc5..cc7b37eedfefe44cb9421c955bbfc5e48f6a368a 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