diff --git a/campaigns/views.py b/campaigns/views.py index cbaedaa..3f297cf 100644 --- a/campaigns/views.py +++ b/campaigns/views.py @@ -57,7 +57,7 @@ class CampaignDetailView(generic.DetailView): return self.request.tenant def get_context_data(self, **kwargs): - context = super(CampaignDetailView, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) players = self.object.user_set.exclude(pk__in=[1, 2]) context["players"] = {} diff --git a/characters/forms.py b/characters/forms.py index 1f5ff66..2591884 100644 --- a/characters/forms.py +++ b/characters/forms.py @@ -12,7 +12,7 @@ class CharacterForm(ModelForm): "archived", "color", "token_image", "large_image"] def __init__(self, *args, **kwargs): - super(CharacterForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.fields['player'].queryset = TenantUser.objects \ .filter(tenants=connection.get_tenant()) \ .exclude(pk__in=[1, 2]) diff --git a/common/management/commands/delete_unused_files.py b/common/management/commands/delete_unused_files.py index 40a487e..0d39cff 100644 --- a/common/management/commands/delete_unused_files.py +++ b/common/management/commands/delete_unused_files.py @@ -6,7 +6,6 @@ by Andrey Kolpakov but using pathlib and considering django-tenants """ from pathlib import Path -from typing import Set from django.apps import apps from django.core.management import BaseCommand @@ -33,7 +32,7 @@ def get_file_fields(): return fields -def get_used_media() -> Set[Path]: +def get_used_media() -> set[Path]: media = set() for field in get_file_fields(): is_null = { @@ -54,7 +53,7 @@ def get_used_media() -> Set[Path]: return media -def get_all_media(schema: str) -> Set[Path]: +def get_all_media(schema: str) -> set[Path]: media = set() schema_media_root = media_root / schema cache_dir = schema_media_root / "cache" diff --git a/common/management/commands/listcampaigns.py b/common/management/commands/listcampaigns.py index 665367b..f7c57b4 100644 --- a/common/management/commands/listcampaigns.py +++ b/common/management/commands/listcampaigns.py @@ -8,7 +8,7 @@ class Command(BaseCommand): help = 'List all campaigns registered on instance' def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def handle(self, *args, **options): campaigns = Campaign.objects.all() diff --git a/common/management/commands/listusers.py b/common/management/commands/listusers.py index cf206c6..5ce1ea1 100644 --- a/common/management/commands/listusers.py +++ b/common/management/commands/listusers.py @@ -7,7 +7,7 @@ class Command(BaseCommand): help = 'List all users registered on instance' def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def handle(self, *args, **options): users = TenantUser.objects.all() diff --git a/common/management/commands/refresh_html.py b/common/management/commands/refresh_html.py index b27a6b1..66a9751 100644 --- a/common/management/commands/refresh_html.py +++ b/common/management/commands/refresh_html.py @@ -21,7 +21,7 @@ class Command(BaseCommand): parser.add_argument('--store', action='store_true') def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def handle(self, *args, **options): store = options["store"] diff --git a/common/management/commands/setup_tenants.py b/common/management/commands/setup_tenants.py index 2f26486..d4d98e0 100644 --- a/common/management/commands/setup_tenants.py +++ b/common/management/commands/setup_tenants.py @@ -11,7 +11,7 @@ class Command(BaseCommand): help = 'sets up DTU' def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def handle(self, *args, **options): create_public_tenant("test.localhost", "rpgnotes_admin@lw1.at") diff --git a/common/management/commands/usermanagement.py b/common/management/commands/usermanagement.py index c009fb8..a7e56dc 100644 --- a/common/management/commands/usermanagement.py +++ b/common/management/commands/usermanagement.py @@ -8,7 +8,7 @@ class Command(BaseCommand): help = 'adds and removes users to/from campaigns' def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def add_arguments(self, parser: CommandParser): parser.add_argument("campaign_slug", type=str) diff --git a/common/models/descriptionmodel.py b/common/models/descriptionmodel.py index 56933a6..7ce69f6 100644 --- a/common/models/descriptionmodel.py +++ b/common/models/descriptionmodel.py @@ -16,4 +16,4 @@ class DescriptionModel(models.Model): self.description_html, linked_objects = md_to_html(self.description_md) self.linked_objects = ",".join(linked_objects) - super(DescriptionModel, self).save(*args, **kwargs) + super().save(*args, **kwargs) diff --git a/common/models/nameslugmodel.py b/common/models/nameslugmodel.py index 2fb9416..61a63c4 100644 --- a/common/models/nameslugmodel.py +++ b/common/models/nameslugmodel.py @@ -16,7 +16,7 @@ class NameSlugModel(models.Model): # Newly created object, so set slug self.slug = slugify(self.name) - super(NameSlugModel, self).save(*args, **kwargs) + super().save(*args, **kwargs) def __str__(self): return self.name diff --git a/common/templatetags/thumbnails.py b/common/templatetags/thumbnails.py index 581db01..18df994 100644 --- a/common/templatetags/thumbnails.py +++ b/common/templatetags/thumbnails.py @@ -18,6 +18,6 @@ def srcset(filename): """ lines = [filename] for res in settings.THUMBNAIL_ALTERNATIVE_RESOLUTIONS: - res_string = "{}x".format(res) - lines.append("{} {}".format(resolution(filename, res_string), res_string)) + res_string = f"{res}x" + lines.append(f"{resolution(filename, res_string)} {res_string}") return ', '.join(lines) diff --git a/common/templatetags/vite.py b/common/templatetags/vite.py index 48844ab..5f21dc1 100644 --- a/common/templatetags/vite.py +++ b/common/templatetags/vite.py @@ -1,7 +1,8 @@ import json +from collections.abc import Generator from functools import lru_cache from pathlib import Path -from typing import TypedDict, Dict, List, Optional, Generator +from typing import TypedDict from django.templatetags.static import static from django_jinja import library @@ -13,21 +14,21 @@ class Asset(TypedDict): file: str srf: str isEntry: bool - imports: Optional[List[str]] - isDynamicEntry: Optional[bool] + imports: list[str] | None + isDynamicEntry: bool | None -Manifest = Dict[str, Asset] +Manifest = dict[str, Asset] -@lru_cache() +@lru_cache def load_vite_manifest() -> Manifest: with (Path(STATIC_ROOT) / "build" / "manifest.json").open() as f: return json.load(f) @library.global_function -@lru_cache() +@lru_cache def js_asset(entry_point: str) -> Asset: manifest = load_vite_manifest() try: @@ -37,7 +38,7 @@ def js_asset(entry_point: str) -> Asset: @library.global_function -@lru_cache() +@lru_cache def js_asset_url(entry_point: str) -> str: asset = js_asset(entry_point) diff --git a/search/views.py b/search/views.py index 780844c..c8fd521 100644 --- a/search/views.py +++ b/search/views.py @@ -24,7 +24,7 @@ class SearchResultsView(TemplateView): if "q" not in self.request.GET: return "" query_string = self.request.GET['q'] - context = super(SearchResultsView, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) campaign: Campaign = self.request.tenant config = campaign.language name_vector = SearchVector('name', weight="A", config=config) diff --git a/utils/colors.py b/utils/colors.py index 345b9b3..b14a90b 100644 --- a/utils/colors.py +++ b/utils/colors.py @@ -2,7 +2,6 @@ colors from https://stackoverflow.com/a/33295456/4398037 """ import random -from typing import Tuple color_string = """#B88183 #922329 @@ -284,12 +283,12 @@ def gamma_correction(value: float) -> float: return ((value + 0.055) / 1.055) ** 2.4 -def get_luminance(rgb: Tuple[int, ...]) -> float: +def get_luminance(rgb: tuple[int, ...]) -> float: r, g, b = list(map(gamma_correction, rgb)) return 0.2126 * r + 0.7152 * g + 0.0722 * b -def get_percieved_lightness(rgb: Tuple[int, ...]) -> float: +def get_percieved_lightness(rgb: tuple[int, ...]) -> float: Y = get_luminance(rgb) if Y <= (216 / 24389): return Y * (24389 / 27) diff --git a/utils/markdown.py b/utils/markdown.py index 5046960..504c25e 100644 --- a/utils/markdown.py +++ b/utils/markdown.py @@ -9,7 +9,7 @@ from bleach_allowlist import markdown_tags, markdown_attrs custom_allowed_tags = ["del", "ins"] -def md_to_html(md: str, replacements=None) -> Tuple[str, Set[str]]: +def md_to_html(md: str, replacements=None) -> tuple[str, set[str]]: md, linked_objects = autolink(md, replacements=replacements) html = markdown.markdown( md, @@ -26,7 +26,7 @@ def md_to_html(md: str, replacements=None) -> Tuple[str, Set[str]]: return html, linked_objects -def autolink(md: str, replacements=None) -> Tuple[str, Set[str]]: +def autolink(md: str, replacements=None) -> tuple[str, set[str]]: if replacements is None: from utils.urls import name2url replacements = name2url() diff --git a/utils/urls.py b/utils/urls.py index d64996f..52747df 100644 --- a/utils/urls.py +++ b/utils/urls.py @@ -7,7 +7,7 @@ from loot.models import Loot from notes.models import Note -def name2url() -> Dict[str, str]: +def name2url() -> dict[str, str]: data = {} objects = [] objects.extend(Character.objects.all())