Fix warnings

This commit is contained in:
2024-06-11 00:25:04 +02:00
parent b0d2997b20
commit 67dc4639a0
6 changed files with 63 additions and 43 deletions

View File

@ -1,13 +1,6 @@
default_language_version:
python: python3.12
repos:
# Apply a consistent format to pyproject.toml files.
# https://pyproject-fmt.readthedocs.io/en/latest/
- repo: https://github.com/tox-dev/pyproject-fmt
rev: "1.5.3"
hooks:
- id: pyproject-fmt
# Automatically add trailing commas to calls and literals.
- repo: https://github.com/asottile/add-trailing-comma
rev: v3.1.0
@ -16,7 +9,7 @@ repos:
# Some out-of-the-box hooks for pre-commit.
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v4.6.0
hooks:
- id: check-ast
- id: check-builtin-literals
@ -36,21 +29,21 @@ repos:
# Automatically upgrade your Django project code
- repo: https://github.com/adamchainz/django-upgrade
rev: "1.15.0"
rev: "1.18.0"
hooks:
- id: django-upgrade
args: [--target-version, "5.0"]
# Run Pyupgrade on all Python files. This will upgrade the code to Python 3.12.
- repo: https://github.com/asottile/pyupgrade
rev: v3.15.0
rev: v3.16.0
hooks:
- id: pyupgrade
args: ["--py312-plus"]
# An extremely fast Python linter and formatter.
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.9
rev: v0.4.8
hooks:
- id: ruff-format
- id: ruff
@ -58,12 +51,6 @@ repos:
# Static checker for GitHub Actions workflow files.
- repo: https://github.com/rhysd/actionlint
rev: v1.6.26
rev: v1.7.1
hooks:
- id: actionlint
# Optimize .png files.
- repo: https://github.com/shssoichiro/oxipng
rev: v9.0.0
hooks:
- id: oxipng

View File

