Skip to content

GridFS cleanups #18

Open
Open
@rozza

Description

@rozza

FileFields dont clean up when deleted and having the same default collection name makes drop_collection difficult.

Refs: hmarr#495 hmarr#496

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions