werkzeug

Форк
0
/
webapp.py 
46 строк · 1.5 Кб
1
from os import path
2

3
from sqlalchemy import create_engine
4
from werkzeug.exceptions import HTTPException
5
from werkzeug.middleware.shared_data import SharedDataMiddleware
6
from werkzeug.wrappers import Request
7
from werkzeug.wsgi import ClosingIterator
8

9
from . import views  # noqa: F401
10
from .database import metadata
11
from .database import session
12
from .utils import endpoints
13
from .utils import local
14
from .utils import local_manager
15
from .utils import url_map
16

17
#: path to shared data
18
SHARED_DATA = path.join(path.dirname(__file__), "shared")
19

20

21
class Plnt:
22
    def __init__(self, database_uri):
23
        self.database_engine = create_engine(database_uri)
24

25
        self._dispatch = local_manager.middleware(self.dispatch_request)
26
        self._dispatch = SharedDataMiddleware(self._dispatch, {"/shared": SHARED_DATA})
27

28
    def init_database(self):
29
        metadata.create_all(self.database_engine)
30

31
    def bind_to_context(self):
32
        local.application = self
33

34
    def dispatch_request(self, environ, start_response):
35
        self.bind_to_context()
36
        local.request = request = Request(environ, start_response)
37
        local.url_adapter = adapter = url_map.bind_to_environ(environ)
38
        try:
39
            endpoint, values = adapter.match(request.path)
40
            response = endpoints[endpoint](request, **values)
41
        except HTTPException as e:
42
            response = e
43
        return ClosingIterator(response(environ, start_response), session.remove)
44

45
    def __call__(self, environ, start_response):
46
        return self._dispatch(environ, start_response)
47

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

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

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

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