Skip to content

Commit 930d3d7

Browse files
authored
Switch to ruff for linting (#488)
* Switch Python linting to ruff * Lint * Add missing migration (from dropping `null=True` from TextField) * Bring isort config closer * Re-format
1 parent 4d670ce commit 930d3d7

File tree

87 files changed

+254
-385
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+254
-385
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
with:
3434
path: ${{ env.HOME }}/.cache/pre-commit
3535
key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
36-
- uses: pre-commit/[email protected].0
36+
- uses: pre-commit/[email protected].1
3737
test_js:
3838
runs-on: ubuntu-latest
3939
needs: lint

.pre-commit-config.yaml

+5-20
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,12 @@ default_language_version:
22
node: 22.11.0
33
python: python3.13
44
repos:
5-
- repo: https://github.com/psf/black
6-
rev: 24.10.0
5+
- repo: https://github.com/astral-sh/ruff-pre-commit
6+
rev: 'v0.8.3' # keep in sync with pyproject.toml
77
hooks:
8-
- id: black
9-
language_version: python3
10-
args: ['--target-version', 'py311']
11-
- repo: https://github.com/pycqa/isort
12-
# isort config is in setup.cfg
13-
rev: 5.13.2
14-
hooks:
15-
- id: isort
16-
name: isort (python)
17-
- repo: https://github.com/pycqa/flake8
18-
# flake8 config is in setup.cfg
19-
rev: 7.1.1
20-
hooks:
21-
- id: flake8
22-
additional_dependencies:
23-
- flake8-assertive==2.1.0
24-
- flake8-blind-except==0.2.1
25-
- flake8-comprehensions==3.15.0
8+
- id: ruff
9+
args: [--fix, --exit-non-zero-on-fix]
10+
- id: ruff-format
2611
- repo: https://github.com/pycontribs/mirrors-prettier
2712
rev: v3.3.2
2813
hooks:

fabfile.py

+11-32
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import datetime
22
import os
3-
import subprocess
43
from shlex import quote
4+
import subprocess
55

66
from invoke import run as local
77
from invoke.tasks import task
88

9+
910
# Process .env file
1011
if os.path.exists(".env"):
1112
with open(".env") as f:
@@ -59,15 +60,11 @@ def psql(c, command=None):
5960
@task
6061
def delete_docker_database(c, local_database_name=LOCAL_DATABASE_NAME):
6162
dexec(
62-
"dropdb --if-exists --host db --username={project_name} {database_name}".format(
63-
project_name=PROJECT_NAME, database_name=LOCAL_DATABASE_NAME
64-
),
63+
f"dropdb --if-exists --host db --username={PROJECT_NAME} {LOCAL_DATABASE_NAME}",
6564
"db",
6665
)
6766
dexec(
68-
"createdb --host db --username={project_name} {database_name}".format(
69-
project_name=PROJECT_NAME, database_name=LOCAL_DATABASE_NAME
70-
),
67+
f"createdb --host db --username={PROJECT_NAME} {LOCAL_DATABASE_NAME}",
7168
"db",
7269
)
7370
# Create extension schema, for error-free restores from Heroku backups
@@ -91,12 +88,8 @@ def import_data(
9188
delete_docker_database(c)
9289
# Import the database file to the db container
9390
dexec(
94-
"pg_restore --clean --no-acl --if-exists --no-owner --host db \
95-
--username={project_name} -d {database_name} {database_filename}".format(
96-
project_name=PROJECT_NAME,
97-
database_name=LOCAL_DATABASE_NAME,
98-
database_filename=database_filename,
99-
),
91+
f"pg_restore --clean --no-acl --if-exists --no-owner --host db \
92+
--username={PROJECT_NAME} -d {LOCAL_DATABASE_NAME} {database_filename}",
10093
service="db",
10194
)
10295

@@ -198,9 +191,7 @@ def delete_local_database(c, local_database_name=LOCAL_DATABASE_NAME):
198191

199192
def aws(c, command, aws_access_key_id, aws_secret_access_key):
200193
return local(
201-
"aws {command}".format(
202-
command=command,
203-
),
194+
f"aws {command}",
204195
env={
205196
"AWS_ACCESS_KEY_ID": aws_access_key_id,
206197
"AWS_SECRET_ACCESS_KEY": aws_secret_access_key,
@@ -215,10 +206,7 @@ def pull_media_from_s3(
215206
aws_storage_bucket_name,
216207
local_media_dir=LOCAL_MEDIA_DIR,
217208
):
218-
aws_cmd = "s3 sync --delete s3://{bucket_name} {local_media}".format(
219-
bucket_name=aws_storage_bucket_name,
220-
local_media=local_media_dir,
221-
)
209+
aws_cmd = f"s3 sync --delete s3://{aws_storage_bucket_name} {local_media_dir}"
222210
aws(c, aws_cmd, aws_access_key_id, aws_secret_access_key)
223211

224212

@@ -242,11 +230,7 @@ def pull_images_from_s3(
242230
aws_storage_bucket_name,
243231
local_images_dir=LOCAL_IMAGES_DIR,
244232
):
245-
aws_cmd = (
246-
"s3 sync --delete s3://{bucket_name}/original_images {local_media}".format(
247-
bucket_name=aws_storage_bucket_name, local_media=local_images_dir
248-
)
249-
)
233+
aws_cmd = f"s3 sync --delete s3://{aws_storage_bucket_name}/original_images {local_images_dir}"
250234
aws(c, aws_cmd, aws_access_key_id, aws_secret_access_key)
251235
# The above command just syncs the original images, so we need to drop the wagtailimages_renditions
252236
# table so that the renditions will be re-created when requested on the local build.
@@ -275,18 +259,13 @@ def pull_database_from_heroku(c, app_instance):
275259
datestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
276260

277261
local(
278-
"heroku pg:backups:download --output={dump_folder}/{datestamp}.dump --app {app}".format(
279-
app=app_instance, dump_folder=LOCAL_DUMP_DIR, datestamp=datestamp
280-
),
262+
f"heroku pg:backups:download --output={LOCAL_DUMP_DIR}/{datestamp}.dump --app {app_instance}",
281263
)
282264

283265
import_data(c, f"/app/{LOCAL_DUMP_DIR}/{datestamp}.dump")
284266

285267
local(
286-
"rm {dump_folder}/{datestamp}.dump".format(
287-
dump_folder=LOCAL_DUMP_DIR,
288-
datestamp=datestamp,
289-
),
268+
f"rm {LOCAL_DUMP_DIR}/{datestamp}.dump",
290269
)
291270

292271

manage.py

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import sys
44

5+
56
if __name__ == "__main__":
67
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wagtailio.settings")
78

0 commit comments

Comments
 (0)