mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-17 05:54:19 +01:00
use ruff instead of flake8 (#2278)
* add: use ruff instead of flake8 * Update ruff switches and remove flake8 plugins * fix: ignore linting rules * fix: ignore I001 * fix: spaces before noqa --------- Co-authored-by: Kevin Chung <kchung@ctfd.io>
This commit is contained in:
@@ -185,15 +185,15 @@ def create_app(config="CTFd.config.Config"):
|
|||||||
app.jinja_loader = jinja2.ChoiceLoader(loaders)
|
app.jinja_loader = jinja2.ChoiceLoader(loaders)
|
||||||
|
|
||||||
from CTFd.models import ( # noqa: F401
|
from CTFd.models import ( # noqa: F401
|
||||||
db,
|
|
||||||
Teams,
|
|
||||||
Solves,
|
|
||||||
Challenges,
|
Challenges,
|
||||||
Fails,
|
Fails,
|
||||||
Flags,
|
|
||||||
Tags,
|
|
||||||
Files,
|
Files,
|
||||||
|
Flags,
|
||||||
|
Solves,
|
||||||
|
Tags,
|
||||||
|
Teams,
|
||||||
Tracking,
|
Tracking,
|
||||||
|
db,
|
||||||
)
|
)
|
||||||
|
|
||||||
url = create_database()
|
url = create_database()
|
||||||
@@ -214,8 +214,8 @@ def create_app(config="CTFd.config.Config"):
|
|||||||
# db.create_all call because tests use the in-memory SQLite
|
# db.create_all call because tests use the in-memory SQLite
|
||||||
# database (each connection, including db creation, is a new db).
|
# database (each connection, including db creation, is a new db).
|
||||||
# https://docs.sqlalchemy.org/en/13/dialects/sqlite.html#foreign-key-support
|
# https://docs.sqlalchemy.org/en/13/dialects/sqlite.html#foreign-key-support
|
||||||
from sqlalchemy.engine import Engine
|
|
||||||
from sqlalchemy import event
|
from sqlalchemy import event
|
||||||
|
from sqlalchemy.engine import Engine
|
||||||
|
|
||||||
@event.listens_for(Engine, "connect")
|
@event.listens_for(Engine, "connect")
|
||||||
def set_sqlite_pragma(dbapi_connection, connection_record):
|
def set_sqlite_pragma(dbapi_connection, connection_record):
|
||||||
@@ -275,16 +275,16 @@ def create_app(config="CTFd.config.Config"):
|
|||||||
init_template_globals(app)
|
init_template_globals(app)
|
||||||
|
|
||||||
# Importing here allows tests to use sensible names (e.g. api instead of api_bp)
|
# Importing here allows tests to use sensible names (e.g. api instead of api_bp)
|
||||||
from CTFd.views import views
|
|
||||||
from CTFd.teams import teams
|
|
||||||
from CTFd.users import users
|
|
||||||
from CTFd.challenges import challenges
|
|
||||||
from CTFd.scoreboard import scoreboard
|
|
||||||
from CTFd.auth import auth
|
|
||||||
from CTFd.admin import admin
|
from CTFd.admin import admin
|
||||||
from CTFd.api import api
|
from CTFd.api import api
|
||||||
from CTFd.events import events
|
from CTFd.auth import auth
|
||||||
|
from CTFd.challenges import challenges
|
||||||
from CTFd.errors import render_error
|
from CTFd.errors import render_error
|
||||||
|
from CTFd.events import events
|
||||||
|
from CTFd.scoreboard import scoreboard
|
||||||
|
from CTFd.teams import teams
|
||||||
|
from CTFd.users import users
|
||||||
|
from CTFd.views import views
|
||||||
|
|
||||||
app.register_blueprint(views)
|
app.register_blueprint(views)
|
||||||
app.register_blueprint(teams)
|
app.register_blueprint(teams)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import csv
|
import csv # noqa: I001
|
||||||
import datetime
|
import datetime
|
||||||
import os
|
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
import os
|
||||||
|
|
||||||
from flask import Blueprint, abort
|
from flask import Blueprint, abort
|
||||||
from flask import current_app as app
|
from flask import current_app as app
|
||||||
@@ -18,14 +18,14 @@ from flask import (
|
|||||||
admin = Blueprint("admin", __name__)
|
admin = Blueprint("admin", __name__)
|
||||||
|
|
||||||
# isort:imports-firstparty
|
# isort:imports-firstparty
|
||||||
from CTFd.admin import challenges # noqa: F401
|
from CTFd.admin import challenges # noqa: F401,I001
|
||||||
from CTFd.admin import notifications # noqa: F401
|
from CTFd.admin import notifications # noqa: F401,I001
|
||||||
from CTFd.admin import pages # noqa: F401
|
from CTFd.admin import pages # noqa: F401,I001
|
||||||
from CTFd.admin import scoreboard # noqa: F401
|
from CTFd.admin import scoreboard # noqa: F401,I001
|
||||||
from CTFd.admin import statistics # noqa: F401
|
from CTFd.admin import statistics # noqa: F401,I001
|
||||||
from CTFd.admin import submissions # noqa: F401
|
from CTFd.admin import submissions # noqa: F401,I001
|
||||||
from CTFd.admin import teams # noqa: F401
|
from CTFd.admin import teams # noqa: F401,I001
|
||||||
from CTFd.admin import users # noqa: F401
|
from CTFd.admin import users # noqa: F401,I001
|
||||||
from CTFd.cache import (
|
from CTFd.cache import (
|
||||||
cache,
|
cache,
|
||||||
clear_challenges,
|
clear_challenges,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import List
|
from typing import List # noqa: I001
|
||||||
|
|
||||||
from flask import abort, render_template, request, url_for
|
from flask import abort, render_template, request, url_for
|
||||||
from flask_restx import Namespace, Resource
|
from flask_restx import Namespace, Resource
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ statistics_namespace = Namespace(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# isort:imports-firstparty
|
# isort:imports-firstparty
|
||||||
from CTFd.api.v1.statistics import challenges # noqa: F401
|
from CTFd.api.v1.statistics import challenges # noqa: F401,I001
|
||||||
from CTFd.api.v1.statistics import scores # noqa: F401
|
from CTFd.api.v1.statistics import scores # noqa: F401
|
||||||
from CTFd.api.v1.statistics import submissions # noqa: F401
|
from CTFd.api.v1.statistics import submissions # noqa: F401
|
||||||
from CTFd.api.v1.statistics import teams # noqa: F401
|
from CTFd.api.v1.statistics import teams # noqa: F401
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import base64
|
import base64 # noqa: I001
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from flask import Blueprint, abort
|
from flask import Blueprint, abort
|
||||||
|
|||||||
8
CTFd/cache/__init__.py
vendored
8
CTFd/cache/__init__.py
vendored
@@ -60,7 +60,7 @@ def clear_config():
|
|||||||
|
|
||||||
|
|
||||||
def clear_standings():
|
def clear_standings():
|
||||||
from CTFd.models import Users, Teams
|
from CTFd.models import Users, Teams # noqa: I001
|
||||||
from CTFd.constants.static import CacheKeys
|
from CTFd.constants.static import CacheKeys
|
||||||
from CTFd.utils.scores import get_standings, get_team_standings, get_user_standings
|
from CTFd.utils.scores import get_standings, get_team_standings, get_user_standings
|
||||||
from CTFd.api.v1.scoreboard import ScoreboardDetail, ScoreboardList
|
from CTFd.api.v1.scoreboard import ScoreboardDetail, ScoreboardList
|
||||||
@@ -99,7 +99,7 @@ def clear_standings():
|
|||||||
|
|
||||||
|
|
||||||
def clear_challenges():
|
def clear_challenges():
|
||||||
from CTFd.utils.challenges import get_all_challenges
|
from CTFd.utils.challenges import get_all_challenges # noqa: I001
|
||||||
from CTFd.utils.challenges import get_solves_for_challenge_id
|
from CTFd.utils.challenges import get_solves_for_challenge_id
|
||||||
from CTFd.utils.challenges import get_solve_ids_for_user_id
|
from CTFd.utils.challenges import get_solve_ids_for_user_id
|
||||||
from CTFd.utils.challenges import get_solve_counts_for_challenges
|
from CTFd.utils.challenges import get_solve_counts_for_challenges
|
||||||
@@ -124,7 +124,7 @@ def clear_user_recent_ips(user_id):
|
|||||||
|
|
||||||
|
|
||||||
def clear_user_session(user_id):
|
def clear_user_session(user_id):
|
||||||
from CTFd.utils.user import (
|
from CTFd.utils.user import ( # noqa: I001
|
||||||
get_user_attrs,
|
get_user_attrs,
|
||||||
get_user_place,
|
get_user_place,
|
||||||
get_user_score,
|
get_user_score,
|
||||||
@@ -138,7 +138,7 @@ def clear_user_session(user_id):
|
|||||||
|
|
||||||
|
|
||||||
def clear_all_user_sessions():
|
def clear_all_user_sessions():
|
||||||
from CTFd.utils.user import (
|
from CTFd.utils.user import ( # noqa: I001
|
||||||
get_user_attrs,
|
get_user_attrs,
|
||||||
get_user_place,
|
get_user_place,
|
||||||
get_user_score,
|
get_user_score,
|
||||||
|
|||||||
@@ -501,7 +501,7 @@ class Users(db.Model):
|
|||||||
to no imports within the CTFd application as importing from the
|
to no imports within the CTFd application as importing from the
|
||||||
application itself will result in a circular import.
|
application itself will result in a circular import.
|
||||||
"""
|
"""
|
||||||
from CTFd.utils.scores import get_user_standings
|
from CTFd.utils.scores import get_user_standings # noqa: I001
|
||||||
from CTFd.utils.humanize.numbers import ordinalize
|
from CTFd.utils.humanize.numbers import ordinalize
|
||||||
|
|
||||||
standings = get_user_standings(admin=admin)
|
standings = get_user_standings(admin=admin)
|
||||||
@@ -618,7 +618,7 @@ class Teams(db.Model):
|
|||||||
]
|
]
|
||||||
|
|
||||||
def get_invite_code(self):
|
def get_invite_code(self):
|
||||||
from flask import current_app
|
from flask import current_app # noqa: I001
|
||||||
from CTFd.utils.security.signing import serialize, hmac
|
from CTFd.utils.security.signing import serialize, hmac
|
||||||
|
|
||||||
secret_key = current_app.config["SECRET_KEY"]
|
secret_key = current_app.config["SECRET_KEY"]
|
||||||
@@ -637,7 +637,7 @@ class Teams(db.Model):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_invite_code(cls, code):
|
def load_invite_code(cls, code):
|
||||||
from flask import current_app
|
from flask import current_app # noqa: I001
|
||||||
from CTFd.utils.security.signing import (
|
from CTFd.utils.security.signing import (
|
||||||
unserialize,
|
unserialize,
|
||||||
hmac,
|
hmac,
|
||||||
@@ -736,7 +736,7 @@ class Teams(db.Model):
|
|||||||
to no imports within the CTFd application as importing from the
|
to no imports within the CTFd application as importing from the
|
||||||
application itself will result in a circular import.
|
application itself will result in a circular import.
|
||||||
"""
|
"""
|
||||||
from CTFd.utils.scores import get_team_standings
|
from CTFd.utils.scores import get_team_standings # noqa: I001
|
||||||
from CTFd.utils.humanize.numbers import ordinalize
|
from CTFd.utils.humanize.numbers import ordinalize
|
||||||
|
|
||||||
standings = get_team_standings(admin=admin)
|
standings = get_team_standings(admin=admin)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import inspect
|
import inspect # noqa: I001
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from alembic.config import Config
|
from alembic.config import Config
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ def init_template_filters(app):
|
|||||||
|
|
||||||
|
|
||||||
def init_template_globals(app):
|
def init_template_globals(app):
|
||||||
from CTFd.constants import JINJA_ENUMS
|
from CTFd.constants import JINJA_ENUMS # noqa: I001
|
||||||
from CTFd.constants.assets import Assets
|
from CTFd.constants.assets import Assets
|
||||||
from CTFd.constants.config import Configs
|
from CTFd.constants.config import Configs
|
||||||
from CTFd.constants.plugins import Plugins
|
from CTFd.constants.plugins import Plugins
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import datetime
|
import datetime # noqa: I001
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from flask import abort
|
from flask import abort
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import os
|
import os # noqa: I001
|
||||||
|
|
||||||
from flask import Blueprint, abort
|
from flask import Blueprint, abort
|
||||||
from flask import current_app as app
|
from flask import current_app as app
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,5 +1,5 @@
|
|||||||
lint:
|
lint:
|
||||||
flake8 --ignore=E402,E501,E712,W503,E203 --exclude=CTFd/uploads CTFd/ migrations/ tests/
|
ruff check --select E,F,W,B,C4,I --ignore E402,E501,E712,B904,B905 --exclude=CTFd/uploads CTFd/ migrations/ tests/
|
||||||
yarn lint
|
yarn lint
|
||||||
black --check --diff --exclude=CTFd/uploads --exclude=node_modules .
|
black --check --diff --exclude=CTFd/uploads --exclude=node_modules .
|
||||||
prettier --check 'CTFd/themes/**/assets/**/*'
|
prettier --check 'CTFd/themes/**/assets/**/*'
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ pip-tools==5.4.0
|
|||||||
pytest==5.4.2
|
pytest==5.4.2
|
||||||
pytest-randomly==3.4.0
|
pytest-randomly==3.4.0
|
||||||
coverage==5.1
|
coverage==5.1
|
||||||
flake8==3.8.2
|
ruff==0.0.260
|
||||||
psycopg2-binary==2.8.6
|
psycopg2-binary==2.8.6
|
||||||
codecov==2.1.7
|
codecov==2.1.7
|
||||||
moto==1.3.16
|
moto==1.3.16
|
||||||
@@ -14,10 +14,7 @@ pytest-cov==2.9.0
|
|||||||
sphinx_rtd_theme==0.4.3
|
sphinx_rtd_theme==0.4.3
|
||||||
flask-debugtoolbar==0.11.0
|
flask-debugtoolbar==0.11.0
|
||||||
isort==4.3.21
|
isort==4.3.21
|
||||||
flake8-isort==3.0.0
|
|
||||||
Faker==4.1.0
|
Faker==4.1.0
|
||||||
pipdeptree==2.2.0
|
pipdeptree==2.2.0
|
||||||
black==19.10b0
|
black==19.10b0
|
||||||
pytest-sugar==0.9.4
|
pytest-sugar==0.9.4
|
||||||
flake8-comprehensions==3.3.1
|
|
||||||
flake8-bugbear==20.11.1
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from __future__ import with_statement
|
from __future__ import with_statement # noqa: I001
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from logging.config import fileConfig
|
from logging.config import fileConfig
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 1093835a1051
|
|||||||
Create Date: 2020-08-14 00:46:54.161120
|
Create Date: 2020-08-14 00:46:54.161120
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 75e8ab9a0014
|
|||||||
Create Date: 2021-06-15 19:57:37.410152
|
Create Date: 2021-06-15 19:57:37.410152
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 4d3c1b59d011
|
|||||||
Create Date: 2022-11-01 23:27:44.620893
|
Create Date: 2022-11-01 23:27:44.620893
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
from sqlalchemy.dialects import mysql
|
from sqlalchemy.dialects import mysql
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 6012fe8de495
|
|||||||
Create Date: 2022-04-07 03:53:27.554190
|
Create Date: 2022-04-07 03:53:27.554190
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: ef87d69ec29a
|
|||||||
Create Date: 2021-07-30 03:50:54.219124
|
Create Date: 2021-07-30 03:50:54.219124
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 0366ba6575ca
|
|||||||
Create Date: 2020-08-19 00:36:17.579497
|
Create Date: 2020-08-19 00:36:17.579497
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 080d29b15cd3
|
|||||||
Create Date: 2020-02-13 01:10:16.430424
|
Create Date: 2020-02-13 01:10:16.430424
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
from sqlalchemy.sql import column, table
|
from sqlalchemy.sql import column, table
|
||||||
|
|
||||||
from CTFd.models import db
|
from CTFd.models import db
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Revises: 07dfbe5e1edc
|
|||||||
Create Date: 2021-07-29 23:22:39.345426
|
Create Date: 2021-07-29 23:22:39.345426
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op # noqa: I001
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
tests/cache/test_challenges.py
vendored
4
tests/cache/test_challenges.py
vendored
@@ -60,7 +60,7 @@ def test_deleting_challenge_clears_cache_solves():
|
|||||||
data = req.get_json()["data"]
|
data = req.get_json()["data"]
|
||||||
challenge = data[0]
|
challenge = data[0]
|
||||||
assert challenge["solves"] == 1
|
assert challenge["solves"] == 1
|
||||||
from CTFd.utils.challenges import (
|
from CTFd.utils.challenges import ( # noqa: I001
|
||||||
get_solves_for_challenge_id,
|
get_solves_for_challenge_id,
|
||||||
get_solve_counts_for_challenges,
|
get_solve_counts_for_challenges,
|
||||||
)
|
)
|
||||||
@@ -100,7 +100,7 @@ def test_deleting_solve_clears_cache():
|
|||||||
data = req.get_json()["data"]
|
data = req.get_json()["data"]
|
||||||
challenge = data[0]
|
challenge = data[0]
|
||||||
assert challenge["solves"] == 1
|
assert challenge["solves"] == 1
|
||||||
from CTFd.utils.challenges import (
|
from CTFd.utils.challenges import ( # noqa: I001
|
||||||
get_solves_for_challenge_id,
|
get_solves_for_challenge_id,
|
||||||
get_solve_counts_for_challenges,
|
get_solve_counts_for_challenges,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ def test_RawEnum():
|
|||||||
|
|
||||||
|
|
||||||
def test_JSEnum():
|
def test_JSEnum():
|
||||||
from CTFd.constants import JS_ENUMS
|
from CTFd.constants import JS_ENUMS # noqa: I001
|
||||||
import json
|
import json
|
||||||
|
|
||||||
@JSEnum
|
@JSEnum
|
||||||
|
|||||||
Reference in New Issue
Block a user