view pylons_app/lib/app_globals.py @ 106:a86c8de926b4

some fixes in graph tab. Little fixes in files
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 25 Apr 2010 23:26:14 +0200
parents aec4c0071cb3
children f7c403e89d5b
line wrap: on
line source

"""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])