~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/__init__.py

  • Committer: Robey Pointer
  • Date: 2006-12-21 01:09:00 UTC
  • Revision ID: robey@lag.net-20061221010900-auqh80g9z7r8v5tu
use bzr.dev as the branch name now that it's okay

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
#
19
19
 
20
20
import logging
21
 
import os
22
21
import re
23
22
import sys
24
23
import time
25
24
 
 
25
from configobj import ConfigObj
 
26
 
26
27
import turbogears
27
28
from turbogears import controllers
28
 
from cherrypy import NotFound
29
 
from configobj import ConfigObj
 
29
from cherrypy import HTTPRedirect, NotFound
 
30
 
 
31
my_config = ConfigObj('loggerhead.conf', encoding='utf-8')
 
32
extra_path = my_config.get('bzrpath', None)
 
33
if extra_path:
 
34
    sys.path.insert(0, extra_path)
30
35
 
31
36
from loggerhead import util
32
37
from loggerhead.branchview import BranchView
33
 
from loggerhead.history import History, is_branch
 
38
from loggerhead.history import History
34
39
 
35
40
log = logging.getLogger("loggerhead.controllers")
36
41
 
42
47
    return re.sub(r'[^\w\d_]', '_', s)
43
48
 
44
49
 
45
 
class Project (object):
 
50
class Group (object):
46
51
    def __init__(self, name, config):
47
52
        self.name = name
48
53
        self.friendly_name = config.get('name', name)
49
54
        self.description = config.get('description', '')
50
 
        self.long_description = config.get('long_description', '')
51
 
        self._config = config
52
55
        
53
56
        self._views = []
54
57
        for view_name in config.sections:
55
 
            log.debug('Configuring (project %s) branch %s...', name, view_name)
56
 
            self._add_view(view_name, config[view_name], config[view_name].get('folder'))
57
 
        
58
 
        self._auto_folder = config.get('auto_publish_folder', None)
59
 
        self._auto_list = []
60
 
        if self._auto_folder is not None:
61
 
            self._recheck_auto_folders()
 
58
            log.debug('Configuring (group %r) branch %r...', name, view_name)
 
59
            c_view_name = cherrypy_friendly(view_name)
 
60
            view = BranchView(name, c_view_name, config[view_name])
 
61
            self._views.append(view)
 
62
            setattr(self, c_view_name, view)
62
63
    
63
 
    def _recheck_auto_folders(self):
64
 
        if self._auto_folder is None:
65
 
            return
66
 
        auto_list = []
67
 
        # scan a folder for bazaar branches, and add them automatically
68
 
        for path, folders, filenames in os.walk(self._auto_folder):
69
 
            for folder in folders:
70
 
                folder = os.path.join(path, folder)
71
 
                if is_branch(folder):
72
 
                    auto_list.append(folder)
73
 
        auto_list.sort()
74
 
        if auto_list == self._auto_list:
75
 
            # nothing has changed; do nothing.
76
 
            return
77
 
 
78
 
        # rebuild views:
79
 
        log.debug('Rescanning auto-folder for project %s ...', self.name)
80
 
        self._views = []
81
 
        for folder in auto_list:
82
 
            view_name = os.path.basename(folder)
83
 
            log.debug('Auto-configuring (project %s) branch %s...', self.name, view_name)
84
 
            self._add_view(view_name, ConfigObj(), folder)
85
 
        self._auto_list = auto_list
86
 
        
87
 
    def _add_view(self, view_name, view_config, folder):
88
 
        c_view_name = cherrypy_friendly(view_name)
89
 
        view = BranchView(self.name, c_view_name, view_name, folder, view_config, self._config)
90
 
        self._views.append(view)
91
 
        setattr(self, c_view_name, view)
92
 
        
93
64
    views = property(lambda self: self._views)
94
65
 
95
66
 
96
67
class Root (controllers.RootController):
97
 
    def __init__(self, config):
98
 
        self._projects = []
99
 
        self._config = config
100
 
        for project_name in self._config.sections:
101
 
            c_project_name = cherrypy_friendly(project_name)
102
 
            project = Project(c_project_name, self._config[project_name])
103
 
            self._projects.append(project)
104
 
            setattr(self, c_project_name, project)
 
68
    def __init__(self):
 
69
        global my_config
 
70
        self._groups = []
 
71
        for group_name in my_config.sections:
 
72
            # FIXME: clean out any non-python chars
 
73
            c_group_name = cherrypy_friendly(group_name)
 
74
            group = Group(c_group_name, my_config[group_name])
 
75
            self._groups.append(group)
 
76
            setattr(self, c_group_name, group)
105
77
        
106
78
    @turbogears.expose(template='loggerhead.templates.browse')
107
79
    def index(self):
108
 
        for p in self._projects:
109
 
            p._recheck_auto_folders()
110
80
        return {
111
 
            'projects': self._projects,
 
81
            'groups': self._groups,
112
82
            'util': util,
113
 
            'title': self._config.get('title', ''),
 
83
            'title': my_config.get('title', ''),
114
84
        }
115
85
 
116
86
    def _check_rebuild(self):
117
 
        for p in self._projects:
118
 
            for v in p.views:
 
87
        for g in self._groups:
 
88
            for v in g.views:
119
89
                v.check_rebuild()
120
90
 
121
91
 
 
92
# singleton:
 
93
Root = Root()
 
94
 
 
95
# re-index every 6 hours
 
96
index_freq = 6 * 3600
 
97
 
 
98
turbogears.scheduler.add_interval_task(initialdelay=1, interval=index_freq, action=Root._check_rebuild)
122
99
 
123
100
# for use in profiling the very-slow get_change() method:
124
 
#h = Root.bazaar.bzr_dev.get_history()
 
101
#h = util.get_history()
125
102
#w = list(h.get_revision_history())
126
103
#h._get_changes_profiled(w[:100])
127
104