Package eggbasket :: Package controllers :: Module root
[hide private]

Source Code for Module eggbasket.controllers.root

  1  """The EggBasket root controller.""" 
  2  # -*- coding: UTF-8 -*- 
  3   
  4  import logging 
  5  import os 
  6   
  7  from os.path import join 
  8   
  9  import cherrypy as cp 
 10  import turbogears as tg 
 11   
 12  from eggbasket import __version__ 
 13  from eggbasket import model 
 14  from eggbasket.controllers.errorcatcher import ErrorCatcher 
 15  from eggbasket.controllers.admin import AdminController 
 16  from eggbasket.controllers.packages import PackageController 
 17  from eggbasket.util import is_package_dir 
 18  # from eggbasket import json 
 19  from eggbasket.util import txt2html 
 20  from eggbasket.permissions import has_permission 
 21   
 22   
 23  log = logging.getLogger("eggbasket.controllers") 
24 25 -def add_sitevars(vars):
26 """Add site information to standard template variables.""" 27 vars['sitename'] = tg.config.get('eggbasket.sitename', 28 'EggBasket Package Index') 29 vars['server_version'] = __version__ 30 vars['has_permission'] = has_permission
31 32 tg.view.variable_providers.append(add_sitevars)
33 34 -def get_static_content(name):
35 """Read text file from static directory and covert to HTML.""" 36 static_dir = tg.config.get('static_filter.dir', path='/static') 37 filename = join(static_dir, name) 38 try: 39 fo = open(filename, 'rb') 40 except (OSError, IOError): 41 text = _(u"Could not read static content resource '%s'.") % name 42 else: 43 text = fo.read().decode('utf-8') 44 fo.close() 45 return txt2html(text)
46
47 48 -class Root(ErrorCatcher):
49 """The root controller of the EggBasket application.""" 50 51 admin = AdminController() 52 package = PackageController() 53 54 @tg.expose()
55 - def index(self, *args, **kw):
56 """Delegate requests for front page to package list. 57 58 Might be replaced by a welcome / search page sometime. 59 60 """ 61 #tg.redirect('/package') 62 return self.package.index(*args, **kw)
63 simple = index 64 65 @tg.expose()
66 - def default(self, package=None, *args, **kw):
67 """Delegate requests with package name to PackageController.""" 68 #tg.redirect('/package/%s' % package) 69 return self.package.default(package, *args, **kw)
70 71 @tg.expose()
72 - def upload(self, *args, **kw):
73 """Delegate package uploads to PackageController.""" 74 return self.package.upload(*args, **kw)
75 76 @tg.expose()
77 - def upload(self, name, content, *args, **kw):
78 """Delegate package uploads to PackageController.""" 79 return self.package.upload(name, content, *args, **kw)
80 81 @tg.expose(template="eggbasket.templates.generic")
82 - def about(self, package=None):
83 """Display information page about the software.""" 84 content = get_static_content('about.rst') 85 return dict( 86 title=_(u'About'), 87 heading=_(u'About the EggBasket Software'), 88 content=content 89 )
90 91 @tg.expose(template="eggbasket.templates.generic")
92 - def help(self, package=None):
93 """Display usage information for the software.""" 94 content = get_static_content('help.rst') 95 return dict( 96 title=_(u'Help'), 97 heading=_(u'How to use EggBasket'), 98 content=content 99 )
100 101 @tg.expose(template="eggbasket.templates.login")
102 - def login(self, forward_url=None, previous_url=None, *args, **kw):
103 """Display the login form.""" 104 if not tg.identity.current.anonymous \ 105 and tg.identity.was_login_attempted() \ 106 and not tg.identity.get_identity_errors(): 107 tg.redirect(tg.url(forward_url or previous_url or '/', kw)) 108 109 forward_url = None 110 previous_url = cp.request.path 111 112 if tg.identity.was_login_attempted(): 113 msg = _("The credentials you supplied were not correct or " 114 "did not grant access to this resource.") 115 elif tg.identity.get_identity_errors(): 116 msg = _("You must provide your credentials before accessing " 117 "this resource.") 118 else: 119 msg = _("Please log in.") 120 forward_url = cp.request.headers.get("Referer", "/") 121 122 cp.response.status = 401 123 return dict(message=msg, previous_url=previous_url, logging_in=True, 124 original_parameters=cp.request.params, forward_url=forward_url)
125 126 @tg.expose()
127 - def logout(self):
128 """Clear current identity and redirect to front page.""" 129 tg.identity.current.logout() 130 tg.redirect("/")
131