@@ -27,8 +27,6 @@ def loads(self, data):
2727
2828
2929class MongoDBCache (BaseCache ):
30- # This class uses collection provided by the database connection.
31-
3230 pickle_protocol = pickle .HIGHEST_PROTOCOL
3331
3432 def __init__ (self , collection_name , params ):
@@ -43,27 +41,21 @@ class CacheEntry:
4341 def create_indexes (self ):
4442 expires_index = IndexModel ("expires_at" , expireAfterSeconds = 0 )
4543 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 ])
4745
4846 @cached_property
4947 def serializer (self ):
5048 return MongoSerializer (self .pickle_protocol )
5149
5250 @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 )
6354
6455 @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 )
6759
6860 def get (self , key , default = None , version = None ):
6961 result = self .get_many ([key ], version )
@@ -80,18 +72,18 @@ def get_many(self, keys, version=None):
8072 if not keys :
8173 return {}
8274 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 (
8476 {"key" : {"$in" : tuple (keys_map )}, ** self ._filter_expired (expired = False )}
8577 ) as cursor :
8678 return {keys_map [row ["key" ]]: self .serializer .loads (row ["value" ]) for row in cursor }
8779
8880 def set (self , key , value , timeout = DEFAULT_TIMEOUT , version = None ):
8981 key = self .make_and_validate_key (key , version = version )
9082 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_" )
9284 if num >= self ._max_entries :
9385 self ._cull (num )
94- return self .collection_to_write .update_one (
86+ return self .collection_for_write .update_one (
9587 {"key" : key },
9688 {
9789 "$set" : {
@@ -106,11 +98,11 @@ def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
10698 def add (self , key , value , timeout = DEFAULT_TIMEOUT , version = None ):
10799 key = self .make_and_validate_key (key , version = version )
108100 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_" )
110102 if num >= self ._max_entries :
111103 self ._cull (num )
112104 try :
113- self .collection_to_write .update_one (
105+ self .collection_for_write .update_one (
114106 {"key" : key , ** self ._filter_expired (expired = True )},
115107 {
116108 "$set" : {
@@ -133,7 +125,7 @@ def _cull(self, num):
133125 try :
134126 # Delete the first expiration date.
135127 deleted_from = next (
136- self .collection_to_write .aggregate (
128+ self .collection_for_write .aggregate (
137129 [
138130 {"$sort" : {"expires_at" : - 1 , "key" : 1 }},
139131 {"$skip" : keep_num },
@@ -145,7 +137,7 @@ def _cull(self, num):
145137 except StopIteration :
146138 pass
147139 else :
148- self .collection_to_write .delete_many (
140+ self .collection_for_write .delete_many (
149141 {
150142 "$or" : [
151143 {"expires_at" : {"$lt" : deleted_from ["expires_at" ]}},
@@ -161,7 +153,7 @@ def _cull(self, num):
161153
162154 def touch (self , key , timeout = DEFAULT_TIMEOUT , version = None ):
163155 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 (
165157 {"key" : key }, {"$set" : {"expires_at" : self ._get_expiration_time (timeout )}}
166158 )
167159 return res .matched_count > 0
@@ -182,16 +174,16 @@ def _delete_many(self, keys, version=None):
182174 if not keys :
183175 return False
184176 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 )
186178
187179 def has_key (self , key , version = None ):
188180 key = self .make_and_validate_key (key , version = version )
189181 return (
190- self .collection_to_read .count_documents (
182+ self .collection_for_read .count_documents (
191183 {"key" : key , ** self ._filter_expired (expired = False )}
192184 )
193185 > 0
194186 )
195187
196188 def clear (self ):
197- self .collection_to_write .delete_many ({})
189+ self .collection_for_write .delete_many ({})
0 commit comments