1
from couchdb.client import Server
2
from werkzeug.exceptions import HTTPException
3
from werkzeug.exceptions import NotFound
4
from werkzeug.middleware.shared_data import SharedDataMiddleware
5
from werkzeug.wrappers import Request
6
from werkzeug.wsgi import ClosingIterator
10
from .utils import local
11
from .utils import local_manager
12
from .utils import STATIC_PATH
13
from .utils import url_map
17
def __init__(self, db_uri):
18
local.application = self
20
server = Server(db_uri)
22
db = server.create("urls")
25
self.dispatch = SharedDataMiddleware(self.dispatch, {"/static": STATIC_PATH})
29
def dispatch(self, environ, start_response):
30
local.application = self
31
request = Request(environ)
32
local.url_adapter = adapter = url_map.bind_to_environ(environ)
34
endpoint, values = adapter.match()
35
handler = getattr(views, endpoint)
36
response = handler(request, **values)
38
response = views.not_found(request)
39
response.status_code = 404
40
except HTTPException as e:
42
return ClosingIterator(
43
response(environ, start_response), [local_manager.cleanup]
46
def __call__(self, environ, start_response):
47
return self.dispatch(environ, start_response)