Conditions | 6 |
Total Lines | 33 |
Code Lines | 21 |
Lines | 33 |
Ratio | 100 % |
Changes | 0 |
1 | View Code Duplication | def get_ReadingOrderGroups(self) -> dict: |
|
|
|||
2 | """ |
||
3 | Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef |
||
4 | (i.e. segment `@id`) to its referring group object (i.e one of |
||
5 | |||
6 | \b |
||
7 | - :py:class:`.RegionRefType` |
||
8 | - :py:class:`.RegionRefIndexedType` |
||
9 | - :py:class:`.OrderedGroupType` |
||
10 | - :py:class:`.OrderedGroupIndexedType` |
||
11 | - :py:class:`.UnoderedGroupType` |
||
12 | - :py:class:`.UnoderedGroupIndexedType` |
||
13 | """ |
||
14 | def get_groupdict(group): |
||
15 | regionrefs = list() |
||
16 | if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)): |
||
17 | regionrefs = (group.get_RegionRefIndexed() + |
||
18 | group.get_OrderedGroupIndexed() + |
||
19 | group.get_UnorderedGroupIndexed()) |
||
20 | if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)): |
||
21 | regionrefs = (group.get_RegionRef() + |
||
22 | group.get_OrderedGroup() + |
||
23 | group.get_UnorderedGroup()) |
||
24 | refdict = {} |
||
25 | for elem in regionrefs: |
||
26 | refdict[elem.get_regionRef()] = elem |
||
27 | if not isinstance(elem, (RegionRefType, RegionRefIndexedType)): |
||
28 | refdict = {**refdict, **get_groupdict(elem)} |
||
29 | return refdict |
||
30 | ro = self.get_ReadingOrder() |
||
31 | if ro is None: |
||
32 | return {} |
||
33 | return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup()) |
||
34 |