~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/directory_ui.py

  • Committer: Ian Clatworthy
  • Date: 2010-04-13 23:35:01 UTC
  • mfrom: (329.2.5 trailing-whitespace)
  • Revision ID: ian.clatworthy@canonical.com-20100413233501-dqhbvegwtw0v5hja
Clean-up trailing whitespace

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2008  Canonical Ltd.
 
2
#                     (Authored by Martin Albisetti <argentina@gmail.com>)
 
3
#
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License
 
15
# along with this program; if not, write to the Free Software
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
#
 
18
 
 
19
import datetime
 
20
import logging
 
21
import stat
 
22
 
 
23
from bzrlib import branch, errors
 
24
 
 
25
from loggerhead import util
 
26
from loggerhead.controllers import TemplatedBranchView
 
27
 
 
28
 
 
29
class DirEntry(object):
 
30
 
 
31
    def __init__(self, dirname, parity, branch):
 
32
        self.dirname = dirname
 
33
        self.parity = parity
 
34
        self.branch = branch
 
35
        if branch is not None:
 
36
            # If a branch is empty, bzr raises an exception when trying this
 
37
            try:
 
38
                self.last_change = datetime.datetime.fromtimestamp(
 
39
                    branch.repository.get_revision(
 
40
                        branch.last_revision()).timestamp)
 
41
            except:
 
42
                self.last_change = None
 
43
 
 
44
 
 
45
class DirectoryUI(TemplatedBranchView):
 
46
    """
 
47
    """
 
48
 
 
49
    template_path = 'loggerhead.templates.directory'
 
50
 
 
51
    def __init__(self, static_url_base, transport, name):
 
52
 
 
53
        class _branch(object):
 
54
            context_url = 1
 
55
 
 
56
            @staticmethod
 
57
            def static_url(path):
 
58
                return self._static_url_base + path
 
59
        self._branch = _branch
 
60
        self._history_callable = lambda: None
 
61
        self._name = name
 
62
        self._static_url_base = static_url_base
 
63
        self.transport = transport
 
64
        self.log = logging.getLogger('')
 
65
 
 
66
    def get_values(self, path, kwargs, response):
 
67
        listing = [d for d in self.transport.list_dir('.')
 
68
                   if not d.startswith('.')]
 
69
        listing.sort(key=lambda x: x.lower())
 
70
        dirs = []
 
71
        parity = 0
 
72
        for d in listing:
 
73
            try:
 
74
                b = branch.Branch.open_from_transport(self.transport.clone(d))
 
75
                if b.get_config().get_user_option('http_serve') == 'False':
 
76
                    continue
 
77
            except:
 
78
                try:
 
79
                    if not stat.S_ISDIR(self.transport.stat(d).st_mode):
 
80
                        continue
 
81
                except errors.NoSuchFile:
 
82
                    continue
 
83
                b = None
 
84
            dirs.append(DirEntry(d, parity, b))
 
85
            parity = 1 - parity
 
86
        # Create breadcrumb trail
 
87
        directory_breadcrumbs = util.directory_breadcrumbs(
 
88
                self._name,
 
89
                False,
 
90
                'directory')
 
91
        return {
 
92
            'dirs': dirs,
 
93
            'name': self._name,
 
94
            'directory_breadcrumbs': directory_breadcrumbs,
 
95
            }