91 lines
3.6 KiB
Python
91 lines
3.6 KiB
Python
import datetime
|
|
from pyramid.authentication import AuthTktAuthenticationPolicy
|
|
from pyramid.authorization import ACLAuthorizationPolicy
|
|
from pyramid.config import Configurator
|
|
from pyramid.session import UnencryptedCookieSessionFactoryConfig
|
|
from sqlalchemy import engine_from_config
|
|
from .models import initialize_sql
|
|
from .security import groupfinder, RootFactory
|
|
from .renderers import json_renderer
|
|
|
|
|
|
def main(global_config, **settings):
|
|
""" This function returns a Pyramid WSGI application.
|
|
"""
|
|
engine = engine_from_config(settings, 'sqlalchemy.')
|
|
initialize_sql(engine)
|
|
|
|
session_factory = UnencryptedCookieSessionFactoryConfig('picard')
|
|
|
|
authentication_policy = AuthTktAuthenticationPolicy('picard', timeout=900, reissue_time=90, callback=groupfinder)
|
|
authorization_policy = ACLAuthorizationPolicy()
|
|
|
|
config = Configurator(
|
|
settings=settings,
|
|
root_factory=RootFactory,
|
|
authentication_policy=authentication_policy,
|
|
authorization_policy=authorization_policy,
|
|
session_factory=session_factory
|
|
)
|
|
|
|
config.add_renderer(name='json', factory=json_renderer)
|
|
|
|
def get_age(days):
|
|
return datetime.timedelta(days=days).total_seconds()
|
|
|
|
def add_route(name, url, has_list=True, variable='id'):
|
|
def pluralize(word):
|
|
if word.endswith('y'):
|
|
return word[:-1] + 'ies'
|
|
elif word[-1] in 'sx' or word[-2:] in ['sh', 'ch']:
|
|
return word + 'es'
|
|
elif word.endswith('an'):
|
|
return word[:-2] + 'en'
|
|
else:
|
|
return word + 's'
|
|
|
|
config.add_route(name + '_' + variable, url + '/{' + variable + '}')
|
|
config.add_route(name, url)
|
|
if has_list:
|
|
config.add_route(name + '_list', pluralize(url))
|
|
|
|
config.add_route('api_' + name + '_' + variable, '/api' + url + '/{' + variable + '}')
|
|
config.add_route('api_' + name, '/api' + url)
|
|
|
|
|
|
config.add_static_view('icons', 'picard:static/icons', cache_max_age=get_age(10))
|
|
config.add_static_view('assets', 'picard:static/assets', cache_max_age=get_age(10))
|
|
config.add_static_view('features', 'picard:static/features', cache_max_age=get_age(10))
|
|
config.add_static_view('fonts', 'picard:static/fonts', cache_max_age=get_age(10))
|
|
config.add_static_view('img', 'picard:static/img', cache_max_age=get_age(10))
|
|
config.add_static_view('js', 'picard:static/js', cache_max_age=get_age(10))
|
|
config.add_static_view('script', 'picard:static/scripts', cache_max_age=get_age(1))
|
|
config.add_static_view('css', 'picard:static/css', cache_max_age=get_age(10))
|
|
config.add_static_view('partials', 'picard:static/partials', cache_max_age=get_age(10))
|
|
config.add_static_view('template', 'picard:static/template', cache_max_age=get_age(10))
|
|
|
|
config.add_route('api_auth', '/api/Auth')
|
|
config.add_route('api_login', '/api/Login')
|
|
config.add_route('login', '/Login')
|
|
config.add_route('logout', '/Logout')
|
|
add_route('user', '/User')
|
|
add_route('tax', '/Tax')
|
|
add_route('product', '/Product')
|
|
add_route('product_group', '/ProductGroup')
|
|
add_route('food_table', '/FoodTable')
|
|
add_route('modifier', '/Modifier')
|
|
|
|
config.add_route('api_table_list', '/api/Tables')
|
|
config.add_route('table_list', '/Tables')
|
|
|
|
config.add_route('api_table_id', '/api/Table/{id}')
|
|
config.add_route('table_id', '/Table/{id}')
|
|
config.add_route('api_voucher_id', '/api/Voucher/{id}')
|
|
config.add_route('voucher_id', '/Voucher/{id}')
|
|
config.add_route('api_voucher', '/api/Voucher')
|
|
config.add_route('voucher', '/Voucher')
|
|
|
|
config.add_route('home', '/')
|
|
config.scan()
|
|
return config.make_wsgi_app()
|