Code Duplication    Length = 22-23 lines in 2 locations

yorm/bases/mappable.py 2 locations

@@ 12-34 (lines=23) @@
9
log = logging.getLogger(__name__)
10
11
12
def load_before(method):
13
    """Decorator for methods that should load before call."""
14
15
    if getattr(method, '_load_before', False):
16
        return method
17
18
    @functools.wraps(method)
19
    def wrapped(self, *args, **kwargs):
20
        """Decorated method."""
21
        if not _private_call(method, args):
22
            mapper = common.get_mapper(self)
23
            if mapper and mapper.modified:
24
                log.debug("Loading before call: %s", method.__name__)
25
                mapper.load()
26
                if mapper.auto_save_after_load:
27
                    mapper.save()
28
                    mapper.modified = False
29
30
        return method(self, *args, **kwargs)
31
32
    setattr(wrapped, '_load_before', True)
33
34
    return wrapped
35
36
37
def save_after(method):
@@ 37-58 (lines=22) @@
34
    return wrapped
35
36
37
def save_after(method):
38
    """Decorator for methods that should save after call."""
39
40
    if getattr(method, '_save_after', False):
41
        return method
42
43
    @functools.wraps(method)
44
    def wrapped(self, *args, **kwargs):
45
        """Decorated method."""
46
        result = method(self, *args, **kwargs)
47
48
        if not _private_call(method, args):
49
            mapper = common.get_mapper(self)
50
            if mapper and mapper.auto_save:
51
                log.debug("Saving after call: %s", method.__name__)
52
                mapper.save()
53
54
        return result
55
56
    setattr(wrapped, '_save_after', True)
57
58
    return wrapped
59
60
61
def _private_call(method, args, prefix='_'):