Skip to content

Commit 04d915f

Browse files
authored
Merge pull request #255 from dapper91/fix/namespace-inheritance
- an exception is raised if namespace alias is not found in the namespace map. - a child model inherits the parent namespace map.
2 parents 2d2734c + bb30d8b commit 04d915f

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

pydantic_xml/model.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,12 +421,17 @@ def __init_subclass__(
421421

422422
cls.__xml_tag__ = tag if tag is not None else getattr(cls, '__xml_tag__', None)
423423
cls.__xml_ns__ = ns if ns is not None else getattr(cls, '__xml_ns__', None)
424-
cls.__xml_nsmap__ = nsmap if nsmap is not None else getattr(cls, '__xml_nsmap__', None)
425424
cls.__xml_ns_attrs__ = ns_attrs if ns_attrs is not None else getattr(cls, '__xml_ns_attrs__', False)
426425
cls.__xml_skip_empty__ = skip_empty if skip_empty is not None else getattr(cls, '__xml_skip_empty__', None)
427426
cls.__xml_search_mode__ = search_mode if search_mode is not None \
428427
else getattr(cls, '__xml_search_mode__', SearchMode.STRICT)
429428

429+
if parent_nsmap := getattr(cls, '__xml_nsmap__', None):
430+
parent_nsmap.update(nsmap or {})
431+
cls.__xml_nsmap__ = parent_nsmap
432+
else:
433+
cls.__xml_nsmap__ = nsmap
434+
430435
cls.__xml_field_serializers__ = {}
431436
cls.__xml_field_validators__ = {}
432437

pydantic_xml/utils.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import pydantic as pd
88
import pydantic_core as pdc
99

10+
from pydantic_xml import errors
11+
1012
from .element.native import etree
1113
from .typedefs import Location, NsMap
1214

@@ -52,7 +54,13 @@ def from_alias(
5254
"""
5355

5456
if not is_attr or ns is not None:
55-
ns = nsmap.get(ns or '') if nsmap else None
57+
if ns is None:
58+
ns = nsmap.get('') if nsmap else None
59+
else:
60+
try:
61+
ns = nsmap[ns] if nsmap else None
62+
except KeyError:
63+
raise errors.ModelError(f"namespace alias {ns} not declared in nsmap")
5664

5765
return QName(tag=tag, ns=ns)
5866

tests/test_misc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class BaseModel(
320320
BaseXmlModel,
321321
tag='TestTag',
322322
ns='TestNamespace',
323-
nsmap={'test': 'value'},
323+
nsmap={'TestNamespace': 'value'},
324324
ns_attrs=True,
325325
search_mode='ordered',
326326
):

0 commit comments

Comments
 (0)