Code Duplication    Length = 28-28 lines in 3 locations

src/ocrd_page_user_methods/extend_AllIndexed.py 1 location

@@ 2-29 (lines=28) @@
1
# pylint: disable=line-too-long,invalid-name,missing-module-docstring
2
def extend_AllIndexed(self, elements, validate_continuity=False):
3
    """
4
    Add all elements in list `elements`, respecting ``@index`` order.
5
    With `validate_continuity`, check that all new elements come after all old elements
6
    (or raise an exception). 
7
    Otherwise, ensure this condition silently (by increasing ``@index`` accordingly).
8
    """
9
    if not isinstance(elements, list):
10
        elements = [elements]
11
    siblings = self.get_AllIndexed()
12
    highest_sibling_index = siblings[-1].index if siblings else -1
13
    if validate_continuity:
14
        elements = sorted(elements, key=lambda x: x.index)
15
        lowest_element_index = elements[0].index
16
        if lowest_element_index <= highest_sibling_index:
17
            raise Exception("@index already used: {}".format(lowest_element_index))
18
    else:
19
        for element in elements:
20
            highest_sibling_index += 1
21
            element.index = highest_sibling_index
22
    for element in elements:
23
        if isinstance(element, RegionRefIndexedType): # pylint: disable=undefined-variable
24
            self.add_RegionRefIndexed(element)
25
        elif isinstance(element, OrderedGroupIndexedType): # pylint: disable=undefined-variable
26
            self.add_OrderedGroupIndexed(element)
27
        elif isinstance(element, UnorderedGroupIndexedType): # pylint: disable=undefined-variable
28
            self.add_UnorderedGroupIndexed(element)
29
    return self.get_AllIndexed()
30

src/ocrd_models/ocrd_page_generateds.py 2 locations

@@ 8006-8033 (lines=28) @@
8003
        return ret
8004
    
8005
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
8006
    def extend_AllIndexed(self, elements, validate_continuity=False):
8007
        """
8008
        Add all elements in list `elements`, respecting ``@index`` order.
8009
        With `validate_continuity`, check that all new elements come after all old elements
8010
        (or raise an exception). 
8011
        Otherwise, ensure this condition silently (by increasing ``@index`` accordingly).
8012
        """
8013
        if not isinstance(elements, list):
8014
            elements = [elements]
8015
        siblings = self.get_AllIndexed()
8016
        highest_sibling_index = siblings[-1].index if siblings else -1
8017
        if validate_continuity:
8018
            elements = sorted(elements, key=lambda x: x.index)
8019
            lowest_element_index = elements[0].index
8020
            if lowest_element_index <= highest_sibling_index:
8021
                raise Exception("@index already used: {}".format(lowest_element_index))
8022
        else:
8023
            for element in elements:
8024
                highest_sibling_index += 1
8025
                element.index = highest_sibling_index
8026
        for element in elements:
8027
            if isinstance(element, RegionRefIndexedType): # pylint: disable=undefined-variable
8028
                self.add_RegionRefIndexed(element)
8029
            elif isinstance(element, OrderedGroupIndexedType): # pylint: disable=undefined-variable
8030
                self.add_OrderedGroupIndexed(element)
8031
            elif isinstance(element, UnorderedGroupIndexedType): # pylint: disable=undefined-variable
8032
                self.add_UnorderedGroupIndexed(element)
8033
        return self.get_AllIndexed()
8034
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
8035
    def sort_AllIndexed(self, validate_uniqueness=True):
8036
        """
@@ 7043-7070 (lines=28) @@
7040
        return ret
7041
    
7042
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
7043
    def extend_AllIndexed(self, elements, validate_continuity=False):
7044
        """
7045
        Add all elements in list `elements`, respecting ``@index`` order.
7046
        With `validate_continuity`, check that all new elements come after all old elements
7047
        (or raise an exception). 
7048
        Otherwise, ensure this condition silently (by increasing ``@index`` accordingly).
7049
        """
7050
        if not isinstance(elements, list):
7051
            elements = [elements]
7052
        siblings = self.get_AllIndexed()
7053
        highest_sibling_index = siblings[-1].index if siblings else -1
7054
        if validate_continuity:
7055
            elements = sorted(elements, key=lambda x: x.index)
7056
            lowest_element_index = elements[0].index
7057
            if lowest_element_index <= highest_sibling_index:
7058
                raise Exception("@index already used: {}".format(lowest_element_index))
7059
        else:
7060
            for element in elements:
7061
                highest_sibling_index += 1
7062
                element.index = highest_sibling_index
7063
        for element in elements:
7064
            if isinstance(element, RegionRefIndexedType): # pylint: disable=undefined-variable
7065
                self.add_RegionRefIndexed(element)
7066
            elif isinstance(element, OrderedGroupIndexedType): # pylint: disable=undefined-variable
7067
                self.add_OrderedGroupIndexed(element)
7068
            elif isinstance(element, UnorderedGroupIndexedType): # pylint: disable=undefined-variable
7069
                self.add_UnorderedGroupIndexed(element)
7070
        return self.get_AllIndexed()
7071
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
7072
    def sort_AllIndexed(self, validate_uniqueness=True):
7073
        """