mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
pre-commit fixes
This commit is contained in:
parent
dc0c1a2818
commit
5e836c4285
@ -70,7 +70,7 @@ def forward(apps, schema_editor):
|
|||||||
perm.delete()
|
perm.delete()
|
||||||
|
|
||||||
|
|
||||||
def reverse(apps, schema_editor):
|
def reverse(apps, schema_editor): # noqa: C901
|
||||||
perm_dict = user_permissions_dict(apps)
|
perm_dict = user_permissions_dict(apps)
|
||||||
|
|
||||||
corp_users = users_with_permission(apps, perm_dict['corpstats']['view_corp_corpstats'])
|
corp_users = users_with_permission(apps, perm_dict['corpstats']['view_corp_corpstats'])
|
||||||
|
@ -62,7 +62,7 @@ def corpstats_add(request, token):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(access_corpstats_test)
|
@user_passes_test(access_corpstats_test)
|
||||||
def corpstats_view(request, corp_id=None):
|
def corpstats_view(request, corp_id=None): # noqa: C901
|
||||||
corpstats = None
|
corpstats = None
|
||||||
|
|
||||||
# get requested model
|
# get requested model
|
||||||
|
@ -49,8 +49,8 @@ class EveFactionForm(EveEntityForm):
|
|||||||
def clean_id(self):
|
def clean_id(self):
|
||||||
try:
|
try:
|
||||||
assert self.Meta.model.provider.get_faction(self.cleaned_data['id'])
|
assert self.Meta.model.provider.get_faction(self.cleaned_data['id'])
|
||||||
except (AssertionError, ObjectNotFound):
|
except (AssertionError, ObjectNotFound) as e:
|
||||||
raise EveEntityNotFoundError('faction', self.cleaned_data['id'])
|
raise EveEntityNotFoundError('faction', self.cleaned_data['id']) from e
|
||||||
if self.Meta.model.objects.filter(faction_id=self.cleaned_data['id']).exists():
|
if self.Meta.model.objects.filter(faction_id=self.cleaned_data['id']).exists():
|
||||||
raise EveEntityExistsError('faction', self.cleaned_data['id'])
|
raise EveEntityExistsError('faction', self.cleaned_data['id'])
|
||||||
return self.cleaned_data['id']
|
return self.cleaned_data['id']
|
||||||
@ -70,8 +70,8 @@ class EveCharacterForm(EveEntityForm):
|
|||||||
def clean_id(self):
|
def clean_id(self):
|
||||||
try:
|
try:
|
||||||
assert self.Meta.model.provider.get_character(self.cleaned_data['id'])
|
assert self.Meta.model.provider.get_character(self.cleaned_data['id'])
|
||||||
except (AssertionError, ObjectNotFound):
|
except (AssertionError, ObjectNotFound) as e:
|
||||||
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id']) from e
|
||||||
if self.Meta.model.objects.filter(character_id=self.cleaned_data['id']).exists():
|
if self.Meta.model.objects.filter(character_id=self.cleaned_data['id']).exists():
|
||||||
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
||||||
return self.cleaned_data['id']
|
return self.cleaned_data['id']
|
||||||
@ -90,8 +90,8 @@ class EveCorporationForm(EveEntityForm):
|
|||||||
def clean_id(self):
|
def clean_id(self):
|
||||||
try:
|
try:
|
||||||
assert self.Meta.model.provider.get_corporation(self.cleaned_data['id'])
|
assert self.Meta.model.provider.get_corporation(self.cleaned_data['id'])
|
||||||
except (AssertionError, ObjectNotFound):
|
except (AssertionError, ObjectNotFound) as e:
|
||||||
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id']) from e
|
||||||
if self.Meta.model.objects.filter(corporation_id=self.cleaned_data['id']).exists():
|
if self.Meta.model.objects.filter(corporation_id=self.cleaned_data['id']).exists():
|
||||||
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
||||||
return self.cleaned_data['id']
|
return self.cleaned_data['id']
|
||||||
@ -110,8 +110,8 @@ class EveAllianceForm(EveEntityForm):
|
|||||||
def clean_id(self):
|
def clean_id(self):
|
||||||
try:
|
try:
|
||||||
assert self.Meta.model.provider.get_alliance(self.cleaned_data['id'])
|
assert self.Meta.model.provider.get_alliance(self.cleaned_data['id'])
|
||||||
except (AssertionError, ObjectNotFound):
|
except (AssertionError, ObjectNotFound) as e:
|
||||||
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityNotFoundError(self.entity_type_name, self.cleaned_data['id']) from e
|
||||||
if self.Meta.model.objects.filter(alliance_id=self.cleaned_data['id']).exists():
|
if self.Meta.model.objects.filter(alliance_id=self.cleaned_data['id']).exists():
|
||||||
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
raise EveEntityExistsError(self.entity_type_name, self.cleaned_data['id'])
|
||||||
return self.cleaned_data['id']
|
return self.cleaned_data['id']
|
||||||
|
@ -223,8 +223,8 @@ class EveSwaggerProvider(EveProvider):
|
|||||||
faction_id=data['faction_id'] if 'faction_id' in data else None,
|
faction_id=data['faction_id'] if 'faction_id' in data else None,
|
||||||
)
|
)
|
||||||
return model
|
return model
|
||||||
except HTTPNotFound:
|
except HTTPNotFound as e:
|
||||||
raise ObjectNotFound(alliance_id, 'alliance')
|
raise ObjectNotFound(alliance_id, 'alliance') from e
|
||||||
|
|
||||||
def get_corp(self, corp_id: int) -> Corporation:
|
def get_corp(self, corp_id: int) -> Corporation:
|
||||||
"""Fetch corporation from ESI."""
|
"""Fetch corporation from ESI."""
|
||||||
@ -240,8 +240,8 @@ class EveSwaggerProvider(EveProvider):
|
|||||||
faction_id=data['faction_id'] if 'faction_id' in data else None,
|
faction_id=data['faction_id'] if 'faction_id' in data else None,
|
||||||
)
|
)
|
||||||
return model
|
return model
|
||||||
except HTTPNotFound:
|
except HTTPNotFound as e:
|
||||||
raise ObjectNotFound(corp_id, 'corporation')
|
raise ObjectNotFound(corp_id, 'corporation') from e
|
||||||
|
|
||||||
def get_character(self, character_id: int) -> Character:
|
def get_character(self, character_id: int) -> Character:
|
||||||
"""Fetch character from ESI."""
|
"""Fetch character from ESI."""
|
||||||
@ -256,8 +256,8 @@ class EveSwaggerProvider(EveProvider):
|
|||||||
faction_id=affiliation['faction_id'] if 'faction_id' in affiliation else None,
|
faction_id=affiliation['faction_id'] if 'faction_id' in affiliation else None,
|
||||||
)
|
)
|
||||||
return model
|
return model
|
||||||
except (HTTPNotFound, HTTPUnprocessableEntity, ObjectNotFound):
|
except (HTTPNotFound, HTTPUnprocessableEntity, ObjectNotFound) as e:
|
||||||
raise ObjectNotFound(character_id, 'character')
|
raise ObjectNotFound(character_id, 'character') from e
|
||||||
|
|
||||||
def _fetch_character_name(self, character_id: int) -> str:
|
def _fetch_character_name(self, character_id: int) -> str:
|
||||||
"""Fetch character name from ESI."""
|
"""Fetch character name from ESI."""
|
||||||
@ -288,16 +288,16 @@ class EveSwaggerProvider(EveProvider):
|
|||||||
return Entity(id=f['faction_id'], name=f['name'])
|
return Entity(id=f['faction_id'], name=f['name'])
|
||||||
else:
|
else:
|
||||||
raise KeyError()
|
raise KeyError()
|
||||||
except (HTTPNotFound, HTTPUnprocessableEntity, KeyError):
|
except (HTTPNotFound, HTTPUnprocessableEntity, KeyError) as e:
|
||||||
raise ObjectNotFound(faction_id, 'faction')
|
raise ObjectNotFound(faction_id, 'faction') from e
|
||||||
|
|
||||||
def get_itemtype(self, type_id: int) -> ItemType:
|
def get_itemtype(self, type_id: int) -> ItemType:
|
||||||
"""Fetch inventory item from ESI."""
|
"""Fetch inventory item from ESI."""
|
||||||
try:
|
try:
|
||||||
data = self.client.Universe.get_universe_types_type_id(type_id=type_id).result()
|
data = self.client.Universe.get_universe_types_type_id(type_id=type_id).result()
|
||||||
return ItemType(id=type_id, name=data['name'])
|
return ItemType(id=type_id, name=data['name'])
|
||||||
except (HTTPNotFound, HTTPUnprocessableEntity):
|
except (HTTPNotFound, HTTPUnprocessableEntity) as e:
|
||||||
raise ObjectNotFound(type_id, 'type')
|
raise ObjectNotFound(type_id, 'type') from e
|
||||||
|
|
||||||
|
|
||||||
provider = EveSwaggerProvider()
|
provider = EveSwaggerProvider()
|
||||||
|
@ -57,11 +57,11 @@ class EsiClientStub:
|
|||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
return BravadoOperationStub(data[int(alliance_id)])
|
return BravadoOperationStub(data[int(alliance_id)])
|
||||||
except KeyError:
|
except KeyError as e:
|
||||||
response = BravadoResponseStub(
|
response = BravadoResponseStub(
|
||||||
404, f"Alliance with ID {alliance_id} not found"
|
404, f"Alliance with ID {alliance_id} not found"
|
||||||
)
|
)
|
||||||
raise HTTPNotFound(response)
|
raise HTTPNotFound(response) from e
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_alliances_alliance_id_corporations(alliance_id):
|
def get_alliances_alliance_id_corporations(alliance_id):
|
||||||
@ -87,11 +87,11 @@ class EsiClientStub:
|
|||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
return BravadoOperationStub(data[int(character_id)])
|
return BravadoOperationStub(data[int(character_id)])
|
||||||
except KeyError:
|
except KeyError as e:
|
||||||
response = BravadoResponseStub(
|
response = BravadoResponseStub(
|
||||||
404, f"Character with ID {character_id} not found"
|
404, f"Character with ID {character_id} not found"
|
||||||
)
|
)
|
||||||
raise HTTPNotFound(response)
|
raise HTTPNotFound(response) from e
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def post_characters_affiliation(characters: list):
|
def post_characters_affiliation(characters: list):
|
||||||
@ -147,11 +147,11 @@ class EsiClientStub:
|
|||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
return BravadoOperationStub(data[int(corporation_id)])
|
return BravadoOperationStub(data[int(corporation_id)])
|
||||||
except KeyError:
|
except KeyError as e:
|
||||||
response = BravadoResponseStub(
|
response = BravadoResponseStub(
|
||||||
404, f"Corporation with ID {corporation_id} not found"
|
404, f"Corporation with ID {corporation_id} not found"
|
||||||
)
|
)
|
||||||
raise HTTPNotFound(response)
|
raise HTTPNotFound(response) from e
|
||||||
|
|
||||||
class Universe:
|
class Universe:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -143,7 +143,12 @@ def fatlink_statistics_corp_view(request, corpid, year=None, month=None):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.fleetactivitytracking_statistics')
|
@permission_required('auth.fleetactivitytracking_statistics')
|
||||||
def fatlink_statistics_view(request, year=datetime.date.today().year, month=datetime.date.today().month):
|
def fatlink_statistics_view(request, year=None, month=None):
|
||||||
|
if year is None:
|
||||||
|
year = datetime.date.today().year
|
||||||
|
if month is None:
|
||||||
|
month = datetime.date.today().month
|
||||||
|
|
||||||
year = int(year)
|
year = int(year)
|
||||||
month = int(month)
|
month = int(month)
|
||||||
start_of_month = datetime.datetime(year, month, 1)
|
start_of_month = datetime.datetime(year, month, 1)
|
||||||
@ -176,9 +181,12 @@ def fatlink_statistics_view(request, year=datetime.date.today().year, month=date
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def fatlink_personal_statistics_view(request, year=datetime.date.today().year):
|
def fatlink_personal_statistics_view(request, year=None):
|
||||||
|
if year is None:
|
||||||
|
year = datetime.date.today().year
|
||||||
|
|
||||||
year = int(year)
|
year = int(year)
|
||||||
logger.debug("Personal statistics view for year %i called by %s" % (year, request.user))
|
logger.debug(f"Personal statistics view for year {year} called by {request.user}")
|
||||||
|
|
||||||
user = request.user
|
user = request.user
|
||||||
logger.debug(f"fatlink_personal_statistics_view called by user {request.user}")
|
logger.debug(f"fatlink_personal_statistics_view called by user {request.user}")
|
||||||
|
@ -87,8 +87,8 @@ def group_membership_audit(request, group_id):
|
|||||||
logger.warning(f"User {request.user} attempted to view the membership of group {group_id} but permission was denied")
|
logger.warning(f"User {request.user} attempted to view the membership of group {group_id} but permission was denied")
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist as e:
|
||||||
raise Http404("Group does not exist")
|
raise Http404("Group does not exist") from e
|
||||||
render_items = {'group': group}
|
render_items = {'group': group}
|
||||||
entries = RequestLog.objects.filter(group=group).order_by('-date')
|
entries = RequestLog.objects.filter(group=group).order_by('-date')
|
||||||
render_items['entries'] = entries
|
render_items['entries'] = entries
|
||||||
@ -117,8 +117,8 @@ def group_membership_list(request, group_id):
|
|||||||
)
|
)
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist as e:
|
||||||
raise Http404("Group does not exist")
|
raise Http404("Group does not exist") from e
|
||||||
|
|
||||||
group_leaders = group.authgroup.group_leaders.all()
|
group_leaders = group.authgroup.group_leaders.all()
|
||||||
members = []
|
members = []
|
||||||
|
@ -111,8 +111,8 @@ def hr_application_view(request, app_id):
|
|||||||
logger.debug(f"hr_application_view called by user {request.user} for app id {app_id}")
|
logger.debug(f"hr_application_view called by user {request.user} for app id {app_id}")
|
||||||
try:
|
try:
|
||||||
app = Application.objects.prefetch_related('responses', 'comments', 'comments__user').get(pk=app_id)
|
app = Application.objects.prefetch_related('responses', 'comments', 'comments__user').get(pk=app_id)
|
||||||
except Application.DoesNotExist:
|
except Application.DoesNotExist as e:
|
||||||
raise Http404
|
raise Http404 from e
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if request.user.has_perm('hrapplications.add_applicationcomment'):
|
if request.user.has_perm('hrapplications.add_applicationcomment'):
|
||||||
form = HRApplicationCommentForm(request.POST)
|
form = HRApplicationCommentForm(request.POST)
|
||||||
|
@ -47,7 +47,7 @@ class MenuItem(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# app related properties
|
# app related properties
|
||||||
hook_hash = models.CharField(
|
hook_hash = models.CharField( # noqa: DJ001
|
||||||
max_length=64,
|
max_length=64,
|
||||||
default=None,
|
default=None,
|
||||||
null=True,
|
null=True,
|
||||||
|
@ -77,7 +77,7 @@ class RenderedMenuItem:
|
|||||||
self.html_id = hook_obj.html_id
|
self.html_id = hook_obj.html_id
|
||||||
|
|
||||||
|
|
||||||
def render_menu(request: HttpRequest) -> list[RenderedMenuItem]:
|
def render_menu(request: HttpRequest) -> list[RenderedMenuItem]: # noqa: C901
|
||||||
"""Return the rendered side menu for including in a template.
|
"""Return the rendered side menu for including in a template.
|
||||||
|
|
||||||
This function is creating BS5 style menus.
|
This function is creating BS5 style menus.
|
||||||
|
@ -48,8 +48,8 @@ def permissions_audit(request, app_label, model, codename):
|
|||||||
.prefetch_related('group_set', 'user_set', 'state_set',
|
.prefetch_related('group_set', 'user_set', 'state_set',
|
||||||
'state_set__userprofile_set', 'group_set__user_set', 'state_set__userprofile_set__user')\
|
'state_set__userprofile_set', 'group_set__user_set', 'state_set__userprofile_set__user')\
|
||||||
.get(content_type__app_label=app_label, content_type__model=model, codename=codename)
|
.get(content_type__app_label=app_label, content_type__model=model, codename=codename)
|
||||||
except Permission.DoesNotExist:
|
except Permission.DoesNotExist as e:
|
||||||
raise Http404
|
raise Http404 from e
|
||||||
|
|
||||||
context = {'permission': {
|
context = {'permission': {
|
||||||
'permission': perm,
|
'permission': perm,
|
||||||
|
@ -33,7 +33,6 @@ class AbstractServiceModel(models.Model):
|
|||||||
related_name='%(app_label)s'
|
related_name='%(app_label)s'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
@ -85,8 +84,8 @@ class ServicesCRUDMixin(SingleObjectMixin):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
return queryset.get(user__pk=self.request.user.pk)
|
return queryset.get(user__pk=self.request.user.pk)
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist as e:
|
||||||
raise Http404
|
raise Http404 from e
|
||||||
|
|
||||||
|
|
||||||
class BaseDeactivateServiceAccountView(ServicesCRUDMixin, BaseServiceView, DeleteView):
|
class BaseDeactivateServiceAccountView(ServicesCRUDMixin, BaseServiceView, DeleteView):
|
||||||
|
@ -44,26 +44,24 @@ MAX_JITTER_PER_RUN_SECS = 1.0
|
|||||||
|
|
||||||
def worker(num: int):
|
def worker(num: int):
|
||||||
"""worker function"""
|
"""worker function"""
|
||||||
worker_info = 'worker %d' % num
|
worker_info = f'worker {num}'
|
||||||
logger.info('%s: started', worker_info)
|
logger.info(f'{worker_info}: started')
|
||||||
client = DiscordClient(DISCORD_BOT_TOKEN)
|
client = DiscordClient(DISCORD_BOT_TOKEN)
|
||||||
try:
|
try:
|
||||||
runs = 0
|
runs = 0
|
||||||
while runs < NUMBER_OF_RUNS:
|
while runs < NUMBER_OF_RUNS:
|
||||||
run_info = '%s: run %d' % (worker_info, runs + 1)
|
run_info = f'{worker_info}: run {runs + 1}'
|
||||||
my_jitter_secs = random() * MAX_JITTER_PER_RUN_SECS
|
my_jitter_secs = random() * MAX_JITTER_PER_RUN_SECS
|
||||||
logger.info('%s - waiting %s secs', run_info, f'{my_jitter_secs:.3f}')
|
logger.info(f'{run_info} - waiting {my_jitter_secs:.3f} secs')
|
||||||
sleep(my_jitter_secs)
|
sleep(my_jitter_secs)
|
||||||
logger.info('%s - started', run_info)
|
logger.info(f'{run_info} - started')
|
||||||
try:
|
try:
|
||||||
client.modify_guild_member(
|
client.modify_guild_member(
|
||||||
DISCORD_GUILD_ID, DISCORD_USER_ID, nick=NICK
|
DISCORD_GUILD_ID, DISCORD_USER_ID, nick=NICK
|
||||||
)
|
)
|
||||||
runs += 1
|
runs += 1
|
||||||
except DiscordApiBackoff as bo:
|
except DiscordApiBackoff as bo:
|
||||||
message = '%s - waiting out API backoff for %d ms' % (
|
message = f'{run_info} - waiting out API backoff for {bo.retry_after} ms'
|
||||||
run_info, bo.retry_after
|
|
||||||
)
|
|
||||||
logger.info(message)
|
logger.info(message)
|
||||||
print()
|
print()
|
||||||
print(message)
|
print(message)
|
||||||
|
@ -89,12 +89,12 @@ def _task_perform_user_action(self, user_pk: int, method: str, **kwargs) -> None
|
|||||||
bo,
|
bo,
|
||||||
bo.retry_after_seconds
|
bo.retry_after_seconds
|
||||||
)
|
)
|
||||||
raise self.retry(countdown=bo.retry_after_seconds)
|
raise self.retry(exc=bo, countdown=bo.retry_after_seconds) from bo
|
||||||
|
|
||||||
except AttributeError:
|
except AttributeError as e:
|
||||||
raise ValueError(f'{method} not a valid method for DiscordUser')
|
raise ValueError(f'{method} not a valid method for DiscordUser') from e
|
||||||
|
|
||||||
except (HTTPError, ConnectionError):
|
except (HTTPError, ConnectionError) as e:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
'%s failed for user %s, retrying in %d secs',
|
'%s failed for user %s, retrying in %d secs',
|
||||||
method,
|
method,
|
||||||
@ -103,7 +103,7 @@ def _task_perform_user_action(self, user_pk: int, method: str, **kwargs) -> None
|
|||||||
exc_info=True
|
exc_info=True
|
||||||
)
|
)
|
||||||
if self.request.retries < DISCORD_TASKS_MAX_RETRIES:
|
if self.request.retries < DISCORD_TASKS_MAX_RETRIES:
|
||||||
raise self.retry(countdown=DISCORD_TASKS_RETRY_PAUSE)
|
raise self.retry(exc=e, countdown=DISCORD_TASKS_RETRY_PAUSE) from e
|
||||||
else:
|
else:
|
||||||
logger.error(
|
logger.error(
|
||||||
'%s failed for user %s after max retries',
|
'%s failed for user %s after max retries',
|
||||||
@ -192,8 +192,8 @@ def _task_perform_users_action(self, method: str, **kwargs) -> Any:
|
|||||||
try:
|
try:
|
||||||
result = getattr(DiscordUser.objects, method)(**kwargs)
|
result = getattr(DiscordUser.objects, method)(**kwargs)
|
||||||
|
|
||||||
except AttributeError:
|
except AttributeError as e:
|
||||||
raise ValueError(f'{method} not a valid method for DiscordUser.objects')
|
raise ValueError(f'{method} not a valid method for DiscordUser.objects') from e
|
||||||
|
|
||||||
except DiscordApiBackoff as bo:
|
except DiscordApiBackoff as bo:
|
||||||
logger.info(
|
logger.info(
|
||||||
@ -202,9 +202,9 @@ def _task_perform_users_action(self, method: str, **kwargs) -> Any:
|
|||||||
bo,
|
bo,
|
||||||
bo.retry_after_seconds
|
bo.retry_after_seconds
|
||||||
)
|
)
|
||||||
raise self.retry(countdown=bo.retry_after_seconds)
|
raise self.retry(exc=bo, countdown=bo.retry_after_seconds) from bo
|
||||||
|
|
||||||
except (HTTPError, ConnectionError):
|
except (HTTPError, ConnectionError)as e:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
'%s failed, retrying in %d secs',
|
'%s failed, retrying in %d secs',
|
||||||
method,
|
method,
|
||||||
@ -212,7 +212,7 @@ def _task_perform_users_action(self, method: str, **kwargs) -> Any:
|
|||||||
exc_info=True
|
exc_info=True
|
||||||
)
|
)
|
||||||
if self.request.retries < DISCORD_TASKS_MAX_RETRIES:
|
if self.request.retries < DISCORD_TASKS_MAX_RETRIES:
|
||||||
raise self.retry(countdown=DISCORD_TASKS_RETRY_PAUSE)
|
raise self.retry(exc=e, countdown=DISCORD_TASKS_RETRY_PAUSE) from e
|
||||||
else:
|
else:
|
||||||
logger.error('%s failed after max retries', method, exc_info=True)
|
logger.error('%s failed after max retries', method, exc_info=True)
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class DiscourseTasks:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
logger.warning(f"Discourse group sync failed for {user}, retrying in 10 mins")
|
logger.warning(f"Discourse group sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
logger.debug(f"Updated user {user} discourse groups.")
|
logger.debug(f"Updated user {user} discourse groups.")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -41,9 +41,9 @@ class MumbleTasks:
|
|||||||
return True
|
return True
|
||||||
except MumbleUser.DoesNotExist:
|
except MumbleUser.DoesNotExist:
|
||||||
logger.info(f"Mumble group sync failed for {user}, user does not have a mumble account")
|
logger.info(f"Mumble group sync failed for {user}, user does not have a mumble account")
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(f"Mumble group sync failed for {user}, retrying in 10 mins")
|
logger.exception(f"Mumble group sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
else:
|
else:
|
||||||
logger.debug(f"User {user} does not have a mumble account, skipping")
|
logger.debug(f"User {user} does not have a mumble account, skipping")
|
||||||
return False
|
return False
|
||||||
@ -61,9 +61,9 @@ class MumbleTasks:
|
|||||||
return True
|
return True
|
||||||
except MumbleUser.DoesNotExist:
|
except MumbleUser.DoesNotExist:
|
||||||
logger.info(f"Mumble display name sync failed for {user}, user does not have a mumble account")
|
logger.info(f"Mumble display name sync failed for {user}, user does not have a mumble account")
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(f"Mumble display name sync failed for {user}, retrying in 10 mins")
|
logger.exception(f"Mumble display name sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
else:
|
else:
|
||||||
logger.debug(f"User {user} does not have a mumble account, skipping")
|
logger.debug(f"User {user} does not have a mumble account, skipping")
|
||||||
return False
|
return False
|
||||||
|
@ -54,9 +54,9 @@ class OpenfireTasks:
|
|||||||
logger.debug(f"Updating user {user} jabber groups to {groups}")
|
logger.debug(f"Updating user {user} jabber groups to {groups}")
|
||||||
try:
|
try:
|
||||||
OpenfireManager.update_user_groups(user.openfire.username, groups)
|
OpenfireManager.update_user_groups(user.openfire.username, groups)
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(f"Jabber group sync failed for {user}, retrying in 10 mins")
|
logger.exception(f"Jabber group sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
logger.debug(f"Updated user {user} jabber groups.")
|
logger.debug(f"Updated user {user} jabber groups.")
|
||||||
else:
|
else:
|
||||||
logger.debug("User does not have an openfire account")
|
logger.debug("User does not have an openfire account")
|
||||||
|
@ -8,10 +8,10 @@ class Phpbb3User(models.Model):
|
|||||||
related_name='phpbb3')
|
related_name='phpbb3')
|
||||||
username = models.CharField(max_length=254)
|
username = models.CharField(max_length=254)
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.username
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("access_phpbb3", "Can access the phpBB3 service"),
|
("access_phpbb3", "Can access the phpBB3 service"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.username
|
||||||
|
@ -49,9 +49,9 @@ class Phpbb3Tasks:
|
|||||||
logger.debug(f"Updating user {user} phpbb3 groups to {groups}")
|
logger.debug(f"Updating user {user} phpbb3 groups to {groups}")
|
||||||
try:
|
try:
|
||||||
Phpbb3Manager.update_groups(user.phpbb3.username, groups)
|
Phpbb3Manager.update_groups(user.phpbb3.username, groups)
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(f"Phpbb group sync failed for {user}, retrying in 10 mins")
|
logger.exception(f"Phpbb group sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
logger.debug(f"Updated user {user} phpbb3 groups.")
|
logger.debug(f"Updated user {user} phpbb3 groups.")
|
||||||
else:
|
else:
|
||||||
logger.debug("User does not have a Phpbb3 account")
|
logger.debug("User does not have a Phpbb3 account")
|
||||||
|
@ -53,9 +53,9 @@ class SmfTasks:
|
|||||||
logger.debug(f"Updating user {user} smf groups to {groups}")
|
logger.debug(f"Updating user {user} smf groups to {groups}")
|
||||||
try:
|
try:
|
||||||
SmfManager.update_groups(user.smf.username, groups)
|
SmfManager.update_groups(user.smf.username, groups)
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(f"smf group sync failed for {user}, retrying in 10 mins")
|
logger.exception(f"smf group sync failed for {user}, retrying in 10 mins")
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
logger.debug(f"Updated user {user} smf groups.")
|
logger.debug(f"Updated user {user} smf groups.")
|
||||||
else:
|
else:
|
||||||
logger.debug("User does not have an smf account")
|
logger.debug("User does not have an smf account")
|
||||||
@ -77,11 +77,11 @@ class SmfTasks:
|
|||||||
f"SMF displayed name sync failed for {user}, "
|
f"SMF displayed name sync failed for {user}, "
|
||||||
"user does not have a SMF account"
|
"user does not have a SMF account"
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.exception(
|
logger.exception(
|
||||||
f"SMF displayed name sync failed for {user}, retrying in 10 mins"
|
f"SMF displayed name sync failed for {user}, retrying in 10 mins"
|
||||||
)
|
)
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
else:
|
else:
|
||||||
logger.debug(f"User {user} does not have a SMF account, skipping")
|
logger.debug(f"User {user} does not have a SMF account, skipping")
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class Teamspeak3Tasks:
|
|||||||
logger.debug(f"Updated user {user} teamspeak3 groups.")
|
logger.debug(f"Updated user {user} teamspeak3 groups.")
|
||||||
except TeamspeakError as e:
|
except TeamspeakError as e:
|
||||||
logger.error(f"Error occured while syncing TS groups for {user}: {str(e)}")
|
logger.error(f"Error occured while syncing TS groups for {user}: {str(e)}")
|
||||||
raise self.retry(countdown=60*10)
|
raise self.retry(exc=e, countdown=60 * 10) from e
|
||||||
else:
|
else:
|
||||||
logger.debug("User does not have a teamspeak3 account")
|
logger.debug("User does not have a teamspeak3 account")
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ class TS3Proto:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(value, int):
|
if isinstance(value, int):
|
||||||
return "%d" % value
|
return f"{value}"
|
||||||
value = value.replace("\\", r'\\')
|
value = value.replace("\\", r'\\')
|
||||||
for i, j in ts3_escape.items():
|
for i, j in ts3_escape.items():
|
||||||
value = value.replace(i, j)
|
value = value.replace(i, j)
|
||||||
@ -197,7 +197,7 @@ class TS3Proto:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(value, int):
|
if isinstance(value, int):
|
||||||
return "%d" % value
|
return f"{value}"
|
||||||
value = value.replace(r"\\", "\\")
|
value = value.replace(r"\\", "\\")
|
||||||
for i, j in ts3_escape.items():
|
for i, j in ts3_escape.items():
|
||||||
value = value.replace(j, i)
|
value = value.replace(j, i)
|
||||||
|
@ -68,8 +68,8 @@ def m2m_changed_group_permissions(sender, instance, action, pk_set, *args, **kwa
|
|||||||
logger.debug(f"Received m2m_changed from group {instance} permissions with action {action}")
|
logger.debug(f"Received m2m_changed from group {instance} permissions with action {action}")
|
||||||
if instance.pk and (action == "post_remove" or action == "post_clear"):
|
if instance.pk and (action == "post_remove" or action == "post_clear"):
|
||||||
logger.debug(f"Checking if service permission changed for group {instance}")
|
logger.debug(f"Checking if service permission changed for group {instance}")
|
||||||
# As validating an entire groups service could lead to many thousands of permission checks
|
# As validating an entire group's service could lead to many thousands of permission checks,
|
||||||
# first we check that one of the permissions changed is, in fact, a service permission.
|
# first, we check that one of the permissions changed is, in fact, a service permission.
|
||||||
perms = Permission.objects.filter(pk__in=pk_set)
|
perms = Permission.objects.filter(pk__in=pk_set)
|
||||||
got_change = False
|
got_change = False
|
||||||
service_perms = [svc.access_perm for svc in ServicesHook.get_services()]
|
service_perms = [svc.access_perm for svc in ServicesHook.get_services()]
|
||||||
@ -81,18 +81,19 @@ def m2m_changed_group_permissions(sender, instance, action, pk_set, *args, **kwa
|
|||||||
continue
|
continue
|
||||||
for svc in ServicesHook.get_services():
|
for svc in ServicesHook.get_services():
|
||||||
if svc.access_perm == path_perm:
|
if svc.access_perm == path_perm:
|
||||||
logger.debug(f"Permissions changed for group {instance} on service {svc}, re-validating services for groups users")
|
logger.debug(f"Permissions changed for group {instance} on service {svc}, re-validating services for group users")
|
||||||
|
|
||||||
def validate_all_groups_users_for_service():
|
def validate_all_groups_users_for_service(service):
|
||||||
logger.debug(f"Performing validation for service {svc}")
|
logger.debug(f"Performing validation for service {service}")
|
||||||
for user in instance.user_set.all():
|
for user in instance.user_set.all():
|
||||||
svc.validate_user(user)
|
service.validate_user(user)
|
||||||
|
|
||||||
transaction.on_commit(validate_all_groups_users_for_service)
|
transaction.on_commit(lambda service=svc: validate_all_groups_users_for_service(service))
|
||||||
got_change = True
|
got_change = True
|
||||||
break # Found service, break out of services iteration and go back to permission iteration
|
break # Found service, break out of services iteration and go back to permission iteration
|
||||||
if not got_change:
|
if not got_change:
|
||||||
logger.debug(f"Permission change for group {instance} was not service permission, ignoring")
|
logger.debug(f"Permission change for group {instance} was not a service permission, ignoring")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=State.permissions.through)
|
@receiver(m2m_changed, sender=State.permissions.through)
|
||||||
@ -115,12 +116,12 @@ def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwa
|
|||||||
if svc.access_perm == path_perm:
|
if svc.access_perm == path_perm:
|
||||||
logger.debug(f"Permissions changed for state {instance} on service {svc}, re-validating services for state users")
|
logger.debug(f"Permissions changed for state {instance} on service {svc}, re-validating services for state users")
|
||||||
|
|
||||||
def validate_all_state_users_for_service():
|
def validate_all_state_users_for_service(service):
|
||||||
logger.debug(f"Performing validation for service {svc}")
|
logger.debug(f"Performing validation for service {service}")
|
||||||
for profile in instance.userprofile_set.all():
|
for profile in instance.userprofile_set.all():
|
||||||
svc.validate_user(profile.user)
|
service.validate_user(profile.user)
|
||||||
|
|
||||||
transaction.on_commit(validate_all_state_users_for_service)
|
transaction.on_commit(lambda service=svc: validate_all_state_users_for_service(service))
|
||||||
got_change = True
|
got_change = True
|
||||||
break # Found service, break out of services iteration and go back to permission iteration
|
break # Found service, break out of services iteration and go back to permission iteration
|
||||||
if not got_change:
|
if not got_change:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user