Commit 3fa6e77d by Chris Dodge

add new collection configuration to support a 'trashcan' for assets. Update…

add new collection configuration to support a 'trashcan' for assets. Update class factory to allow callers to specify if they want the default set of assets or the trashcan
parent 67bcbe22
...@@ -43,10 +43,15 @@ CONTENTSTORE = { ...@@ -43,10 +43,15 @@ CONTENTSTORE = {
'OPTIONS': { 'OPTIONS': {
'host': 'localhost', 'host': 'localhost',
'db': 'xcontent', 'db': 'xcontent',
},
# allow for additional options that can be keyed on a name, e.g. 'trashcan'
'ADDITIONAL_OPTIONS': {
'trashcan': {
'bucket': 'trash_fs'
}
} }
} }
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
......
...@@ -3,7 +3,7 @@ from importlib import import_module ...@@ -3,7 +3,7 @@ from importlib import import_module
from django.conf import settings from django.conf import settings
_CONTENTSTORE = None _CONTENTSTORE = {}
def load_function(path): def load_function(path):
...@@ -17,13 +17,16 @@ def load_function(path): ...@@ -17,13 +17,16 @@ def load_function(path):
return getattr(import_module(module_path), name) return getattr(import_module(module_path), name)
def contentstore(): def contentstore(name='default'):
global _CONTENTSTORE global _CONTENTSTORE
if _CONTENTSTORE is None: if name not in _CONTENTSTORE:
class_ = load_function(settings.CONTENTSTORE['ENGINE']) class_ = load_function(settings.CONTENTSTORE['ENGINE'])
options = {} options = {}
options.update(settings.CONTENTSTORE['OPTIONS']) options.update(settings.CONTENTSTORE['OPTIONS'])
_CONTENTSTORE = class_(**options) if 'ADDITIONAL_OPTIONS' in settings.CONTENTSTORE:
if name in settings.CONTENTSTORE['ADDITIONAL_OPTIONS']:
options.update(settings.CONTENTSTORE['ADDITIONAL_OPTIONS'][name])
_CONTENTSTORE[name] = class_(**options)
return _CONTENTSTORE return _CONTENTSTORE[name]
from bson.son import SON
from pymongo import Connection from pymongo import Connection
import gridfs import gridfs
from gridfs.errors import NoFile from gridfs.errors import NoFile
...@@ -15,15 +14,16 @@ import os ...@@ -15,15 +14,16 @@ import os
class MongoContentStore(ContentStore): class MongoContentStore(ContentStore):
def __init__(self, host, db, port=27017, user=None, password=None, **kwargs): def __init__(self, host, db, port=27017, user=None, password=None, bucket='fs', **kwargs):
logging.debug('Using MongoDB for static content serving at host={0} db={1}'.format(host, db)) logging.debug('Using MongoDB for static content serving at host={0} db={1}'.format(host, db))
_db = Connection(host=host, port=port, **kwargs)[db] _db = Connection(host=host, port=port, **kwargs)[db]
if user is not None and password is not None: if user is not None and password is not None:
_db.authenticate(user, password) _db.authenticate(user, password)
self.fs = gridfs.GridFS(_db) self.fs = gridfs.GridFS(_db, bucket)
self.fs_files = _db["fs.files"] # the underlying collection GridFS uses
self.fs_files = _db[bucket + ".files"] # the underlying collection GridFS uses
def save(self, content): def save(self, content):
id = content.get_id() id = content.get_id()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment