Reverted document.delete auto gridfs delete
This commit is contained in:
parent
bc7e874476
commit
bab186e195
@ -2,6 +2,10 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Changes in 0.6.9
|
||||||
|
================
|
||||||
|
- Removed FileField auto deletion, needs more work maybe 0.7
|
||||||
|
|
||||||
Changes in 0.6.8
|
Changes in 0.6.8
|
||||||
================
|
================
|
||||||
- Fixed FileField losing reference when no default set
|
- Fixed FileField losing reference when no default set
|
||||||
|
@ -65,12 +65,13 @@ Deleting stored files is achieved with the :func:`delete` method::
|
|||||||
|
|
||||||
marmot.photo.delete()
|
marmot.photo.delete()
|
||||||
|
|
||||||
.. note::
|
.. warning::
|
||||||
|
|
||||||
The FileField in a Document actually only stores the ID of a file in a
|
The FileField in a Document actually only stores the ID of a file in a
|
||||||
separate GridFS collection. This means that `Animal.drop_collection()` will
|
separate GridFS collection. This means that deleting a document
|
||||||
not delete any files. Care should be taken to manually remove associated
|
with a defined FileField does not actually delete the file. You must be
|
||||||
files before dropping a collection.
|
careful to delete any files in a Document as above before deleting the
|
||||||
|
Document itself.
|
||||||
|
|
||||||
|
|
||||||
Replacing files
|
Replacing files
|
||||||
|
@ -618,10 +618,6 @@ class DocumentMetaclass(type):
|
|||||||
raise InvalidDocumentError("Reverse delete rules are not supported for EmbeddedDocuments (field: %s)" % field.name)
|
raise InvalidDocumentError("Reverse delete rules are not supported for EmbeddedDocuments (field: %s)" % field.name)
|
||||||
f.document_type.register_delete_rule(new_class, field.name, delete_rule)
|
f.document_type.register_delete_rule(new_class, field.name, delete_rule)
|
||||||
|
|
||||||
proxy_class = getattr(field, 'proxy_class', None)
|
|
||||||
if proxy_class is not None:
|
|
||||||
new_class.register_proxy_field(field.name, proxy_class)
|
|
||||||
|
|
||||||
if field.name and hasattr(Document, field.name) and EmbeddedDocument not in new_class.mro():
|
if field.name and hasattr(Document, field.name) and EmbeddedDocument not in new_class.mro():
|
||||||
raise InvalidDocumentError("%s is a document method and not a valid field name" % field.name)
|
raise InvalidDocumentError("%s is a document method and not a valid field name" % field.name)
|
||||||
|
|
||||||
@ -723,7 +719,6 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
|
|||||||
'index_opts': {},
|
'index_opts': {},
|
||||||
'queryset_class': QuerySet,
|
'queryset_class': QuerySet,
|
||||||
'delete_rules': {},
|
'delete_rules': {},
|
||||||
'proxy_fields': {},
|
|
||||||
'allow_inheritance': True
|
'allow_inheritance': True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,11 +278,6 @@ class Document(BaseDocument):
|
|||||||
signals.pre_delete.send(self.__class__, document=self)
|
signals.pre_delete.send(self.__class__, document=self)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for field_name in self._meta['proxy_fields']:
|
|
||||||
proxy_class = self._meta['proxy_fields'][field_name]
|
|
||||||
if hasattr(proxy_class, 'delete'):
|
|
||||||
proxy = getattr(self, field_name)
|
|
||||||
proxy.delete()
|
|
||||||
self.__class__.objects(pk=self.pk).delete(safe=safe)
|
self.__class__.objects(pk=self.pk).delete(safe=safe)
|
||||||
except pymongo.errors.OperationFailure, err:
|
except pymongo.errors.OperationFailure, err:
|
||||||
message = u'Could not delete document (%s)' % err.message
|
message = u'Could not delete document (%s)' % err.message
|
||||||
@ -347,13 +342,6 @@ class Document(BaseDocument):
|
|||||||
"""
|
"""
|
||||||
cls._meta['delete_rules'][(document_cls, field_name)] = rule
|
cls._meta['delete_rules'][(document_cls, field_name)] = rule
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def register_proxy_field(cls, field_name, proxy_class):
|
|
||||||
"""This method registers fields with proxy classes to delete them when
|
|
||||||
removing this object.
|
|
||||||
"""
|
|
||||||
cls._meta['proxy_fields'][field_name] = proxy_class
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def drop_collection(cls):
|
def drop_collection(cls):
|
||||||
"""Drops the entire collection associated with this
|
"""Drops the entire collection associated with this
|
||||||
|
@ -1620,38 +1620,6 @@ class FieldTest(unittest.TestCase):
|
|||||||
file = FileField()
|
file = FileField()
|
||||||
DemoFile.objects.create()
|
DemoFile.objects.create()
|
||||||
|
|
||||||
def test_file_delete_cleanup(self):
|
|
||||||
"""Ensure that the gridfs file is deleted when a document
|
|
||||||
with a GridFSProxied Field is deleted"""
|
|
||||||
class TestFile(Document):
|
|
||||||
file = FileField()
|
|
||||||
|
|
||||||
class TestImage(Document):
|
|
||||||
image = ImageField()
|
|
||||||
|
|
||||||
TestFile.drop_collection()
|
|
||||||
|
|
||||||
testfile = TestFile()
|
|
||||||
testfile.file.put('Hello, World!')
|
|
||||||
testfile.save()
|
|
||||||
|
|
||||||
testfile_grid_id = testfile.file.grid_id
|
|
||||||
testfile_fs = testfile.file.fs
|
|
||||||
|
|
||||||
testfile.delete()
|
|
||||||
self.assertFalse(testfile_fs.exists(testfile_grid_id))
|
|
||||||
|
|
||||||
TestImage.drop_collection()
|
|
||||||
|
|
||||||
testimage = TestImage()
|
|
||||||
testimage.image.put(open(TEST_IMAGE_PATH, 'r'))
|
|
||||||
testimage.save()
|
|
||||||
|
|
||||||
testimage_grid_id = testimage.image.grid_id
|
|
||||||
testimage_fs = testimage.image.fs
|
|
||||||
|
|
||||||
testimage.delete()
|
|
||||||
self.assertFalse(testimage_fs.exists(testimage_grid_id))
|
|
||||||
|
|
||||||
def test_file_field_no_default(self):
|
def test_file_field_no_default(self):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user