~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/annotate_ui.py

  • Committer: Michael Hudson
  • Date: 2008-07-01 04:01:31 UTC
  • mto: This revision was merged to the branch mainline in revision 180.
  • Revision ID: michael.hudson@canonical.com-20080701040131-d5gnkk3d43jm42va
docstrings, fix tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
#
19
19
 
20
 
import datetime
21
 
import logging
22
20
import os
23
21
import posixpath
24
 
import textwrap
25
 
import time
26
 
 
27
 
import turbogears
28
 
from cherrypy import HTTPRedirect, session
29
 
 
 
22
 
 
23
from paste.httpexceptions import HTTPBadRequest
 
24
 
 
25
from loggerhead.controllers import TemplatedBranchView
30
26
from loggerhead import util
31
27
 
32
28
 
33
 
log = logging.getLogger("loggerhead.controllers")
34
 
 
35
29
def dirname(path):
36
30
    while path.endswith('/'):
37
31
        path = path[:-1]
38
32
    path = posixpath.dirname(path)
39
33
    return path
40
34
 
41
 
        
42
 
class AnnotateUI (object):
43
 
 
44
 
    def __init__(self, branch):
45
 
        # BranchView object
46
 
        self._branch = branch
47
 
        self.log = branch.log
48
 
 
49
 
    @turbogears.expose(html='loggerhead.templates.annotate')
50
 
    def default(self, *args, **kw):
51
 
        z = time.time()
52
 
        h = self._branch.get_history()
53
 
        
 
35
 
 
36
class AnnotateUI (TemplatedBranchView):
 
37
 
 
38
    template_path = 'loggerhead.templates.annotate'
 
39
 
 
40
    def get_values(self, h, args, kw, headers):
54
41
        if len(args) > 0:
55
42
            revid = h.fix_revid(args[0])
56
43
        else:
57
 
            revid = None
58
 
        
 
44
            revid = h.last_revid
 
45
 
 
46
        path = None
 
47
        if len(args) > 1:
 
48
            path = '/'.join(args[1:])
 
49
            if not path.startswith('/'):
 
50
                path = '/' + path
 
51
 
59
52
        file_id = kw.get('file_id', None)
 
53
        if (file_id is None) and (path is None):
 
54
            raise HTTPBadRequest('No file_id or filename provided to annotate')
 
55
 
60
56
        if file_id is None:
61
 
            raise HTTPRedirect(self._branch.url('/changes'))
 
57
            file_id = h.get_file_id(revid, path)
62
58
 
63
 
        try:
64
 
            revid_list, revid = h.get_file_view(revid, file_id)
65
 
        except Exception, x:
66
 
            self.log.error('Exception fetching changes: %s' % (x,))
67
 
            util.log_exception(self.log)
68
 
            raise HTTPRedirect(self._branch.url('/changes'))
69
 
            
70
59
        # no navbar for revisions
71
60
        navigation = util.Container()
72
 
        
73
 
        path = h.get_path(revid, file_id)
 
61
 
 
62
        if path is None:
 
63
            path = h.get_path(revid, file_id)
74
64
        filename = os.path.basename(path)
75
65
 
76
 
        vals = {
77
 
            'branch': self._branch,
78
 
            'util': util,
 
66
        return {
79
67
            'revid': revid,
80
68
            'file_id': file_id,
81
69
            'path': path,
82
70
            'filename': filename,
83
 
            'history': h,
84
71
            'navigation': navigation,
85
72
            'change': h.get_changes([ revid ])[0],
86
73
            'contents': list(h.annotate_file(file_id, revid)),
87
74
        }
88
 
        h.flush_cache()
89
 
        self.log.info('/annotate: %r secs' % (time.time() - z,))
90
 
        return vals