- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.2k
Open
Labels
Milestone
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)