typehint corputils

This commit is contained in:
Joel Falknau committed 2026-10-08 21:42:37 +10:00
1 parent b5fbd1cfc7
commit f602f80f06
6 files changed
+61 -28

No files matched your search

+11 -4
View File
@@ -1,3 +1,7 @@
__lazy_modules__ = ["django.http"]
from typing import TYPE_CHECKING
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
@@ -5,9 +9,12 @@ from allianceauth.corputils import urls
from allianceauth.menu.hooks import MenuItemHook
from allianceauth.services.hooks import UrlHook
if TYPE_CHECKING:
from django.http import HttpRequest
class CorpStats(MenuItemHook):
def __init__(self):
def __init__(self) -> None:
MenuItemHook.__init__(
self,
_('Corporation Stats'),
@@ -16,7 +23,7 @@ class CorpStats(MenuItemHook):
navactive=['corputils:']
)
def render(self, request):
def render(self, request: "HttpRequest") -> str:
if request.user.has_perm('corputils.view_corp_corpstats') or request.user.has_perm(
'corputils.view_alliance_corpstats') or request.user.has_perm(
'corputils.add_corpstats') or request.user.has_perm('corputils.view_state_corpstats'):
@@ -25,10 +32,10 @@ class CorpStats(MenuItemHook):
@hooks.register('menu_item_hook')
def register_menu():
def register_menu() -> CorpStats:
return CorpStats()
@hooks.register('url_hook')
def register_url():
def register_url() -> UrlHook:
return UrlHook(urls, 'corputils', r'^corpstats/')
+13 -5
View File
@@ -1,12 +1,20 @@
__lazy_modules__ = ["allianceauth.corputils.models", "django.contrib.auth.models"]
import logging
from typing import TYPE_CHECKING
from django.db import models
if TYPE_CHECKING:
from django.contrib.auth.models import User
from allianceauth.corputils.models import CorpStats # noqa: F401
logger = logging.getLogger(__name__)
class CorpStatsQuerySet(models.QuerySet):
def visible_to(self, user):
class CorpStatsQuerySet(models.QuerySet["CorpStats"]):
def visible_to(self, user: "User") -> "CorpStatsQuerySet":
# superusers get all visible
if user.is_superuser:
logger.debug(f'Returning all corpstats for superuser {user}.')
@@ -41,9 +49,9 @@ class CorpStatsQuerySet(models.QuerySet):
return self.none()
class CorpStatsManager(models.Manager):
def get_queryset(self):
class CorpStatsManager(models.Manager["CorpStats"]):
def get_queryset(self) -> CorpStatsQuerySet:
return CorpStatsQuerySet(self.model, using=self._db)
def visible_to(self, user):
def visible_to(self, user: "User") -> CorpStatsQuerySet:
return self.get_queryset().visible_to(user)
+11 -6
View File
@@ -1,5 +1,7 @@
__lazy_modules__ = ["django.contrib.auth.models"]
import logging
from typing import ClassVar
from typing import TYPE_CHECKING, ClassVar
from django.db import models
@@ -19,6 +21,9 @@ from .providers import (
post_universe_names,
)
if TYPE_CHECKING:
from django.contrib.auth.models import User
logger = logging.getLogger(__name__)
@@ -130,16 +135,16 @@ class CorpStats(models.Model):
def mains(self) -> models.QuerySet["CorpMember"]:
return self.members.filter(pk__in=[m.pk for m in self.members.all() if m.main_character and int(m.main_character.character_id) == int(m.character_id)])
def visible_to(self, user) -> bool:
def visible_to(self, user: "User") -> bool:
return CorpStats.objects.filter(pk=self.pk).visible_to(user).exists()
def can_update(self, user) -> bool:
def can_update(self, user: "User") -> bool:
return self.token.user == user or self.visible_to(user)
def corp_logo(self, size=128) -> str:
def corp_logo(self, size: int = 128) -> str:
return self.corp.logo_url(size)
def alliance_logo(self, size=128) -> str:
def alliance_logo(self, size: int = 128) -> str:
if self.corp.alliance:
return self.corp.alliance.logo_url(size)
else:
@@ -187,7 +192,7 @@ class CorpMember(models.Model):
def registered(self) -> bool:
return CharacterOwnership.objects.filter(character__character_id=self.character_id).exists()
def portrait_url(self, size=32) -> str:
def portrait_url(self, size: int = 32) -> str:
return EveCharacter.generic_portrait_url(self.character_id, size)
@property
+9 -5
View File
@@ -1,15 +1,19 @@
__lazy_modules__ = ["esi.models", "esi.stubs"]
from typing import TYPE_CHECKING
from esi.models import Token
from esi.openapi_clients import ESIClientProvider
from .. import __title__, __url__, __version__
from . import __esi_compatibility_date__
if TYPE_CHECKING:
from esi.models import Token
from esi.stubs import (
CharactersDetail, CorporationsCorporationIdMembersGet,
PostUniverseNamesOperation, PostUniverseNamesOperationBody,
CharactersDetail,
CorporationsCorporationIdMembersGet,
PostUniverseNamesOperation,
PostUniverseNamesOperationBody,
)
esi = ESIClientProvider(
@@ -24,11 +28,11 @@ esi = ESIClientProvider(
])
def get_characters_character_id(character_id: int, use_etag=True) -> "CharactersDetail":
def get_characters_character_id(character_id: int, use_etag: bool = True) -> "CharactersDetail":
return esi.client.Character.GetCharactersCharacterId(character_id=character_id).result(use_etag=use_etag)
def get_corporations_corporation_id_members(corporation_id: int, token: Token) -> "CorporationsCorporationIdMembersGet":
def get_corporations_corporation_id_members(corporation_id: int, token: "Token") -> "CorporationsCorporationIdMembersGet":
return esi.client.Corporation.GetCorporationsCorporationIdMembers(corporation_id=corporation_id, token=token).result()
+2 -2
View File
@@ -4,12 +4,12 @@ from allianceauth.corputils.models import CorpStats
@shared_task
def update_corpstats(pk):
def update_corpstats(pk: int) -> None:
cs = CorpStats.objects.get(pk=pk)
cs.update()
@shared_task
def update_all_corpstats():
def update_all_corpstats() -> None:
for cs in CorpStats.objects.all():
update_corpstats.delay(cs.pk)
+15 -6
View File
@@ -1,10 +1,13 @@
__lazy_modules__ = ["django.contrib.auth.models", "django.http", "esi.models"]
from typing import TYPE_CHECKING
from django.contrib import messages
from django.contrib.auth.decorators import (
login_required, permission_required, user_passes_test,
)
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.db import IntegrityError
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.translation import gettext_lazy as _
@@ -16,8 +19,14 @@ from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
from .models import CorpMember, CorpStats
from .providers import get_characters_character_id
if TYPE_CHECKING:
from django.contrib.auth.models import User
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
def access_corpstats_test(user):
from esi.models import Token
def access_corpstats_test(user: "User") -> bool:
return user.has_perm('corputils.view_corp_corpstats') or user.has_perm(
'corputils.view_alliance_corpstats') or user.has_perm('corputils.view_state_corpstats') or user.has_perm(
'corputils.add_corpstats')
@@ -27,7 +36,7 @@ def access_corpstats_test(user):
@user_passes_test(access_corpstats_test)
@permission_required('corputils.add_corpstats')
@token_required(scopes='esi-corporations.read_corporation_membership.v1')
def corpstats_add(request, token) -> HttpResponseRedirect:
def corpstats_add(request: "HttpRequest", token: "Token") -> "HttpResponseRedirect":
try:
if EveCharacter.objects.filter(character_id=token.character_id).exists():
corp_id = EveCharacter.objects.get(character_id=token.character_id).corporation_id
@@ -51,7 +60,7 @@ def corpstats_add(request, token) -> HttpResponseRedirect:
@login_required
@user_passes_test(access_corpstats_test)
def corpstats_view(request, corp_id=None):
def corpstats_view(request: "HttpRequest", corp_id: int | None = None) -> "HttpResponse":
corpstats = None
# get requested model
@@ -133,7 +142,7 @@ def corpstats_view(request, corp_id=None):
@login_required
@user_passes_test(access_corpstats_test)
def corpstats_update(request, corp_id):
def corpstats_update(request: "HttpRequest", corp_id: int) -> "HttpResponse":
corp = get_object_or_404(EveCorporationInfo, corporation_id=corp_id)
corpstats = get_object_or_404(CorpStats, corp=corp)
try:
@@ -148,7 +157,7 @@ def corpstats_update(request, corp_id):
@login_required
@user_passes_test(access_corpstats_test)
def corpstats_search(request):
def corpstats_search(request: "HttpRequest") -> "HttpResponse":
results = []
search_string = request.GET.get('search_string', None)
if search_string: