Source code for scrolls.server
from pyramid.config import Configurator
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from scrolls.models.root import Root
import waitress
import operator
[docs]class Server(object):
def __init__(self, dependencies):
self.dependencies = dependencies
self.config = self.dependencies.getConfiguration()
[docs] def serve(self, config):
wsgiapp = self.make_wsgi_app()
waitress.serve(wsgiapp, host='0.0.0.0', port=80)
[docs] def make_wsgi_app(self, **settings):
settings['jinja2.directories'] = 'scrolls:templates'
pyrConf = Configurator(root_factory=Root, settings=settings)
secret = self.config.ticket_secret
authnPolicy = AuthTktAuthenticationPolicy(secret, hashalg='sha512')
pyrConf.set_authentication_policy(authnPolicy)
pyrConf.set_authorization_policy(ACLAuthorizationPolicy())
pyrConf.include('pyramid_jinja2')
def setup_jinja2_env():
def sortedStats(stat):
return sorted(stat.items(), key=operator.itemgetter(1),
reverse=True)
env = pyrConf.get_jinja2_environment()
env.filters['sortedStats'] = sortedStats
pyrConf.action(None, setup_jinja2_env, order=999)
pyrConf.add_static_view('static', 'static', cache_max_age=10)
pyrConf.add_request_method(lambda r: self.dependencies.withRequest(r),
'dependencies', reify=True)
pyrConf.add_request_method(lambda r: r.unauthenticated_userid,
'user_logged_in', reify=True)
pyrConf.scan('scrolls.views')
return pyrConf.make_wsgi_app()
[docs]def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
This is a pyramid-style entrypoint to be used with e.g.:
pserve development.ini
"""
import scrolls.dependencies
dependencies = scrolls.dependencies.Dependencies()
server = Server(dependencies)
return server.make_wsgi_app(**settings)