Skip to content

Commit 67d721c

Browse files
committed
исправил ошиьки линтера
1 parent bac25b7 commit 67d721c

4 files changed

Lines changed: 149 additions & 89 deletions

File tree

src/app.py

Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,16 @@
88
from flask_admin import Admin
99
from flask_cors import CORS
1010
from flask_migrate import Migrate
11-
from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token, create_refresh_token, set_access_cookies, set_refresh_cookies, verify_jwt_in_request
11+
from flask_jwt_extended import (
12+
JWTManager,
13+
jwt_required,
14+
get_jwt_identity,
15+
create_access_token,
16+
create_refresh_token,
17+
set_access_cookies,
18+
set_refresh_cookies,
19+
verify_jwt_in_request,
20+
)
1221

1322
from miminet_admin import (
1423
MiminetAdminIndexView,
@@ -24,7 +33,8 @@
2433
insert_test_user,
2534
login_index,
2635
login_manager,
27-
remove_test_user, redirect_login,
36+
remove_test_user,
37+
redirect_login,
2838
)
2939
from miminet_config import SECRET_KEY
3040
from miminet_model import Network, db, init_db, User
@@ -75,27 +85,30 @@
7585
)
7686

7787
app.config.update(
78-
JWT_SECRET_KEY=os.environ.get('JWT_SECRET_KEY', "secret-key"),
79-
JWT_TOKEN_LOCATION = ['cookies'],
80-
JWT_COOKIE_DOMAIN = f".{os.environ.get('BASE_DOMAIN', 'local.tst')}",
81-
JWT_COOKIE_SECURE = False,#True,
82-
JWT_COOKIE_CSRF_PROTECT = False,
83-
JWT_COOKIE_SAMESITE = None,
84-
JWT_ACCESS_TOKEN_EXPIRES = timedelta(minutes=3),
85-
JWT_REFRESH_TOKEN_EXPIRES = timedelta(minutes=30)
88+
JWT_SECRET_KEY=os.environ.get("JWT_SECRET_KEY", "secret-key"),
89+
JWT_TOKEN_LOCATION=["cookies"],
90+
JWT_COOKIE_DOMAIN=f".{os.environ.get('BASE_DOMAIN', 'local.tst')}",
91+
JWT_COOKIE_SECURE=False, # True,
92+
JWT_COOKIE_CSRF_PROTECT=False,
93+
JWT_COOKIE_SAMESITE=None,
94+
JWT_ACCESS_TOKEN_EXPIRES=timedelta(minutes=3),
95+
JWT_REFRESH_TOKEN_EXPIRES=timedelta(minutes=30),
8696
)
8797

