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:
Alper Berber
2023-04-11 18:20:48 +03:00
committed by GitHub
parent faa937020a
commit 23c7b2f90f
24 changed files with 52 additions and 55 deletions

View File

@@ -185,15 +185,15 @@ def create_app(config="CTFd.config.Config"):
app.jinja_loader = jinja2.ChoiceLoader(loaders)
from CTFd.models import ( # noqa: F401
db,
Teams,
Solves,
Challenges,
Fails,
Flags,
Tags,
Files,
Flags,
Solves,
Tags,
Teams,
Tracking,
db,
)
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
# database (each connection, including db creation, is a new db).
# https://docs.sqlalchemy.org/en/13/dialects/sqlite.html#foreign-key-support
from sqlalchemy.engine import Engine
from sqlalchemy import event
from sqlalchemy.engine import Engine
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
@@ -275,16 +275,16 @@ def create_app(config="CTFd.config.Config"):
init_template_globals(app)
# 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.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.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(teams)

View File

@@ -1,7 +1,7 @@
import csv
import csv # noqa: I001
import datetime
import os
from io import StringIO
import os
from flask import Blueprint, abort
from flask import current_app as app
@@ -18,14 +18,14 @@ from flask import (
admin = Blueprint("admin", __name__)
# isort:imports-firstparty
from CTFd.admin import challenges # noqa: F401
from CTFd.admin import notifications # noqa: F401
from CTFd.admin import pages # noqa: F401
from CTFd.admin import scoreboard # noqa: F401
from CTFd.admin import statistics # noqa: F401
from CTFd.admin import submissions # noqa: F401
from CTFd.admin import teams # noqa: F401
from CTFd.admin import users # noqa: F401
from CTFd.admin import challenges # noqa: F401,I001
from CTFd.admin import notifications # noqa: F401,I001
from CTFd.admin import pages # noqa: F401,I001
from CTFd.admin import scoreboard # noqa: F401,I001
from CTFd.admin import statistics # noqa: F401,I001
from CTFd.admin import submissions # noqa: F401,I001
from CTFd.admin import teams # noqa: F401,I001
from CTFd.admin import users # noqa: F401,I001
from CTFd.cache import (
cache,
clear_challenges,

View File

@@ -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_restx import Namespace, Resource

View File

@@ -5,7 +5,7 @@ statistics_namespace = Namespace(
)
# 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 submissions # noqa: F401
from CTFd.api.v1.statistics import teams # noqa: F401

View File

@@ -1,4 +1,4 @@
import base64
import base64 # noqa: I001
import requests
from flask import Blueprint, abort

View File

@@ -60,7 +60,7 @@ def clear_config():
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.utils.scores import get_standings, get_team_standings, get_user_standings
from CTFd.api.v1.scoreboard import ScoreboardDetail, ScoreboardList
@@ -99,7 +99,7 @@ def clear_standings():
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_solve_ids_for_user_id
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):
from CTFd.utils.user import (
from CTFd.utils.user import ( # noqa: I001
get_user_attrs,
get_user_place,
get_user_score,
@@ -138,7 +138,7 @@ def clear_user_session(user_id):
def clear_all_user_sessions():
from CTFd.utils.user import (
from CTFd.utils.user import ( # noqa: I001
get_user_attrs,
get_user_place,
get_user_score,

View File

@@ -501,7 +501,7 @@ class Users(db.Model):
to no imports within the CTFd application as importing from the
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
standings = get_user_standings(admin=admin)
@@ -618,7 +618,7 @@ class Teams(db.Model):
]
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
secret_key = current_app.config["SECRET_KEY"]
@@ -637,7 +637,7 @@ class Teams(db.Model):
@classmethod
def load_invite_code(cls, code):
from flask import current_app
from flask import current_app # noqa: I001
from CTFd.utils.security.signing import (
unserialize,
hmac,
@@ -736,7 +736,7 @@ class Teams(db.Model):
to no imports within the CTFd application as importing from the
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
standings = get_team_standings(admin=admin)

View File

@@ -1,4 +1,4 @@
import inspect
import inspect # noqa: I001
import os
from alembic.config import Config

View File

@@ -52,7 +52,7 @@ def init_template_filters(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.config import Configs
from CTFd.constants.plugins import Plugins

View File

@@ -1,4 +1,4 @@
import datetime
import datetime # noqa: I001
import re
from flask import abort

View File

@@ -1,4 +1,4 @@
import os
import os # noqa: I001
from flask import Blueprint, abort
from flask import current_app as app

View File

@@ -1,5 +1,5 @@
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
black --check --diff --exclude=CTFd/uploads --exclude=node_modules .
prettier --check 'CTFd/themes/**/assets/**/*'

View File

@@ -3,7 +3,7 @@ pip-tools==5.4.0
pytest==5.4.2
pytest-randomly==3.4.0
coverage==5.1
flake8==3.8.2
ruff==0.0.260
psycopg2-binary==2.8.6
codecov==2.1.7
moto==1.3.16
@@ -14,10 +14,7 @@ pytest-cov==2.9.0
sphinx_rtd_theme==0.4.3
flask-debugtoolbar==0.11.0
isort==4.3.21
flake8-isort==3.0.0
Faker==4.1.0
pipdeptree==2.2.0
black==19.10b0
pytest-sugar==0.9.4
flake8-comprehensions==3.3.1
flake8-bugbear==20.11.1

View File

@@ -1,4 +1,4 @@
from __future__ import with_statement
from __future__ import with_statement # noqa: I001
import logging
from logging.config import fileConfig

View File

@@ -5,7 +5,7 @@ Revises: 1093835a1051
Create Date: 2020-08-14 00:46:54.161120
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -5,7 +5,7 @@ Revises: 75e8ab9a0014
Create Date: 2021-06-15 19:57:37.410152
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -5,7 +5,7 @@ Revises: 4d3c1b59d011
Create Date: 2022-11-01 23:27:44.620893
"""
from alembic import op
from alembic import op # noqa: I001
from sqlalchemy.dialects import mysql

View File

@@ -5,7 +5,7 @@ Revises: 6012fe8de495
Create Date: 2022-04-07 03:53:27.554190
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -5,7 +5,7 @@ Revises: ef87d69ec29a
Create Date: 2021-07-30 03:50:54.219124
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -5,7 +5,7 @@ Revises: 0366ba6575ca
Create Date: 2020-08-19 00:36:17.579497
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -5,7 +5,7 @@ Revises: 080d29b15cd3
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 CTFd.models import db

View File

@@ -5,7 +5,7 @@ Revises: 07dfbe5e1edc
Create Date: 2021-07-29 23:22:39.345426
"""
from alembic import op
from alembic import op # noqa: I001
import sqlalchemy as sa

View File

@@ -60,7 +60,7 @@ def test_deleting_challenge_clears_cache_solves():
data = req.get_json()["data"]
challenge = data[0]
assert challenge["solves"] == 1
from CTFd.utils.challenges import (
from CTFd.utils.challenges import ( # noqa: I001
get_solves_for_challenge_id,
get_solve_counts_for_challenges,
)
@@ -100,7 +100,7 @@ def test_deleting_solve_clears_cache():
data = req.get_json()["data"]
challenge = data[0]
assert challenge["solves"] == 1
from CTFd.utils.challenges import (
from CTFd.utils.challenges import ( # noqa: I001
get_solves_for_challenge_id,
get_solve_counts_for_challenges,
)

View File

@@ -24,7 +24,7 @@ def test_RawEnum():
def test_JSEnum():
from CTFd.constants import JS_ENUMS
from CTFd.constants import JS_ENUMS # noqa: I001
import json
@JSEnum