Convert mods:relatedItem for types original and host

Fixes gh-21.
master
Mike Gerber 2 years ago
parent 6d8ba871eb
commit 4e7b8ed642

@ -152,7 +152,15 @@ def mods_to_dict(mods, raise_errors=True):
.has_attributes({'authority': 'iso15924', 'type': 'code'}) \ .has_attributes({'authority': 'iso15924', 'type': 'code'}) \
.text_set() .text_set()
elif tag == '{http://www.loc.gov/mods/v3}relatedItem': elif tag == '{http://www.loc.gov/mods/v3}relatedItem':
pass tag_group = TagGroup(tag, group)
for type_, grouped_group in sorted_groupby(tag_group.group, key=lambda g: g.attrib['type']):
sub_tag = 'relatedItem-{}'.format(type_)
grouped_group = list(grouped_group)
if type_ in ["original", "host"]:
value[sub_tag] = TagGroup(sub_tag, grouped_group).is_singleton().descend(raise_errors)
else:
# TODO type="series"
pass
elif tag == '{http://www.loc.gov/mods/v3}name': elif tag == '{http://www.loc.gov/mods/v3}name':
for n, e in enumerate(group): for n, e in enumerate(group):
value['name{}'.format(n)] = mods_to_dict(e, raise_errors) value['name{}'.format(n)] = mods_to_dict(e, raise_errors)

@ -1,4 +1,3 @@
from tkinter import W
from lxml import etree as ET from lxml import etree as ET
import pytest import pytest
@ -126,3 +125,16 @@ def test_originInfo_no_event_type():
assert len(ws) == 1 assert len(ws) == 1
assert ws[0].message.args[0] == 'Filtered {http://www.loc.gov/mods/v3}originInfo element (has no eventType)' assert ws[0].message.args[0] == 'Filtered {http://www.loc.gov/mods/v3}originInfo element (has no eventType)'
def test_relatedItem():
d = dict_fromstring("""
<mods:mods xmlns:mods="http://www.loc.gov/mods/v3">
<mods:relatedItem type="original">
<mods:recordInfo>
<mods:recordIdentifier source="gbv-ppn">PPN167755803</mods:recordIdentifier>
</mods:recordInfo>
</mods:relatedItem>
</mods:mods>
""")
assert d['relatedItem-original_recordInfo_recordIdentifier'] == 'PPN167755803'

Loading…
Cancel
Save