werkzeug

Форк
0
/
application.py 
47 строк · 1.5 Кб
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
7

8
from . import views
9
from .models import URL
10
from .utils import local
11
from .utils import local_manager
12
from .utils import STATIC_PATH
13
from .utils import url_map
14

15

16
class Couchy:
17
    def __init__(self, db_uri):
18
        local.application = self
19

20
        server = Server(db_uri)
21
        try:
22
            db = server.create("urls")
23
        except Exception:
24
            db = server["urls"]
25
        self.dispatch = SharedDataMiddleware(self.dispatch, {"/static": STATIC_PATH})
26

27
        URL.db = db
28

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)
33
        try:
34
            endpoint, values = adapter.match()
35
            handler = getattr(views, endpoint)
36
            response = handler(request, **values)
37
        except NotFound:
38
            response = views.not_found(request)
39
            response.status_code = 404
40
        except HTTPException as e:
41
            response = e
42
        return ClosingIterator(
43
            response(environ, start_response), [local_manager.cleanup]
44
        )
45

46
    def __call__(self, environ, start_response):
47
        return self.dispatch(environ, start_response)
48

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.