9
9
from memoize .entrybuilder import CacheEntryBuilder , ProvidedLifeSpanCacheEntryBuilder
10
10
from memoize .eviction import EvictionStrategy , LeastRecentlyUpdatedEvictionStrategy
11
11
from memoize .key import KeyExtractor , EncodedMethodReferenceAndArgsKeyExtractor
12
+ from memoize .postprocessing import Postprocessing , NoPostprocessing
12
13
from memoize .storage import CacheStorage
13
14
from memoize .storage import LocalInMemoryCacheStorage
14
15
@@ -51,30 +52,40 @@ def eviction_strategy(self) -> EvictionStrategy:
51
52
""" Determines which EvictionStrategy is to be used by cache. """
52
53
raise NotImplementedError ()
53
54
55
+ @abstractmethod
56
+ def postprocessing (self ) -> Postprocessing :
57
+ """ Determines which/if Postprocessing is to be used by cache. """
58
+ raise NotImplementedError ()
59
+
54
60
def __str__ (self ) -> str :
55
61
return self .__repr__ ()
56
62
57
63
def __repr__ (self ) -> str :
58
- return "{name}[configured={configured}, method_timeout={method_timeout}, entry_builder={entry_builder}," \
59
- " key_extractor={key_extractor}, storage={storage}, eviction_strategy={eviction_strategy}]" \
60
- .format (name = self .__class__ , configured = self .configured (), method_timeout = self .method_timeout (),
61
- entry_builder = self .entry_builder (), key_extractor = self .key_extractor (), storage = self .storage (),
62
- eviction_strategy = self .eviction_strategy ())
64
+ return (f"{ self .__class__ } ["
65
+ f"configured={ self .configured ()} , "
66
+ f"method_timeout={ self .method_timeout ()} , "
67
+ f"entry_builder={ self .entry_builder ()} , "
68
+ f"key_extractor={ self .key_extractor ()} , "
69
+ f"storage={ self .storage ()} , "
70
+ f"eviction_strategy={ self .eviction_strategy ()} , "
71
+ f"postprocessing={ self .postprocessing ()} "
72
+ f"]" )
63
73
64
74
65
75
class MutableCacheConfiguration (CacheConfiguration ):
66
76
""" Mutable configuration which can be change at runtime.
67
77
May be also used to customize existing configuration (for example a default one, which is immutable)."""
68
78
69
79
def __init__ (self , configured : bool , storage : CacheStorage , key_extractor : KeyExtractor ,
70
- eviction_strategy : EvictionStrategy , entry_builder : CacheEntryBuilder ,
80
+ eviction_strategy : EvictionStrategy , entry_builder : CacheEntryBuilder , postprocessing : Postprocessing ,
71
81
method_timeout : timedelta ) -> None :
72
82
self .__storage = storage
73
83
self .__configured = configured
74
84
self .__key_extractor = key_extractor
75
85
self .__entry_builder = entry_builder
76
86
self .__method_timeout = method_timeout
77
87
self .__eviction_strategy = eviction_strategy
88
+ self .__postprocessing = postprocessing
78
89
79
90
@staticmethod
80
91
def initialized_with (configuration : CacheConfiguration ) -> 'MutableCacheConfiguration' :
@@ -85,6 +96,7 @@ def initialized_with(configuration: CacheConfiguration) -> 'MutableCacheConfigur
85
96
entry_builder = configuration .entry_builder (),
86
97
method_timeout = configuration .method_timeout (),
87
98
eviction_strategy = configuration .eviction_strategy (),
99
+ postprocessing = configuration .postprocessing (),
88
100
)
89
101
90
102
def method_timeout (self ) -> timedelta :
@@ -105,6 +117,9 @@ def entry_builder(self) -> CacheEntryBuilder:
105
117
def eviction_strategy (self ) -> EvictionStrategy :
106
118
return self .__eviction_strategy
107
119
120
+ def postprocessing (self ) -> Postprocessing :
121
+ return self .__postprocessing
122
+
108
123
def set_method_timeout (self , value : timedelta ) -> 'MutableCacheConfiguration' :
109
124
self .__method_timeout = value
110
125
return self
@@ -129,6 +144,10 @@ def set_eviction_strategy(self, value: EvictionStrategy) -> 'MutableCacheConfigu
129
144
self .__eviction_strategy = value
130
145
return self
131
146
147
+ def set_postprocessing (self , value : Postprocessing ) -> 'MutableCacheConfiguration' :
148
+ self .__postprocessing = value
149
+ return self
150
+
132
151
133
152
class DefaultInMemoryCacheConfiguration (CacheConfiguration ):
134
153
""" Default parameters that describe in-memory cache. Be ware that parameters used do not suit every case. """
@@ -142,6 +161,7 @@ def __init__(self, capacity: int = 4096, method_timeout: timedelta = timedelta(m
142
161
self .__key_extractor = EncodedMethodReferenceAndArgsKeyExtractor ()
143
162
self .__eviction_strategy = LeastRecentlyUpdatedEvictionStrategy (capacity = capacity )
144
163
self .__entry_builder = ProvidedLifeSpanCacheEntryBuilder (update_after = update_after , expire_after = expire_after )
164
+ self .__postprocessing = NoPostprocessing ()
145
165
146
166
def configured (self ) -> bool :
147
167
return self .__configured
@@ -160,3 +180,6 @@ def eviction_strategy(self) -> LeastRecentlyUpdatedEvictionStrategy:
160
180
161
181
def key_extractor (self ) -> EncodedMethodReferenceAndArgsKeyExtractor :
162
182
return self .__key_extractor
183
+
184
+ def postprocessing (self ) -> Postprocessing :
185
+ return self .__postprocessing
0 commit comments