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 не потокобезопасный сеанс.
это нормально?
как мне это сделать правильно/безопасно?
Буду признателен за любую помощь, спасибо :)