Использование GridFS с Ming ODM в Turbogears

Ming поддерживает GridFS, начиная с версии 0.3, и до сих пор я использовал его в нескольких приложениях Turbogears, но не могу найти никакой документации о том, как использовать GridFS с Ming,

Это то, что я сделал до сих пор, в моем модуле модели store.py:

#import statements

BookFile = fs.filesystem('books',DBSession.impl,)

class Book(MappedClass):
    """
    Book definition.
    """
    class __mongometa__:
        session = DBSession
        name = 'books'
        unique_indexes = [('title',),('author',),]

    _id = FieldProperty(s.ObjectId)
    title = FieldProperty(s.String)
    author = FieldProperty(s.String)
    isbn = FieldProperty(s.String)
    vendor = FieldProperty(s.String)
    _file = FieldProperty(s.ObjectId)

    def _get_file(self):
        return BookFile.m.find(dict(_id=self._file)).one()
    def _set_file(self, name, data):
        f = BookFile.m.put(name,data)
        self._file = f

    bookf = SynonymProperty(_get_file, _set_file)

Как видите, fs.filesystem не может сдать ODMSession (в данном случае ThreadLocalODMSession), поэтому мне нужно перейти в базовый класс ming.Session, выполнив DBSession.impl.

Что меня беспокоит, так это то, что Turbogears использует ThreadLocalODMSession для адаптации к многопоточной среде, но то, что я делаю выше, дает соединению GridFS не потокобезопасный сеанс.

это нормально?
как мне это сделать правильно/безопасно?
Буду признателен за любую помощь, спасибо :)


person panjiesw    schedule 07.08.2012    source источник


Ответы (1)


С DBSession.impl должно быть все в порядке, так как ming.Session не хранит никаких данных.

person Rick Copeland    schedule 06.12.2012