@@ -27,8 +27,6 @@ def loads(self, data):
27
27
28
28
29
29
class MongoDBCache (BaseCache ):
30
- # This class uses collection provided by the database connection.
31
-
32
30
pickle_protocol = pickle .HIGHEST_PROTOCOL
33
31
34
32
def __init__ (self , collection_name , params ):
@@ -43,27 +41,21 @@ class CacheEntry:
43
41
def create_indexes (self ):
44
42
expires_index = IndexModel ("expires_at" , expireAfterSeconds = 0 )
45
43
key_index = IndexModel ("key" , unique = True )
46
- self .collection_to_write .create_indexes ([expires_index , key_index ])
44
+ self .collection_for_write .create_indexes ([expires_index , key_index ])
47
45
48
46
@cached_property
49
47
def serializer (self ):
50
48
return MongoSerializer (self .pickle_protocol )
51
49
52
50
@property
53
- def _db_to_read (self ):
54
- return connections [router .db_for_read (self .cache_model_class )]
55
-
56
- @property
57
- def collection_to_read (self ):
58
- return self ._db_to_read .get_collection (self ._collection_name )
59
-
60
- @property
61
- def _db_to_write (self ):
62
- return connections [router .db_for_write (self .cache_model_class )]
51
+ def collection_for_read (self ):
52
+ db = router .db_for_read (self .cache_model_class )
53
+ return connections [db ].get_collection (self ._collection_name )
63
54
64
55
@property
65
- def collection_to_write (self ):
66
- return self ._db_to_read .get_collection (self ._collection_name )
56
+ def collection_for_write (self ):
57
+ db = router .db_for_write (self .cache_model_class )
58
+ return connections [db ].get_collection (self ._collection_name )
67
59
68
60
def get (self , key , default = None , version = None ):
69
61
result = self .get_many ([key ], version )
@@ -80,18 +72,18 @@ def get_many(self, keys, version=None):
80
72
if not keys :
81
73
return {}
82
74
keys_map = {self .make_and_validate_key (key , version = version ): key for key in keys }
83
- with self .collection_to_read .find (
75
+ with self .collection_for_read .find (
84
76
{"key" : {"$in" : tuple (keys_map )}, ** self ._filter_expired (expired = False )}
85
77
) as cursor :
86
78
return {keys_map [row ["key" ]]: self .serializer .loads (row ["value" ]) for row in cursor }
87
79
88
80
def set (self , key , value , timeout = DEFAULT_TIMEOUT , version = None ):
89
81
key = self .make_and_validate_key (key , version = version )
90
82
serialized_data = self .serializer .dumps (value )
91
- num = self .collection_to_write .count_documents ({}, hint = "_id_" )
83
+ num = self .collection_for_write .count_documents ({}, hint = "_id_" )
92
84
if num >= self ._max_entries :
93
85
self ._cull (num )
94
- return self .collection_to_write .update_one (
86
+ return self .collection_for_write .update_one (
95
87
{"key" : key },
96
88
{
97
89
"$set" : {
@@ -106,11 +98,11 @@ def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
106
98
def add (self , key , value , timeout = DEFAULT_TIMEOUT , version = None ):
107
99
key = self .make_and_validate_key (key , version = version )
108
100
serialized_data = self .serializer .dumps (value )
109
- num = self .collection_to_write .count_documents ({}, hint = "_id_" )
101
+ num = self .collection_for_write .count_documents ({}, hint = "_id_" )
110
102
if num >= self ._max_entries :
111
103
self ._cull (num )
112
104
try :
113
- self .collection_to_write .update_one (
105
+ self .collection_for_write .update_one (
114
106
{"key" : key , ** self ._filter_expired (expired = True )},
115
107
{
116
108
"$set" : {
@@ -133,7 +125,7 @@ def _cull(self, num):
133
125
try :
134
126
# Delete the first expiration date.
135
127
deleted_from = next (
136
- self .collection_to_write .aggregate (
128
+ self .collection_for_write .aggregate (
137
129
[
138
130
{"$sort" : {"expires_at" : - 1 , "key" : 1 }},
139
131
{"$skip" : keep_num },
@@ -145,7 +137,7 @@ def _cull(self, num):
145
137
except StopIteration :
146
138
pass
147
139
else :
148
- self .collection_to_write .delete_many (
140
+ self .collection_for_write .delete_many (
149
141
{
150
142
"$or" : [
151
143
{"expires_at" : {"$lt" : deleted_from ["expires_at" ]}},
@@ -161,7 +153,7 @@ def _cull(self, num):
161
153
162
154
def touch (self , key , timeout = DEFAULT_TIMEOUT , version = None ):
163
155
key = self .make_and_validate_key (key , version = version )
164
- res = self .collection_to_write .update_one (
156
+ res = self .collection_for_write .update_one (
165
157
{"key" : key }, {"$set" : {"expires_at" : self ._get_expiration_time (timeout )}}
166
158
)
167
159
return res .matched_count > 0
@@ -182,16 +174,16 @@ def _delete_many(self, keys, version=None):
182
174
if not keys :
183
175
return False
184
176
keys = tuple (self .make_and_validate_key (key , version = version ) for key in keys )
185
- return bool (self .collection_to_write .delete_many ({"key" : {"$in" : keys }}).deleted_count )
177
+ return bool (self .collection_for_write .delete_many ({"key" : {"$in" : keys }}).deleted_count )
186
178
187
179
def has_key (self , key , version = None ):
188
180
key = self .make_and_validate_key (key , version = version )
189
181
return (
190
- self .collection_to_read .count_documents (
182
+ self .collection_for_read .count_documents (
191
183
{"key" : key , ** self ._filter_expired (expired = False )}
192
184
)
193
185
> 0
194
186
)
195
187
196
188
def clear (self ):
197
- self .collection_to_write .delete_many ({})
189
+ self .collection_for_write .delete_many ({})
0 commit comments