import py import re from templess import templess import helpers import rest class _downloads(object): extensions = ['.tar', '.gz', '.bz2', '.zip'] reg_version = re.compile(r'\-([0-9]+(\.[0-9]+)*([(a|b|rc)][0-9]*)?)') def get_packages(self, serverroot, siteroot): packages = [] path = py.path.svnwc(serverroot) / siteroot / 'downloads' for package in path.listdir(): if package.ext in self.extensions: filename = package.basename version = self.reg_version.search(filename).group(1) packages.append({ 'filepath': '%s/downloads/%s' % (siteroot, filename), 'filename': filename, 'size': package.size(), 'version': version, 'releasedate': package.propget('dl:date').strip(), 'releasenotes': package.propget('dl:notes').strip(), }) packages.sort(lambda a, b: cmp(b['releasedate'], a['releasedate'])) return packages def render(self, context): request = context['request'] options = request.get_options() text = '' dpath = py.path.local(request.filename) / 'index.rst' tree = rest.rest2etree(dpath) env = { 'packages': self.get_packages(options['serverroot'], options['siteroot']), 'text': tree.xpath('//body/*'), } f = helpers.templatepath(request) / 'downloads.html' t = templess.template(f, options.get('charset', 'UTF-8')) return t.render(env).xpath('//body/*') downloads = _downloads()