from config import config
from server import Server
from request import Request
import db.holder
import exception
server = Server(config)
def application(env, start_response):
try:
request = Request(server, env)
if request.method != 'GET' and request.method != 'POST':
result = request.answer.complete_error('405 Method Not Allowed')
return result.complete(start_response)
if request.path is None:
raise exception.HttpNotFound()
if request.path and request.path[0] == 'repo':
result = request.server.repoproxy.process(request, request.path[1:])
return result.complete(start_response)
if request.method == 'POST':
request.read_postvars()
action = request.server.actions.get(request.action)
if not action:
raise exception.HttpForbidden()
try:
with db.holder.Holder(request.server.dbpool, readonly = action.readonly) as connection:
request.create_model(connection)
result = action.process(request)
return result.complete(start_response)
except exception.ActionError as e:
postvars = request.postvars
request = Request(server, env)
request.answer.fields.update(postvars)
request.answer.errors += e.messages
with db.holder.Holder(request.server.dbpool, readonly = True) as connection:
request.create_model(connection)
result = request.server.pageroot.process(request, request.path, list())
return result.complete(start_response)
except exception.HttpForbidden:
result = request.server.pageforbidden.process(request, list(), list())
return result.complete(start_response)
except exception.HttpNotFound:
result = request.server.pagenotfound.process(request, list(), list())
return result.complete(start_response)