import os import py from templess import templess import helpers class _sidebar(object): def get_items(self, serverroot, siteroot, reserved): paths = (py.path.local(serverroot) / siteroot).listdir() ret = [] for p in paths: name = p.purebasename.replace('_', ' ') if (p.basename.startswith('.') or (p.check(file=True) and p.basename in reserved)): continue url = self.mkurl(serverroot, p) ret.append({ 'url': url, 'name': name, }) ret.sort(lambda a, b: cmp(a['name'], b['name'])) return ret def render(self, context): request = context['request'] options = request.get_options() f = helpers.templatepath(request) / 'sidebar.html' t = templess.template(f, options.get('charset', 'UTF-8')) serverroot = options['serverroot'] siteroot = options['siteroot'] reserved = [x.strip() for x in options['defaultindexes'].split(',')] env = { 'homeurl': siteroot, 'items': self.get_items(serverroot, siteroot, reserved), } return t.render(env).xpath('//body/*') def mkurl(self, serverroot, p): path = str(p)[len(serverroot):].replace(os.path.sep, '/') if not path.startswith('/'): path = '/%s' % path return path sidebar = _sidebar()