Open
Description
FileFields dont clean up when deleted and having the same default collection name makes drop_collection
difficult.
Implement cleanup for:
import tempfile
import unittest
from mongoengine import *
import pymongo, gridfs
class GridFS(unittest.TestCase):
def test_file_delete_cleanup(self):
"""Ensure that the gridfs file is deleted when a document
with a GridFSProxied Field is deleted"""
class RecursiveObject(EmbeddedDocument):
obj = EmbeddedDocumentField('self')
file = FileField()
class TestFile(Document):
recursive_obj = EmbeddedDocumentField(RecursiveObject)
TestFile.drop_collection()
def _create_testfile():
testfile = TestFile(recursive_obj=RecursiveObject(obj=RecursiveObject()))
testfile.recursive_obj.file.put('Hello, World!')
testfile.recursive_obj.obj.file.put('MongoEngine')
testfile.save()
return testfile
def _assert(testfile):
testfile_grid_id = testfile.recursive_obj.file.grid_id
testfile_fs = testfile.recursive_obj.file.fs
testfile_grid_id_2 = testfile.recursive_obj.obj.file.grid_id
testfile_fs_2 = testfile.recursive_obj.obj.file.fs
self.assertFalse(testfile_fs.exists(testfile_grid_id))
self.assertFalse(testfile_fs_2.exists(testfile_grid_id_2))
# Test document.delete()
testfile = _create_testfile()
testfile.delete()
_assert(testfile)
# Test Queryset delete()
testfile = _create_testfile()
TestFile.objects().delete()
_assert(testfile)
# Test drop_collection
testfile = _create_testfile()
TestFile.drop_collection()
_assert(testfile)