1
- import sys
2
1
import logging
3
- import urlparse
2
+ import os
3
+ import sys
4
4
import urllib
5
+ import urlparse
5
6
6
7
import redis
8
+ < << << << HEAD
7
9
from flask import Flask , current_app
8
10
from werkzeug .contrib .fixers import ProxyFix
9
11
from werkzeug .routing import BaseConverter
10
12
from statsd import StatsClient
13
+ == == == =
14
+ >> >> >> > Split redash / __init__ .py to prevent import time side - effects .
11
15
from flask_mail import Mail
12
16
from flask_limiter import Limiter
13
17
from flask_limiter .util import get_ipaddr
14
18
from flask_migrate import Migrate
19
+ from statsd import StatsClient
20
+ from werkzeug .local import LocalProxy
15
21
16
- from redash import settings
17
- from redash .query_runner import import_query_runners
18
- from redash .destinations import import_destinations
19
-
22
+ from . import settings
20
23
21
24
__version__ = '7.0.0'
22
25
23
26
24
- import os
25
27
if os .environ .get ("REMOTE_DEBUG" ):
26
28
import ptvsd
27
29
ptvsd .enable_attach (address = ('0.0.0.0' , 5678 ))
@@ -36,10 +38,8 @@ def setup_logging():
36
38
37
39
# Make noisy libraries less noisy
38
40
if settings .LOG_LEVEL != "DEBUG" :
39
- logging .getLogger ("passlib" ).setLevel ("ERROR" )
40
- logging .getLogger ("requests.packages.urllib3" ).setLevel ("ERROR" )
41
- logging .getLogger ("snowflake.connector" ).setLevel ("ERROR" )
42
- logging .getLogger ('apiclient' ).setLevel ("ERROR" )
41
+ for name in ["passlib" , "requests.packages.urllib3" , "snowflake.connector" , "apiclient" ]:
42
+ logging .getLogger (name ).setLevel ("ERROR" )
43
43
44
44
45
45
def create_redis_connection ():
@@ -67,69 +67,13 @@ def create_redis_connection():
67
67
68
68
69
69
setup_logging ()
70
- redis_connection = create_redis_connection ()
71
-
72
- mail = Mail ()
73
- migrate = Migrate ()
74
- mail .init_mail (settings .all_settings ())
75
- statsd_client = StatsClient (host = settings .STATSD_HOST , port = settings .STATSD_PORT , prefix = settings .STATSD_PREFIX )
76
- limiter = Limiter (key_func = get_ipaddr , storage_uri = settings .LIMITER_STORAGE )
77
70
78
- import_query_runners (settings .QUERY_RUNNERS )
79
- import_destinations (settings .DESTINATIONS )
71
+ redis_connection = LocalProxy (create_redis_connection )
80
72
81
- from redash .version_check import reset_new_version_status
82
- reset_new_version_status ()
73
+ mail = LocalProxy (Mail )
83
74
75
+ migrate = LocalProxy (Migrate )
84
76
85
- class SlugConverter (BaseConverter ):
86
- def to_python (self , value ):
87
- # This is ay workaround for when we enable multi-org and some files are being called by the index rule:
88
- # for path in settings.STATIC_ASSETS_PATHS:
89
- # full_path = safe_join(path, value)
90
- # if os.path.isfile(full_path):
91
- # raise ValidationError()
92
-
93
- return value
94
-
95
- def to_url (self , value ):
96
- return value
97
-
98
-
99
- def create_app ():
100
- from redash import authentication , extensions , handlers , security
101
- from redash .handlers .webpack import configure_webpack
102
- from redash .handlers import chrome_logger
103
- from redash .models import db , users
104
- from redash .metrics import request as request_metrics
105
- from redash .utils import sentry
106
-
107
- sentry .init ()
108
-
109
- app = Flask (__name__ ,
110
- template_folder = settings .STATIC_ASSETS_PATH ,
111
- static_folder = settings .STATIC_ASSETS_PATH ,
112
- static_url_path = '/static' )
113
-
114
- # Make sure we get the right referral address even behind proxies like nginx.
115
- app .wsgi_app = ProxyFix (app .wsgi_app , settings .PROXIES_COUNT )
116
- app .url_map .converters ['org_slug' ] = SlugConverter
117
-
118
- # configure our database
119
- app .config ['SQLALCHEMY_DATABASE_URI' ] = settings .SQLALCHEMY_DATABASE_URI
120
- app .config .update (settings .all_settings ())
121
-
122
- security .init_app (app )
123
- request_metrics .init_app (app )
124
- db .init_app (app )
125
- migrate .init_app (app , db )
126
- mail .init_app (app )
127
- authentication .init_app (app )
128
- limiter .init_app (app )
129
- handlers .init_app (app )
130
- configure_webpack (app )
131
- extensions .init_app (app )
132
- chrome_logger .init_app (app )
133
- users .init_app (app )
77
+ statsd_client = StatsClient (host = settings .STATSD_HOST , port = settings .STATSD_PORT , prefix = settings .STATSD_PREFIX )
134
78
135
- return app
79
+ limiter = Limiter ( key_func = get_ipaddr , storage_uri = settings . LIMITER_STORAGE )
0 commit comments