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

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