/kai/controllers/download.py

https://bitbucket.org/bbangert/kai/ · Python · 46 lines · 37 code · 8 blank · 1 comment · 8 complexity · 3fd2fda3f877b5f52df822b4d3813d6a MD5 · raw file

  1. import logging
  2. import os
  3. from paste.urlparser import StaticURLParser
  4. from pylons import app_globals, config, request, response, session, tmpl_context as c
  5. from pylons.controllers.util import abort, redirect
  6. from kai.lib.base import BaseController, render
  7. log = logging.getLogger(__name__)
  8. class DownloadController(BaseController):
  9. def index(self, version, file=None):
  10. if version not in app_globals.versions:
  11. abort(404)
  12. dldir = os.path.join(config['download_dir'], str(version))
  13. if not os.path.exists(dldir):
  14. abort(404)
  15. if file:
  16. fdir = os.path.join(dldir, file)
  17. if not os.path.exists(fdir):
  18. abort(404)
  19. dl_srv = StaticURLParser(dldir)
  20. request.environ['PATH_INFO'] = '/%s' % (file)
  21. return dl_srv(request.environ, self.start_response)
  22. files = os.listdir(dldir)
  23. files.sort()
  24. filelist = []
  25. use_cachefly = version == app_globals.current_version
  26. # use_cachefly = False
  27. for f in files:
  28. if f.startswith('.'):
  29. continue
  30. if use_cachefly:
  31. filelist.append('<li><a href="http://cdn.pylonshq.com/download/%s/%s">'
  32. '%s</a></li>\n' % (version, f, f))
  33. else:
  34. filelist.append('<li><a href="/download/%s/%s">%s</a></li>\n'
  35. % (version, f, f))
  36. filelist = '<ul>\n'+''.join(filelist)+'</ul>\n'
  37. c.files = filelist
  38. return render('/download/index.mako')