Code Duplication    Length = 15-16 lines in 2 locations

doorstop/core/base.py 2 locations

@@ 44-59 (lines=16) @@
41
    return wrapped
42
43
44
def delete_item(func):
45
    """Remove and expunge the returned item."""
46
    @functools.wraps(func)
47
    def wrapped(self, *args, **kwargs):
48
        item = func(self, *args, **kwargs) or self
49
        if settings.ADDREMOVE_FILES and item.tree:
50
            item.tree.vcs.delete(item.path)
51
        # pylint: disable=W0212
52
        if item.document and item in item.document._items:
53
            item.document._items.remove(item)
54
        if settings.CACHE_ITEMS and item.tree:
55
            item.tree._item_cache[item.uid] = None
56
            log.trace("expunged item: {}".format(item))
57
        BaseFileObject.delete(item, item.path)
58
        return item
59
    return wrapped
60
61
62
def add_document(func):
@@ 16-30 (lines=15) @@
13
log = common.logger(__name__)
14
15
16
def add_item(func):
17
    """Add and cache the returned item."""
18
    @functools.wraps(func)
19
    def wrapped(*args, **kwargs):
20
        item = func(*args, **kwargs)
21
        if settings.ADDREMOVE_FILES and item.tree:
22
            item.tree.vcs.add(item.path)
23
        # pylint: disable=W0212
24
        if item.document and item not in item.document._items:
25
            item.document._items.append(item)
26
        if settings.CACHE_ITEMS and item.tree:
27
            item.tree._item_cache[item.uid] = item
28
            log.trace("cached item: {}".format(item))
29
        return item
30
    return wrapped
31
32
33
def edit_item(func):