26
26
GridOut ,
27
27
GridOutCursor ,
28
28
DEFAULT_CHUNK_SIZE ,
29
- _clear_entity_type_registry )
29
+ _clear_entity_type_registry ,
30
+ _disallow_transactions )
30
31
from pymongo import (ASCENDING ,
31
32
DESCENDING )
32
33
from pymongo .common import UNAUTHORIZED_CODES , validate_string
@@ -50,6 +51,10 @@ def __init__(self, database, collection="fs", disable_md5=False):
50
51
computed for uploaded files. Useful in environments where MD5
51
52
cannot be used for regulatory or other reasons. Defaults to False.
52
53
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
+
53
58
.. versionchanged:: 3.1
54
59
Indexes are only ensured on the first write to the DB.
55
60
@@ -68,7 +73,6 @@ def __init__(self, database, collection="fs", disable_md5=False):
68
73
raise ConfigurationError ('database must use '
69
74
'acknowledged write_concern' )
70
75
71
- self .__database = database
72
76
self .__collection = database [collection ]
73
77
self .__files = self .__collection .files
74
78
self .__chunks = self .__collection .chunks
@@ -88,8 +92,6 @@ def new_file(self, **kwargs):
88
92
:Parameters:
89
93
- `**kwargs` (optional): keyword arguments for file creation
90
94
"""
91
- # No need for __ensure_index_files_id() here; GridIn ensures
92
- # the (files_id, n) index when needed.
93
95
return GridIn (
94
96
self .__collection , disable_md5 = self .__disable_md5 , ** kwargs )
95
97
@@ -192,6 +194,7 @@ def get_version(self, filename=None, version=-1, session=None, **kwargs):
192
194
if filename is not None :
193
195
query ["filename" ] = filename
194
196
197
+ _disallow_transactions (session )
195
198
cursor = self .__files .find (query , session = session )
196
199
if version < 0 :
197
200
skip = abs (version ) - 1
@@ -249,6 +252,7 @@ def delete(self, file_id, session=None):
249
252
.. versionchanged:: 3.1
250
253
``delete`` no longer ensures indexes.
251
254
"""
255
+ _disallow_transactions (session )
252
256
self .__files .delete_one ({"_id" : file_id }, session = session )
253
257
self .__chunks .delete_many ({"files_id" : file_id }, session = session )
254
258
@@ -266,6 +270,7 @@ def list(self, session=None):
266
270
.. versionchanged:: 3.1
267
271
``list`` no longer ensures indexes.
268
272
"""
273
+ _disallow_transactions (session )
269
274
# With an index, distinct includes documents with no filename
270
275
# as None.
271
276
return [
@@ -299,6 +304,7 @@ def find_one(self, filter=None, session=None, *args, **kwargs):
299
304
if filter is not None and not isinstance (filter , abc .Mapping ):
300
305
filter = {"_id" : filter }
301
306
307
+ _disallow_transactions (session )
302
308
for f in self .find (filter , * args , session = session , ** kwargs ):
303
309
return f
304
310
@@ -403,6 +409,7 @@ def exists(self, document_or_id=None, session=None, **kwargs):
403
409
.. versionchanged:: 3.6
404
410
Added ``session`` parameter.
405
411
"""
412
+ _disallow_transactions (session )
406
413
if kwargs :
407
414
f = self .__files .find_one (kwargs , ["_id" ], session = session )
408
415
else :
@@ -439,6 +446,10 @@ def __init__(self, db, bucket_name="fs",
439
446
computed for uploaded files. Useful in environments where MD5
440
447
cannot be used for regulatory or other reasons. Defaults to False.
441
448
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
+
442
453
.. versionadded:: 3.1
443
454
444
455
.. mongodoc:: gridfs
@@ -452,7 +463,6 @@ def __init__(self, db, bucket_name="fs",
452
463
if not wtc .acknowledged :
453
464
raise ConfigurationError ('write concern must be acknowledged' )
454
465
455
- self ._db = db
456
466
self ._bucket_name = bucket_name
457
467
self ._collection = db [bucket_name ]
458
468
self ._disable_md5 = disable_md5
@@ -746,6 +756,7 @@ def delete(self, file_id, session=None):
746
756
.. versionchanged:: 3.6
747
757
Added ``session`` parameter.
748
758
"""
759
+ _disallow_transactions (session )
749
760
res = self ._files .delete_one ({"_id" : file_id }, session = session )
750
761
self ._chunks .delete_many ({"files_id" : file_id }, session = session )
751
762
if not res .deleted_count :
@@ -839,9 +850,8 @@ def open_download_stream_by_name(self, filename, revision=-1, session=None):
839
850
Added ``session`` parameter.
840
851
"""
841
852
validate_string ("filename" , filename )
842
-
843
853
query = {"filename" : filename }
844
-
854
+ _disallow_transactions ( session )
845
855
cursor = self ._files .find (query , session = session )
846
856
if revision < 0 :
847
857
skip = abs (revision ) - 1
@@ -922,6 +932,7 @@ def rename(self, file_id, new_filename, session=None):
922
932
.. versionchanged:: 3.6
923
933
Added ``session`` parameter.
924
934
"""
935
+ _disallow_transactions (session )
925
936
result = self ._files .update_one ({"_id" : file_id },
926
937
{"$set" : {"filename" : new_filename }},
927
938
session = session )
0 commit comments