2626 GridOut ,
2727 GridOutCursor ,
2828 DEFAULT_CHUNK_SIZE ,
29- _clear_entity_type_registry )
29+ _clear_entity_type_registry ,
30+ _disallow_transactions )
3031from pymongo import (ASCENDING ,
3132 DESCENDING )
3233from pymongo .common import UNAUTHORIZED_CODES , validate_string
@@ -50,6 +51,10 @@ def __init__(self, database, collection="fs", disable_md5=False):
5051 computed for uploaded files. Useful in environments where MD5
5152 cannot be used for regulatory or other reasons. Defaults to False.
5253
54+ .. versionchanged:: 3.11
55+ Running a GridFS operation in a transaction now always raises an
56+ error. GridFS does not support multi-document transactions.
57+
5358 .. versionchanged:: 3.1
5459 Indexes are only ensured on the first write to the DB.
5560
@@ -68,7 +73,6 @@ def __init__(self, database, collection="fs", disable_md5=False):
6873 raise ConfigurationError ('database must use '
6974 'acknowledged write_concern' )
7075
71- self .__database = database
7276 self .__collection = database [collection ]
7377 self .__files = self .__collection .files
7478 self .__chunks = self .__collection .chunks
@@ -88,8 +92,6 @@ def new_file(self, **kwargs):
8892 :Parameters:
8993 - `**kwargs` (optional): keyword arguments for file creation
9094 """
91- # No need for __ensure_index_files_id() here; GridIn ensures
92- # the (files_id, n) index when needed.
9395 return GridIn (
9496 self .__collection , disable_md5 = self .__disable_md5 , ** kwargs )
9597
@@ -192,6 +194,7 @@ def get_version(self, filename=None, version=-1, session=None, **kwargs):
192194 if filename is not None :
193195 query ["filename" ] = filename
194196
197+ _disallow_transactions (session )
195198 cursor = self .__files .find (query , session = session )
196199 if version < 0 :
197200 skip = abs (version ) - 1
@@ -249,6 +252,7 @@ def delete(self, file_id, session=None):
249252 .. versionchanged:: 3.1
250253 ``delete`` no longer ensures indexes.
251254 """
255+ _disallow_transactions (session )
252256 self .__files .delete_one ({"_id" : file_id }, session = session )
253257 self .__chunks .delete_many ({"files_id" : file_id }, session = session )
254258
@@ -266,6 +270,7 @@ def list(self, session=None):
266270 .. versionchanged:: 3.1
267271 ``list`` no longer ensures indexes.
268272 """
273+ _disallow_transactions (session )
269274 # With an index, distinct includes documents with no filename
270275 # as None.
271276 return [
@@ -299,6 +304,7 @@ def find_one(self, filter=None, session=None, *args, **kwargs):
299304 if filter is not None and not isinstance (filter , abc .Mapping ):
300305 filter = {"_id" : filter }
301306
307+ _disallow_transactions (session )
302308 for f in self .find (filter , * args , session = session , ** kwargs ):
303309 return f
304310
@@ -403,6 +409,7 @@ def exists(self, document_or_id=None, session=None, **kwargs):
403409 .. versionchanged:: 3.6
404410 Added ``session`` parameter.
405411 """
412+ _disallow_transactions (session )
406413 if kwargs :
407414 f = self .__files .find_one (kwargs , ["_id" ], session = session )
408415 else :
@@ -439,6 +446,10 @@ def __init__(self, db, bucket_name="fs",
439446 computed for uploaded files. Useful in environments where MD5
440447 cannot be used for regulatory or other reasons. Defaults to False.
441448
449+ .. versionchanged:: 3.11
450+ Running a GridFS operation in a transaction now always raises an
451+ error. GridFSBucket does not support multi-document transactions.
452+
442453 .. versionadded:: 3.1
443454
444455 .. mongodoc:: gridfs
@@ -452,7 +463,6 @@ def __init__(self, db, bucket_name="fs",
452463 if not wtc .acknowledged :
453464 raise ConfigurationError ('write concern must be acknowledged' )
454465
455- self ._db = db
456466 self ._bucket_name = bucket_name
457467 self ._collection = db [bucket_name ]
458468 self ._disable_md5 = disable_md5
@@ -746,6 +756,7 @@ def delete(self, file_id, session=None):
746756 .. versionchanged:: 3.6
747757 Added ``session`` parameter.
748758 """
759+ _disallow_transactions (session )
749760 res = self ._files .delete_one ({"_id" : file_id }, session = session )
750761 self ._chunks .delete_many ({"files_id" : file_id }, session = session )
751762 if not res .deleted_count :
@@ -839,9 +850,8 @@ def open_download_stream_by_name(self, filename, revision=-1, session=None):
839850 Added ``session`` parameter.
840851 """
841852 validate_string ("filename" , filename )
842-
843853 query = {"filename" : filename }
844-
854+ _disallow_transactions ( session )
845855 cursor = self ._files .find (query , session = session )
846856 if revision < 0 :
847857 skip = abs (revision ) - 1
@@ -922,6 +932,7 @@ def rename(self, file_id, new_filename, session=None):
922932 .. versionchanged:: 3.6
923933 Added ``session`` parameter.
924934 """
935+ _disallow_transactions (session )
925936 result = self ._files .update_one ({"_id" : file_id },
926937 {"$set" : {"filename" : new_filename }},
927938 session = session )
0 commit comments