wcs/wcs/publisher.py

89 lines
2.6 KiB
Python

import os
import sys
from Defaults import *
try:
from wcs_cfg import *
except ImportError:
pass
from qommon.publisher import get_publisher_class, set_publisher_class, QommonPublisher
# this is terribly ugly but import RootDirectory will import a bunch of things,
# and some of them need a publisher to be set
class StubWcsPublisher(QommonPublisher):
pass
set_publisher_class(StubWcsPublisher)
from root import RootDirectory
from backoffice import RootDirectory as BackofficeRootDirectory
from admin import RootDirectory as AdminRootDirectory
import sessions
from users import User
import pickle
class UnpicklerClass(pickle.Unpickler):
def find_class(self, module, name):
if module == 'wcs.form':
module = 'qommon.form'
__import__(module)
mod = sys.modules[module]
klass = getattr(mod, name)
return klass
class WcsPublisher(StubWcsPublisher):
APP_NAME = 'wcs'
APP_DIR = APP_DIR
DATA_DIR = DATA_DIR
ERROR_LOG = ERROR_LOG
admin_help_url = {
'fr': 'http://wcs.labs.libre-entreprise.org/doc/fr/'
}
supported_languages = ['fr', 'es']
root_directory_class = RootDirectory
backoffice_directory_class = BackofficeRootDirectory
admin_directory_class = AdminRootDirectory
session_manager_class = sessions.StorageSessionManager
user_class = User
unpickler_class = UnpicklerClass
def get_backoffice_module(cls):
import backoffice
return backoffice
get_backoffice_module = classmethod(get_backoffice_module)
def get_admin_module(cls):
import admin
return admin
get_admin_module = classmethod(get_admin_module)
def set_config(self, request = None):
QommonPublisher.set_config(self, request = request)
if request:
filename = os.path.join(self.app_dir, 'config.pck')
if os.path.exists(filename):
# a configuration file exists, it may not have a charset
# specified so we default to iso-8859-15 as it was the only
# possible value
self.site_charset = self.cfg.get('misc', {}).get('charset', 'iso-8859-15')
else:
# new site, set the charset, and write it down for further
# requests
self.site_charset = 'utf-8'
self.cfg['misc'] = {'charset': 'utf-8'}
self.write_cfg()
request.response.charset = self.site_charset
set_publisher_class(WcsPublisher)
WcsPublisher.register_extra_dir(os.path.join(os.path.dirname(__file__), 'extra'))