@ -44,10 +44,6 @@ TIME_ZONE = "Europe/Stockholm"
# If datetimes will be timezone-aware by default. If True, Django will use timezone-aware datetimes internally.
USE_TZ = True
# Don't use Django's translation system
# TODO: We should probably make the site available in other languages at some point
USE_I18N = False
# Decides which translation is served to all users.
LANGUAGE_CODE = "en-us"
@ -147,7 +143,6 @@ STATIC_URL = "static/"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# The absolute path to the directory where 'python manage.py collectstatic' will copy static files for deployment
# TODO: Should we store these on Cloudflare? Or at least in RAM to avoid disk I/O?
STATIC_ROOT: Path = BASE_DIR / "staticfiles"
STATICFILES_DIRS: list[Path] = [BASE_DIR / "static"]
@ -161,8 +156,6 @@ STORAGES: dict[str, dict[str, str]] = {
# Use Redis for caching
# TODO: Use a Unix socket instead of TCP/IP for Redis.
# TODO: Disallow specific commands. See https://redis.io/docs/management/security/#disallowing-specific-commands
REDIS_PASSWORD: str = os.getenv(key="REDIS_PASSWORD", default="")
REDIS_HOST: str = os.getenv(key="REDIS_HOST", default="")
REDIS_PORT: str = os.getenv(key="REDIS_PORT", default="6380")

View File

@ -1,19 +1,23 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
def main() -> None:
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")
try:
from django.core.management import execute_from_command_line
from django.core.management import execute_from_command_line # noqa: PLC0415
except ImportError as exc:
raise ImportError(
msg = (
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?",
"forget to activate a virtual environment?"
)
raise ImportError(
msg,
) from exc
execute_from_command_line(sys.argv)

View File

@ -8,10 +8,10 @@ readme = "README.md"
[tool.poetry.dependencies]
python = "^3.12"
django = "^5.0.6"
whitenoise = {extras = ["brotli"], version = "^6.6.0"}
sentry-sdk = {extras = ["django"], version = "^1.45.0"}
psycopg = {extras = ["binary"], version = "^3.1.19"}
redis = {extras = ["hiredis"], version = "^5.0.5"}
whitenoise = { extras = ["brotli"], version = "^6.6.0" }
sentry-sdk = { extras = ["django"], version = "^1.45.0" }
psycopg = { extras = ["binary"], version = "^3.1.19" }
redis = { extras = ["hiredis"], version = "^5.0.5" }
playwright = "^1.44.0"
selectolax = "^0.3.17"
django-simple-history = "^3.7.0"
@ -25,6 +25,41 @@ djlint = "^1.34.1"
[build-system]
build-backend = "poetry.core.masonry.api"
requires = [
"poetry-core",
requires = ["poetry-core"]
[tool.ruff]
# https://docs.astral.sh/ruff/settings/
target-version = "py312"
fix = true
unsafe-fixes = true
preview = true
lint.select = ["ALL"]
line-length = 119
lint.pydocstyle.convention = "google"
lint.ignore = [
"CPY001", # Missing copyright notice at top of file
"D100", # Checks for undocumented public module definitions.
"D101", # Checks for undocumented public class definitions.
"D102", # Checks for undocumented public method definitions.
"D104", # Missing docstring in public package.
"D105", # Missing docstring in magic method.
"D106", # Checks for undocumented public class definitions, for nested classes.
"ERA001", # Found commented-out code
"FIX002", # Line contains TODO
"COM812", # Checks for the absence of trailing commas.
"ISC001", # Checks for implicitly concatenated strings on a single line.
"DJ001", # Checks nullable string-based fields (like CharField and TextField) in Django models.
]
[tool.ruff.lint.per-file-ignores]
"**/tests/**" = [
"ARG", # Unused function args -> fixtures nevertheless are functionally relevant...
"FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize()
"PLR2004", # Magic value used in comparison, ...
"S101", # asserts allowed in tests...
"S311", # Standard pseudo-random generators are not suitable for cryptographic purposes
]
"**/migrations/**" = [
"RUF012", # Checks for mutable default values in class attributes.
]

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class TwitchDropNotifierConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "twitch_drop_notifier"
default_auto_field: str = "django.db.models.BigAutoField"
name: str = "twitch_drop_notifier"

View File

@ -1,3 +1,5 @@
from typing import ClassVar
from django.db import models
from simple_history.models import HistoricalRecords
@ -22,7 +24,7 @@ class Owner(models.Model):
)
class Meta:
ordering: list[str] = ["name"]
ordering: ClassVar[list[str]] = ["name"]
verbose_name: str = "Owner"
db_table: str = "owner"
db_table_comment: str = "An owner."
@ -32,7 +34,6 @@ class Owner(models.Model):
class Game(models.Model):
# TODO: Maybe int?
game_id = models.TextField(
help_text="The ID of the game.",
verbose_name="Game ID",
@ -54,7 +55,7 @@ class Game(models.Model):
)
class Meta:
ordering: list[str] = ["display_name"]
ordering: ClassVar[list[str]] = ["display_name"]
verbose_name: str = "Game"
db_table: str = "game"
db_table_comment: str = "A game."
@ -107,7 +108,7 @@ class Reward(models.Model):
)
class Meta:
ordering: list[str] = ["name"]
ordering: ClassVar[list[str]] = ["name"]
verbose_name: str = "Reward"
db_table: str = "reward"
db_table_comment: str = "A reward."
@ -131,7 +132,7 @@ class TwitchChannel(models.Model):
)
class Meta:
ordering: list[str] = ["name"]
ordering: ClassVar[list[str]] = ["name"]
verbose_name: str = "Twitch Channel"
db_table: str = "twitch_channel"
db_table_comment: str = "A Twitch channel."
@ -228,7 +229,7 @@ class TwitchDrop(models.Model):
)
class Meta:
ordering: list[str] = ["name"]
ordering: ClassVar[list[str]] = ["name"]
verbose_name: str = "Twitch Drop"
db_table: str = "twitch_drop"
db_table_comment: str = "A Twitch Drop."