@@ 12-36 (lines=25) @@ | ||
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 | __tracebackhide__ = True # pylint: disable=unused-variable |
|
22 | ||
23 | if not _private_call(method, args): |
|
24 | mapper = common.get_mapper(self) |
|
25 | if mapper and mapper.modified: |
|
26 | log.debug("Loading before call: %s", method.__name__) |
|
27 | mapper.load() |
|
28 | if mapper.auto_save_after_load: |
|
29 | mapper.save() |
|
30 | mapper.modified = False |
|
31 | ||
32 | return method(self, *args, **kwargs) |
|
33 | ||
34 | setattr(wrapped, '_load_before', True) |
|
35 | ||
36 | return wrapped |
|
37 | ||
38 | ||
39 | def save_after(method): |
|
@@ 39-62 (lines=24) @@ | ||
36 | return wrapped |
|
37 | ||
38 | ||
39 | def save_after(method): |
|
40 | """Decorator for methods that should save after call.""" |
|
41 | ||
42 | if getattr(method, '_save_after', False): |
|
43 | return method |
|
44 | ||
45 | @functools.wraps(method) |
|
46 | def wrapped(self, *args, **kwargs): |
|
47 | """Decorated method.""" |
|
48 | __tracebackhide__ = True # pylint: disable=unused-variable |
|
49 | ||
50 | result = method(self, *args, **kwargs) |
|
51 | ||
52 | if not _private_call(method, args): |
|
53 | mapper = common.get_mapper(self) |
|
54 | if mapper and mapper.auto_save: |
|
55 | log.debug("Saving after call: %s", method.__name__) |
|
56 | mapper.save() |
|
57 | ||
58 | return result |
|
59 | ||
60 | setattr(wrapped, '_save_after', True) |
|
61 | ||
62 | return wrapped |
|
63 | ||
64 | ||
65 | def _private_call(method, args, prefix='_'): |