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()

