"""The application's Globals object""" #uncomment the following if you want to serve a single repo #from mercurial.hgweb.hgweb_mod import hgweb from mercurial.hgweb.hgwebdir_mod import hgwebdir from mercurial import templater from mercurial.hgweb.request import wsgiapplication from mercurial import ui, config import os from beaker.cache import CacheManager from beaker.util import parse_cache_config_options class Globals(object): """Globals acts as a container for objects available throughout the life of the application """ def __init__(self, config): """One instance of Globals is created during application initialization and is available during requests via the 'app_globals' variable """ self.cache = CacheManager(**parse_cache_config_options(config)) self.baseui = self.make_ui('hgwebdir.config') def make_ui(self, path='hgwebdir.config'): """ A funcion that will read python rc files and make an ui from read options @param path: path to mercurial config file """ #propagated from mercurial documentation sections = [ 'alias', 'auth', 'decode/encode', 'defaults', 'diff', 'email', 'extensions', 'format', 'merge-patterns', 'merge-tools', 'hooks', 'http_proxy', 'smtp', 'patch', 'paths', 'profiling', 'server', 'trusted', 'ui', 'web', ] repos = path baseui = ui.ui() cfg = config.config() cfg.read(repos) self.paths = cfg.items('paths') self.base_path = self.paths[0][1].replace('*', '') self.check_repo_dir(self.paths) self.set_statics(cfg) for section in sections: for k, v in cfg.items(section): baseui.setconfig(section, k, v) return baseui def set_statics(self, cfg): ''' set's the statics for use in mako templates @param cfg: ''' self.statics = cfg.get('web', 'staticurl', '/static') if not self.statics.endswith('/'): self.statics += '/' def check_repo_dir(self, paths): repos_path = paths[0][1].split('/') if repos_path[-1] in ['*', '**']: repos_path = repos_path[:-1] if repos_path[0] != '/': repos_path[0] = '/' if not os.path.isdir(os.path.join(*repos_path)): raise Exception('Not a valid repository in %s' % paths[0][1])