88-
CORS(app,
89-
resources={
90-
r"/*": {
91-
"origins": os.environ.get('ALLOWED_HOSTS', ["http://quiz.local.tst", "http://local.tst"]),
92-
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
93-
"allow_headers": ["Content-Type", "Authorization", "X-Requested-With"],
94-
"supports_credentials": True,
95-
"max_age": 3600
96-
}
97-
},
98-
intercept_exceptions=False
98+
CORS(
99+
app,
100+
resources={
101+
r"/*": {
102+
"origins": os.environ.get(
103+
"ALLOWED_HOSTS", ["http://quiz.local.tst", "http://local.tst"]
104+
),
105+
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
106+
"allow_headers": ["Content-Type", "Authorization", "X-Requested-With"],
107+
"supports_credentials": True,
108+
"max_age": 3600,
109+
}
110+
},
111+
intercept_exceptions=False,
99112
)
100113

101114
# SQLAlchimy config
@@ -106,9 +119,10 @@
106119
MAIN_URL = os.getenv("MAIN_URL")
107120

108121
PUBLIC_CONFIG_KEYS = [
109-
'EXTERNAL_BASE_URL',
122+
"EXTERNAL_BASE_URL",
110123
]
111124

125+
112126
def get_database_uri(mode):
113127
"""
114128
Выбирает URI базы данных в зависимости от режима работы.
@@ -155,6 +169,7 @@ def get_database_uri(mode):
155169
else:
156170
raise ValueError(f"Unknown MODE: {mode}. Expected 'dev' or 'prod'")
157171

172+
158173
app.config["SQLALCHEMY_DATABASE_URI"] = get_database_uri(MODE)
159174
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
160175
app.config["SECRET_KEY"] = SECRET_KEY
@@ -261,7 +276,9 @@ def get_database_uri(mode):
261276
admin.add_view(SectionView(Section, db.session, name="Разделы"))
262277
admin.add_view(QuestionView(Question, db.session, name="Вопросы"))
263278
admin.add_view(AnswerView(Answer, db.session, name="Ответы"))
264-
admin.add_view(QuestionCategoryView(QuestionCategory, db.session, name="Категории вопросов"))
279+
admin.add_view(
280+
QuestionCategoryView(QuestionCategory, db.session, name="Категории вопросов")
281+
)
265282
admin.add_view(SessionQuestionView(SessionQuestion, db.session))
266283
admin.add_view(
267284
CreateCheckTaskView(
@@ -272,34 +289,43 @@ def get_database_uri(mode):
272289
)
273290
)
274291

292+
275293
@app.context_processor
276294
def utility_processor():
277295
return dict(external_url_for=external_url_for)
278296

297+
279298
@app.context_processor
280299
def inject_user():
281300
try:
282301
verify_jwt_in_request()
283302
current_user_id = get_jwt_identity()
284303
current_user = User.query.filter(User.id == current_user_id).first()
285-
return dict(current_user_id=current_user_id, is_authenticated=True, current_user=current_user)
304+
return dict(
305+
current_user_id=current_user_id,
306+
is_authenticated=True,
307+
current_user=current_user,
308+
)
286309
except:
287310
return dict(current_user_id=None, is_authenticated=False, current_user=None)
288311

312+
289313
@jwt.expired_token_loader
290314
def expired_token_callback(jwt_header, jwt_payload):
291315
if is_api_request():
292316
return jsonify({"msg": "Token expired"}), 401
293317
else:
294318
return redirect_login()
295319

320+
296321
@jwt.invalid_token_loader
297322
def invalid_token_callback(error):
298323
if is_api_request():
299324
return jsonify({"msg": "Invalid token"}), 422
300325
else:
301326
return redirect_login()
302327

328+
303329
@jwt.unauthorized_loader
304330
def missing_token_callback(error):
305331
if is_api_request():
@@ -313,11 +339,11 @@ def confing_js():
313339
config = {key: os.getenv(key) for key in PUBLIC_CONFIG_KEYS if os.getenv(key, "")}
314340

315341
js_content = render_template_string(
316-
open('templates/config.js', 'r', encoding='utf-8').read(),
317-
**config
342+
open("templates/config.js", "r", encoding="utf-8").read(), **config
318343
)
319344

320-
return Response(js_content, mimetype='application/javascript')
345+
return Response(js_content, mimetype="application/javascript")
346+
321347

322348
@app.route("/home")
323349
@jwt_required()
@@ -331,14 +357,15 @@ def home():
331357
)
332358
return render_template("home.html", networks=networks)
333359

334-
@app.route('/refresh_access', methods=['POST', 'GET'])
360+
361+
@app.route("/refresh_access", methods=["POST", "GET"])
335362
@jwt_required(refresh=True)
336363
def refresh_access():
337364
identity = get_jwt_identity()
338365
access_token = create_access_token(identity=identity)
339366
refresh_token = create_refresh_token(identity=identity)
340367

341-
response = jsonify({'msg': 'access token refreshed'})
368+
response = jsonify({"msg": "access token refreshed"})
342369
set_access_cookies(response, access_token)
343370
set_refresh_cookies(response, refresh_token)
344371
return response

src/miminet_auth.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def handle_needs_login():
2727
flash("Для выполнения этого действия необходимо войти.")
2828
return redirect(url_for("login_index", next=request.endpoint))
2929

30+
3031
def redirect_next_url(fallback):
3132
if "next_url" not in session:
3233
redirect(fallback)
@@ -42,11 +43,12 @@ def allowed_file(filename):
4243

4344

4445
def redirect_login():
45-
return redirect(external_url_for('auth', filename='login.html', next=request.url))
46+
return redirect(external_url_for("auth", filename="login.html", next=request.url))
4647

4748

4849
def login_index():
49-
return redirect(external_url_for('auth', filename='login.html', next=request.url))
50+
return redirect(external_url_for("auth", filename="login.html", next=request.url))
51+
5052

5153
class TestUserData:
5254
"""Data for test user initializing."""

src/miminet_jwt.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,46 @@
33

44
from flask import request
55

6+
67
def external_url_for(endpoint, filename=None, **kwargs):
7-
base = os.environ.get('EXTERNAL_BASE_URL', 'localhost').rstrip('/')
8+
base = os.environ.get("EXTERNAL_BASE_URL", "localhost").rstrip("/")
89

9-
if endpoint == 'static':
10-
endpoint = os.environ.get('STATIC_SERVER_URL', '/static').strip('/')
10+
if endpoint == "static":
11+
endpoint = os.environ.get("STATIC_SERVER_URL", "/static").strip("/")
1112

12-
endpoint = endpoint.strip('/')
13+
endpoint = endpoint.strip("/")
1314
if filename is not None:
14-
filename = filename.strip('/')
15+
filename = filename.strip("/")
1516
endpoint = f"{endpoint}/{filename}" if endpoint else filename
1617

17-
path = endpoint.lstrip('/')
18-
query_string = urlencode(kwargs) if kwargs else ''
18+
path = endpoint.lstrip("/")
19+
query_string = urlencode(kwargs) if kwargs else ""
1920

20-
full_url = urljoin(base + '/', path)
21+
full_url = urljoin(base + "/", path)
2122
if query_string:
2223
parsed = urlparse(full_url)
23-
full_url = urlunparse((
24-
parsed.scheme,
25-
parsed.netloc,
26-
parsed.path,
27-
parsed.params,
28-
query_string,
29-
parsed.fragment
30-
))
24+
full_url = urlunparse(
25+
(
26+
parsed.scheme,
27+
parsed.netloc,
28+
parsed.path,
29+
parsed.params,
30+
query_string,
31+
parsed.fragment,
32+
)
33+
)
3134

3235
return full_url
3336

37+
3438
def is_api_request():
35-
if request.accept_mimetypes.accept_json and not request.accept_mimetypes.accept_html:
39+
if (
40+
request.accept_mimetypes.accept_json
41+
and not request.accept_mimetypes.accept_html
42+
):
3643
return True
37-
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
44+
if request.headers.get("X-Requested-With") == "XMLHttpRequest":
3845
return True
39-
if request.content_type and 'application/json' in request.content_type:
46+
if request.content_type and "application/json" in request.content_type:
4047
return True
4148
return False

0 commit comments

Comments
 (0)