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