mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 20:40:17 +02:00
update code to reflect the new minimum python version 3.7
- update string format method - remove redundant default arguments from function calls - remove unused imports - remove unicode identifier from strings, it's default in py3 (see: https://stackoverflow.com/a/4182635/12201331)
This commit is contained in:
parent
2fe1de1c97
commit
a6b340c179
@ -22,7 +22,13 @@ repos:
|
|||||||
args: [ '--remove' ]
|
args: [ '--remove' ]
|
||||||
|
|
||||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||||
rev: 2.3.5
|
rev: 2.3.54
|
||||||
hooks:
|
hooks:
|
||||||
- id: editorconfig-checker
|
- id: editorconfig-checker
|
||||||
exclude: ^(LICENSE|allianceauth\/static\/css\/themes\/bootstrap-locals.less|allianceauth\/eveonline\/swagger.json|(.*.po)|(.*.mo))
|
exclude: ^(LICENSE|allianceauth\/static\/css\/themes\/bootstrap-locals.less|allianceauth\/eveonline\/swagger.json|(.*.po)|(.*.mo))
|
||||||
|
|
||||||
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
|
rev: v2.29.0
|
||||||
|
hooks:
|
||||||
|
- id: pyupgrade
|
||||||
|
args: [ --py37-plus ]
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
__version__ = '2.9.0'
|
__version__ = '2.9.0'
|
||||||
__title__ = 'Alliance Auth'
|
__title__ = 'Alliance Auth'
|
||||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||||
NAME = '%s v%s' % (__title__, __version__)
|
NAME = f'{__title__} v{__version__}'
|
||||||
default_app_config = 'allianceauth.apps.AllianceAuthConfig'
|
default_app_config = 'allianceauth.apps.AllianceAuthConfig'
|
||||||
|
@ -16,7 +16,7 @@ class AnalyticsIdentifier(models.Model):
|
|||||||
raise ValidationError('There is can be only one \
|
raise ValidationError('There is can be only one \
|
||||||
AnalyticsIdentifier instance')
|
AnalyticsIdentifier instance')
|
||||||
self.pk = self.id = 1 # If this happens to be deleted and recreated, force it to be 1
|
self.pk = self.id = 1 # If this happens to be deleted and recreated, force it to be 1
|
||||||
return super(AnalyticsIdentifier, self).save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AnalyticsPath(models.Model):
|
class AnalyticsPath(models.Model):
|
||||||
|
@ -36,8 +36,8 @@ def make_service_hooks_update_groups_action(service):
|
|||||||
for user in queryset: # queryset filtering doesn't work here?
|
for user in queryset: # queryset filtering doesn't work here?
|
||||||
service.update_groups(user)
|
service.update_groups(user)
|
||||||
|
|
||||||
update_service_groups.__name__ = str('update_{}_groups'.format(slugify(service.name)))
|
update_service_groups.__name__ = str(f'update_{slugify(service.name)}_groups')
|
||||||
update_service_groups.short_description = "Sync groups for selected {} accounts".format(service.title)
|
update_service_groups.short_description = f"Sync groups for selected {service.title} accounts"
|
||||||
return update_service_groups
|
return update_service_groups
|
||||||
|
|
||||||
|
|
||||||
@ -54,8 +54,8 @@ def make_service_hooks_sync_nickname_action(service):
|
|||||||
for user in queryset: # queryset filtering doesn't work here?
|
for user in queryset: # queryset filtering doesn't work here?
|
||||||
service.sync_nickname(user)
|
service.sync_nickname(user)
|
||||||
|
|
||||||
sync_nickname.__name__ = str('sync_{}_nickname'.format(slugify(service.name)))
|
sync_nickname.__name__ = str(f'sync_{slugify(service.name)}_nickname')
|
||||||
sync_nickname.short_description = "Sync nicknames for selected {} accounts".format(service.title)
|
sync_nickname.short_description = f"Sync nicknames for selected {service.title} accounts"
|
||||||
return sync_nickname
|
return sync_nickname
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ class MainCorporationsFilter(admin.SimpleListFilter):
|
|||||||
.distinct()\
|
.distinct()\
|
||||||
.order_by(Lower('corporation_name'))
|
.order_by(Lower('corporation_name'))
|
||||||
return tuple(
|
return tuple(
|
||||||
[(x['corporation_id'], x['corporation_name']) for x in qs]
|
(x['corporation_id'], x['corporation_name']) for x in qs
|
||||||
)
|
)
|
||||||
|
|
||||||
def queryset(self, request, qs):
|
def queryset(self, request, qs):
|
||||||
@ -228,7 +228,7 @@ class MainAllianceFilter(admin.SimpleListFilter):
|
|||||||
.distinct()\
|
.distinct()\
|
||||||
.order_by(Lower('alliance_name'))
|
.order_by(Lower('alliance_name'))
|
||||||
return tuple(
|
return tuple(
|
||||||
[(x['alliance_id'], x['alliance_name']) for x in qs]
|
(x['alliance_id'], x['alliance_name']) for x in qs
|
||||||
)
|
)
|
||||||
|
|
||||||
def queryset(self, request, qs):
|
def queryset(self, request, qs):
|
||||||
@ -252,7 +252,7 @@ def update_main_character_model(modeladmin, request, queryset):
|
|||||||
|
|
||||||
modeladmin.message_user(
|
modeladmin.message_user(
|
||||||
request,
|
request,
|
||||||
'Update from ESI started for {} characters'.format(tasks_count)
|
f'Update from ESI started for {tasks_count} characters'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -369,7 +369,7 @@ class UserAdmin(BaseUserAdmin):
|
|||||||
_state.admin_order_field = 'profile__state'
|
_state.admin_order_field = 'profile__state'
|
||||||
|
|
||||||
def _groups(self, obj):
|
def _groups(self, obj):
|
||||||
my_groups = sorted([group.name for group in list(obj.groups.all())])
|
my_groups = sorted(group.name for group in list(obj.groups.all()))
|
||||||
return self._list_2_html_w_tooltips(
|
return self._list_2_html_w_tooltips(
|
||||||
my_groups, AUTHENTICATION_ADMIN_USERS_MAX_GROUPS
|
my_groups, AUTHENTICATION_ADMIN_USERS_MAX_GROUPS
|
||||||
)
|
)
|
||||||
@ -455,7 +455,7 @@ class StateAdmin(admin.ModelAdmin):
|
|||||||
def has_delete_permission(self, request, obj=None):
|
def has_delete_permission(self, request, obj=None):
|
||||||
if obj == get_guest_state():
|
if obj == get_guest_state():
|
||||||
return False
|
return False
|
||||||
return super(StateAdmin, self).has_delete_permission(request, obj=obj)
|
return super().has_delete_permission(request, obj=obj)
|
||||||
|
|
||||||
def get_fieldsets(self, request, obj=None):
|
def get_fieldsets(self, request, obj=None):
|
||||||
if obj == get_guest_state():
|
if obj == get_guest_state():
|
||||||
@ -464,7 +464,7 @@ class StateAdmin(admin.ModelAdmin):
|
|||||||
'fields': ('permissions', 'priority'),
|
'fields': ('permissions', 'priority'),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
return super(StateAdmin, self).get_fieldsets(request, obj=obj)
|
return super().get_fieldsets(request, obj=obj)
|
||||||
|
|
||||||
|
|
||||||
class BaseOwnershipAdmin(admin.ModelAdmin):
|
class BaseOwnershipAdmin(admin.ModelAdmin):
|
||||||
|
@ -7,6 +7,6 @@ class AuthenticationConfig(AppConfig):
|
|||||||
label = 'authentication'
|
label = 'authentication'
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
super(AuthenticationConfig, self).ready()
|
super().ready()
|
||||||
from allianceauth.authentication import checks, signals
|
from allianceauth.authentication import checks, signals
|
||||||
register(Tags.security)(checks.check_login_scopes_setting)
|
register(Tags.security)(checks.check_login_scopes_setting)
|
||||||
|
@ -36,17 +36,17 @@ class StateBackend(ModelBackend):
|
|||||||
try:
|
try:
|
||||||
ownership = CharacterOwnership.objects.get(character__character_id=token.character_id)
|
ownership = CharacterOwnership.objects.get(character__character_id=token.character_id)
|
||||||
if ownership.owner_hash == token.character_owner_hash:
|
if ownership.owner_hash == token.character_owner_hash:
|
||||||
logger.debug('Authenticating {0} by ownership of character {1}'.format(ownership.user, token.character_name))
|
logger.debug(f'Authenticating {ownership.user} by ownership of character {token.character_name}')
|
||||||
return ownership.user
|
return ownership.user
|
||||||
else:
|
else:
|
||||||
logger.debug('{0} has changed ownership. Creating new user account.'.format(token.character_name))
|
logger.debug(f'{token.character_name} has changed ownership. Creating new user account.')
|
||||||
ownership.delete()
|
ownership.delete()
|
||||||
return self.create_user(token)
|
return self.create_user(token)
|
||||||
except CharacterOwnership.DoesNotExist:
|
except CharacterOwnership.DoesNotExist:
|
||||||
try:
|
try:
|
||||||
# insecure legacy main check for pre-sso registration auth installs
|
# insecure legacy main check for pre-sso registration auth installs
|
||||||
profile = UserProfile.objects.get(main_character__character_id=token.character_id)
|
profile = UserProfile.objects.get(main_character__character_id=token.character_id)
|
||||||
logger.debug('Authenticating {0} by their main character {1} without active ownership.'.format(profile.user, profile.main_character))
|
logger.debug(f'Authenticating {profile.user} by their main character {profile.main_character} without active ownership.')
|
||||||
# attach an ownership
|
# attach an ownership
|
||||||
token.user = profile.user
|
token.user = profile.user
|
||||||
CharacterOwnership.objects.create_by_token(token)
|
CharacterOwnership.objects.create_by_token(token)
|
||||||
@ -59,13 +59,13 @@ class StateBackend(ModelBackend):
|
|||||||
user = records[0].user
|
user = records[0].user
|
||||||
token.user = user
|
token.user = user
|
||||||
co = CharacterOwnership.objects.create_by_token(token)
|
co = CharacterOwnership.objects.create_by_token(token)
|
||||||
logger.debug('Authenticating {0} by matching owner hash record of character {1}'.format(user, co.character))
|
logger.debug(f'Authenticating {user} by matching owner hash record of character {co.character}')
|
||||||
if not user.profile.main_character:
|
if not user.profile.main_character:
|
||||||
# set this as their main by default if they have none
|
# set this as their main by default if they have none
|
||||||
user.profile.main_character = co.character
|
user.profile.main_character = co.character
|
||||||
user.profile.save()
|
user.profile.save()
|
||||||
return user
|
return user
|
||||||
logger.debug('Unable to authenticate character {0}. Creating new user.'.format(token.character_name))
|
logger.debug(f'Unable to authenticate character {token.character_name}. Creating new user.')
|
||||||
return self.create_user(token)
|
return self.create_user(token)
|
||||||
|
|
||||||
def create_user(self, token):
|
def create_user(self, token):
|
||||||
@ -77,7 +77,7 @@ class StateBackend(ModelBackend):
|
|||||||
co = CharacterOwnership.objects.create_by_token(token) # assign ownership to this user
|
co = CharacterOwnership.objects.create_by_token(token) # assign ownership to this user
|
||||||
user.profile.main_character = co.character # assign main character as token character
|
user.profile.main_character = co.character # assign main character as token character
|
||||||
user.profile.save()
|
user.profile.save()
|
||||||
logger.debug('Created new user {0}'.format(user))
|
logger.debug(f'Created new user {user}')
|
||||||
return user
|
return user
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -87,10 +87,10 @@ class StateBackend(ModelBackend):
|
|||||||
if User.objects.filter(username__startswith=name).exists():
|
if User.objects.filter(username__startswith=name).exists():
|
||||||
u = User.objects.filter(username__startswith=name)
|
u = User.objects.filter(username__startswith=name)
|
||||||
num = len(u)
|
num = len(u)
|
||||||
username = "%s_%s" % (name, num)
|
username = f"{name}_{num}"
|
||||||
while u.filter(username=username).exists():
|
while u.filter(username=username).exists():
|
||||||
num += 1
|
num += 1
|
||||||
username = "%s_%s" % (name, num)
|
username = f"{name}_{num}"
|
||||||
else:
|
else:
|
||||||
username = name
|
username = name
|
||||||
return username
|
return username
|
||||||
|
@ -11,10 +11,10 @@ class Command(BaseCommand):
|
|||||||
if profiles.exists():
|
if profiles.exists():
|
||||||
for profile in profiles:
|
for profile in profiles:
|
||||||
self.stdout.write(self.style.ERROR(
|
self.stdout.write(self.style.ERROR(
|
||||||
'{0} does not have an ownership. Resetting user {1} main character.'.format(profile.main_character,
|
'{} does not have an ownership. Resetting user {} main character.'.format(profile.main_character,
|
||||||
profile.user)))
|
profile.user)))
|
||||||
profile.main_character = None
|
profile.main_character = None
|
||||||
profile.save()
|
profile.save()
|
||||||
self.stdout.write(self.style.WARNING('Reset {0} main characters.'.format(profiles.count())))
|
self.stdout.write(self.style.WARNING(f'Reset {profiles.count()} main characters.'))
|
||||||
else:
|
else:
|
||||||
self.stdout.write(self.style.SUCCESS('All main characters have active ownership.'))
|
self.stdout.write(self.style.SUCCESS('All main characters have active ownership.'))
|
||||||
|
@ -49,7 +49,7 @@ class StateQuerySet(QuerySet):
|
|||||||
for state in self:
|
for state in self:
|
||||||
for profile in state.userprofile_set.all():
|
for profile in state.userprofile_set.all():
|
||||||
profile.assign_state(state=self.model.objects.exclude(pk=state.pk).get_for_user(profile.user))
|
profile.assign_state(state=self.model.objects.exclude(pk=state.pk).get_for_user(profile.user))
|
||||||
super(StateQuerySet, self).delete()
|
super().delete()
|
||||||
|
|
||||||
|
|
||||||
class StateManager(Manager):
|
class StateManager(Manager):
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:38
|
# Generated by Django 1.10.1 on 2016-09-05 21:38
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-07 19:14
|
# Generated by Django 1.10.1 on 2016-09-07 19:14
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-09 20:29
|
# Generated by Django 1.10.1 on 2016-09-09 20:29
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-09 23:19
|
# Generated by Django 1.10.1 on 2016-09-09 23:19
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-09 23:11
|
# Generated by Django 1.10.1 on 2016-09-09 23:11
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-10 05:42
|
# Generated by Django 1.10.1 on 2016-09-10 05:42
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-10 21:50
|
# Generated by Django 1.10.1 on 2016-09-10 21:50
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-12 13:04
|
# Generated by Django 1.10.1 on 2016-09-12 13:04
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-10-21 02:28
|
# Generated by Django 1.10.2 on 2016-10-21 02:28
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2017-01-07 06:47
|
# Generated by Django 1.10.1 on 2017-01-07 06:47
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
@ -9,7 +8,7 @@ def count_completed_fields(model):
|
|||||||
def forward(apps, schema_editor):
|
def forward(apps, schema_editor):
|
||||||
# this ensures only one model exists per user
|
# this ensures only one model exists per user
|
||||||
AuthServicesInfo = apps.get_model('authentication', 'AuthServicesInfo')
|
AuthServicesInfo = apps.get_model('authentication', 'AuthServicesInfo')
|
||||||
users = set([a.user for a in AuthServicesInfo.objects.all()])
|
users = {a.user for a in AuthServicesInfo.objects.all()}
|
||||||
for u in users:
|
for u in users:
|
||||||
auths = AuthServicesInfo.objects.filter(user=u)
|
auths = AuthServicesInfo.objects.filter(user=u)
|
||||||
if auths.count() > 1:
|
if auths.count() > 1:
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2017-01-07 07:11
|
# Generated by Django 1.10.1 on 2017-01-07 07:11
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-01-12 00:59
|
# Generated by Django 1.10.5 on 2017-01-12 00:59
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-12-11 23:14
|
# Generated by Django 1.10.2 on 2016-12-11 23:14
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-09 23:19
|
# Generated by Django 1.10.1 on 2016-09-09 23:19
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:09
|
# Generated by Django 1.10.5 on 2017-03-22 23:09
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import allianceauth.authentication.models
|
import allianceauth.authentication.models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class State(models.Model):
|
|||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
for profile in self.userprofile_set.all():
|
for profile in self.userprofile_set.all():
|
||||||
profile.assign_state(state=State.objects.exclude(pk=self.pk).get_for_user(profile.user))
|
profile.assign_state(state=State.objects.exclude(pk=self.pk).get_for_user(profile.user))
|
||||||
super(State, self).delete(**kwargs)
|
super().delete(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
def get_guest_state():
|
def get_guest_state():
|
||||||
@ -67,7 +67,7 @@ class UserProfile(models.Model):
|
|||||||
if self.state != state:
|
if self.state != state:
|
||||||
self.state = state
|
self.state = state
|
||||||
if commit:
|
if commit:
|
||||||
logger.info('Updating {} state to {}'.format(self.user, self.state))
|
logger.info(f'Updating {self.user} state to {self.state}')
|
||||||
self.save(update_fields=['state'])
|
self.save(update_fields=['state'])
|
||||||
notify(
|
notify(
|
||||||
self.user,
|
self.user,
|
||||||
@ -102,7 +102,7 @@ class CharacterOwnership(models.Model):
|
|||||||
objects = CharacterOwnershipManager()
|
objects = CharacterOwnershipManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s: %s" % (self.user, self.character)
|
return f"{self.user}: {self.character}"
|
||||||
|
|
||||||
|
|
||||||
class OwnershipRecord(models.Model):
|
class OwnershipRecord(models.Model):
|
||||||
@ -115,4 +115,4 @@ class OwnershipRecord(models.Model):
|
|||||||
ordering = ['-created']
|
ordering = ['-created']
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s: %s on %s" % (self.user, self.character, self.created)
|
return f"{self.user}: {self.character} on {self.created}"
|
||||||
|
@ -29,27 +29,27 @@ def trigger_state_check(state):
|
|||||||
@receiver(m2m_changed, sender=State.member_characters.through)
|
@receiver(m2m_changed, sender=State.member_characters.through)
|
||||||
def state_member_characters_changed(sender, instance, action, *args, **kwargs):
|
def state_member_characters_changed(sender, instance, action, *args, **kwargs):
|
||||||
if action.startswith('post_'):
|
if action.startswith('post_'):
|
||||||
logger.debug('State {} member characters changed. Re-evaluating membership.'.format(instance))
|
logger.debug(f'State {instance} member characters changed. Re-evaluating membership.')
|
||||||
trigger_state_check(instance)
|
trigger_state_check(instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=State.member_corporations.through)
|
@receiver(m2m_changed, sender=State.member_corporations.through)
|
||||||
def state_member_corporations_changed(sender, instance, action, *args, **kwargs):
|
def state_member_corporations_changed(sender, instance, action, *args, **kwargs):
|
||||||
if action.startswith('post_'):
|
if action.startswith('post_'):
|
||||||
logger.debug('State {} member corporations changed. Re-evaluating membership.'.format(instance))
|
logger.debug(f'State {instance} member corporations changed. Re-evaluating membership.')
|
||||||
trigger_state_check(instance)
|
trigger_state_check(instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=State.member_alliances.through)
|
@receiver(m2m_changed, sender=State.member_alliances.through)
|
||||||
def state_member_alliances_changed(sender, instance, action, *args, **kwargs):
|
def state_member_alliances_changed(sender, instance, action, *args, **kwargs):
|
||||||
if action.startswith('post_'):
|
if action.startswith('post_'):
|
||||||
logger.debug('State {} member alliances changed. Re-evaluating membership.'.format(instance))
|
logger.debug(f'State {instance} member alliances changed. Re-evaluating membership.')
|
||||||
trigger_state_check(instance)
|
trigger_state_check(instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=State)
|
@receiver(post_save, sender=State)
|
||||||
def state_saved(sender, instance, *args, **kwargs):
|
def state_saved(sender, instance, *args, **kwargs):
|
||||||
logger.debug('State {} saved. Re-evaluating membership.'.format(instance))
|
logger.debug(f'State {instance} saved. Re-evaluating membership.')
|
||||||
trigger_state_check(instance)
|
trigger_state_check(instance)
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs):
|
|||||||
if not created:
|
if not created:
|
||||||
update_fields = kwargs.pop('update_fields', []) or []
|
update_fields = kwargs.pop('update_fields', []) or []
|
||||||
if 'state' not in update_fields:
|
if 'state' not in update_fields:
|
||||||
logger.debug('Profile for {} saved without state change. Re-evaluating state.'.format(instance.user))
|
logger.debug(f'Profile for {instance.user} saved without state change. Re-evaluating state.')
|
||||||
instance.assign_state()
|
instance.assign_state()
|
||||||
|
|
||||||
|
|
||||||
@ -68,14 +68,14 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs):
|
|||||||
def create_required_models(sender, instance, created, *args, **kwargs):
|
def create_required_models(sender, instance, created, *args, **kwargs):
|
||||||
# ensure all users have a model
|
# ensure all users have a model
|
||||||
if created:
|
if created:
|
||||||
logger.debug('User {} created. Creating default UserProfile.'.format(instance))
|
logger.debug(f'User {instance} created. Creating default UserProfile.')
|
||||||
UserProfile.objects.get_or_create(user=instance)
|
UserProfile.objects.get_or_create(user=instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=Token)
|
@receiver(post_save, sender=Token)
|
||||||
def record_character_ownership(sender, instance, created, *args, **kwargs):
|
def record_character_ownership(sender, instance, created, *args, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
logger.debug('New token for {0} character {1} saved. Evaluating ownership.'.format(instance.user, instance.character_name))
|
logger.debug(f'New token for {instance.user} character {instance.character_name} saved. Evaluating ownership.')
|
||||||
if instance.user:
|
if instance.user:
|
||||||
query = Q(owner_hash=instance.character_owner_hash) & Q(user=instance.user)
|
query = Q(owner_hash=instance.character_owner_hash) & Q(user=instance.user)
|
||||||
else:
|
else:
|
||||||
@ -84,13 +84,13 @@ def record_character_ownership(sender, instance, created, *args, **kwargs):
|
|||||||
CharacterOwnership.objects.filter(character__character_id=instance.character_id).exclude(query).delete()
|
CharacterOwnership.objects.filter(character__character_id=instance.character_id).exclude(query).delete()
|
||||||
# create character if needed
|
# create character if needed
|
||||||
if EveCharacter.objects.filter(character_id=instance.character_id).exists() is False:
|
if EveCharacter.objects.filter(character_id=instance.character_id).exists() is False:
|
||||||
logger.debug('Token is for a new character. Creating model for {0} ({1})'.format(instance.character_name, instance.character_id))
|
logger.debug(f'Token is for a new character. Creating model for {instance.character_name} ({instance.character_id})')
|
||||||
EveCharacter.objects.create_character(instance.character_id)
|
EveCharacter.objects.create_character(instance.character_id)
|
||||||
char = EveCharacter.objects.get(character_id=instance.character_id)
|
char = EveCharacter.objects.get(character_id=instance.character_id)
|
||||||
# check if we need to create ownership
|
# check if we need to create ownership
|
||||||
if instance.user and not CharacterOwnership.objects.filter(
|
if instance.user and not CharacterOwnership.objects.filter(
|
||||||
character__character_id=instance.character_id).exists():
|
character__character_id=instance.character_id).exists():
|
||||||
logger.debug("Character {0} is not yet owned. Assigning ownership to {1}".format(instance.character_name, instance.user))
|
logger.debug(f"Character {instance.character_name} is not yet owned. Assigning ownership to {instance.user}")
|
||||||
CharacterOwnership.objects.update_or_create(character=char, defaults={'owner_hash': instance.character_owner_hash, 'user': instance.user})
|
CharacterOwnership.objects.update_or_create(character=char, defaults={'owner_hash': instance.character_owner_hash, 'user': instance.user})
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ def record_character_ownership(sender, instance, created, *args, **kwargs):
|
|||||||
def validate_main_character(sender, instance, *args, **kwargs):
|
def validate_main_character(sender, instance, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
if instance.user.profile.main_character == instance.character:
|
if instance.user.profile.main_character == instance.character:
|
||||||
logger.info("Ownership of a main character {0} has been revoked. Resetting {1} main character.".format(
|
logger.info("Ownership of a main character {} has been revoked. Resetting {} main character.".format(
|
||||||
instance.character, instance.user))
|
instance.character, instance.user))
|
||||||
# clear main character as user no longer owns them
|
# clear main character as user no longer owns them
|
||||||
instance.user.profile.main_character = None
|
instance.user.profile.main_character = None
|
||||||
@ -111,7 +111,7 @@ def validate_main_character(sender, instance, *args, **kwargs):
|
|||||||
@receiver(post_delete, sender=Token)
|
@receiver(post_delete, sender=Token)
|
||||||
def validate_ownership(sender, instance, *args, **kwargs):
|
def validate_ownership(sender, instance, *args, **kwargs):
|
||||||
if not Token.objects.filter(character_owner_hash=instance.character_owner_hash).filter(refresh_token__isnull=False).exists():
|
if not Token.objects.filter(character_owner_hash=instance.character_owner_hash).filter(refresh_token__isnull=False).exists():
|
||||||
logger.info("No remaining tokens to validate ownership of character {0}. Revoking ownership.".format(instance.character_name))
|
logger.info(f"No remaining tokens to validate ownership of character {instance.character_name}. Revoking ownership.")
|
||||||
CharacterOwnership.objects.filter(owner_hash=instance.character_owner_hash).delete()
|
CharacterOwnership.objects.filter(owner_hash=instance.character_owner_hash).delete()
|
||||||
|
|
||||||
|
|
||||||
@ -122,11 +122,11 @@ def assign_state_on_active_change(sender, instance, *args, **kwargs):
|
|||||||
old_instance = User.objects.get(pk=instance.pk)
|
old_instance = User.objects.get(pk=instance.pk)
|
||||||
if old_instance.is_active != instance.is_active:
|
if old_instance.is_active != instance.is_active:
|
||||||
if instance.is_active:
|
if instance.is_active:
|
||||||
logger.debug("User {0} has been activated. Assigning state.".format(instance))
|
logger.debug(f"User {instance} has been activated. Assigning state.")
|
||||||
instance.profile.assign_state()
|
instance.profile.assign_state()
|
||||||
else:
|
else:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"User {0} has been deactivated. Revoking state and assigning to guest state.".format(instance))
|
f"User {instance} has been deactivated. Revoking state and assigning to guest state.")
|
||||||
instance.profile.state = get_guest_state()
|
instance.profile.state = get_guest_state()
|
||||||
instance.profile.save(update_fields=['state'])
|
instance.profile.save(update_fields=['state'])
|
||||||
|
|
||||||
@ -135,10 +135,10 @@ def assign_state_on_active_change(sender, instance, *args, **kwargs):
|
|||||||
def check_state_on_character_update(sender, instance, *args, **kwargs):
|
def check_state_on_character_update(sender, instance, *args, **kwargs):
|
||||||
# if this is a main character updating, check that user's state
|
# if this is a main character updating, check that user's state
|
||||||
try:
|
try:
|
||||||
logger.debug("Character {0} has been saved. Assessing owner's state for changes.".format(instance))
|
logger.debug(f"Character {instance} has been saved. Assessing owner's state for changes.")
|
||||||
instance.userprofile.assign_state()
|
instance.userprofile.assign_state()
|
||||||
except UserProfile.DoesNotExist:
|
except UserProfile.DoesNotExist:
|
||||||
logger.debug("Character {0} is not a main character. No state assessment required.".format(instance))
|
logger.debug(f"Character {instance} is not a main character. No state assessment required.")
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ def ownership_record_creation(sender, instance, created, *args, **kwargs):
|
|||||||
records = OwnershipRecord.objects.filter(owner_hash=instance.owner_hash).filter(character=instance.character)
|
records = OwnershipRecord.objects.filter(owner_hash=instance.owner_hash).filter(character=instance.character)
|
||||||
if records.exists():
|
if records.exists():
|
||||||
if records[0].user == instance.user: # most recent record is sorted first
|
if records[0].user == instance.user: # most recent record is sorted first
|
||||||
logger.debug("Already have ownership record of {0} by user {1}".format(instance.character, instance.user))
|
logger.debug(f"Already have ownership record of {instance.character} by user {instance.user}")
|
||||||
return
|
return
|
||||||
logger.info("Character {0} has a new owner {1}. Creating ownership record.".format(instance.character, instance.user))
|
logger.info(f"Character {instance.character} has a new owner {instance.user}. Creating ownership record.")
|
||||||
OwnershipRecord.objects.create(user=instance.user, character=instance.character, owner_hash=instance.owner_hash)
|
OwnershipRecord.objects.create(user=instance.user, character=instance.character, owner_hash=instance.owner_hash)
|
||||||
|
@ -22,13 +22,13 @@ def check_character_ownership(owner_hash):
|
|||||||
continue
|
continue
|
||||||
except (KeyError, IncompleteResponseError):
|
except (KeyError, IncompleteResponseError):
|
||||||
# We can't validate the hash hasn't changed but also can't assume it has. Abort for now.
|
# We can't validate the hash hasn't changed but also can't assume it has. Abort for now.
|
||||||
logger.warning("Failed to validate owner hash of {0} due to problems contacting SSO servers.".format(
|
logger.warning("Failed to validate owner hash of {} due to problems contacting SSO servers.".format(
|
||||||
tokens[0].character_name))
|
tokens[0].character_name))
|
||||||
break
|
break
|
||||||
|
|
||||||
if not t.character_owner_hash == old_hash:
|
if not t.character_owner_hash == old_hash:
|
||||||
logger.info(
|
logger.info(
|
||||||
'Character %s has changed ownership. Revoking %s tokens.' % (t.character_name, tokens.count()))
|
f'Character {t.character_name} has changed ownership. Revoking {tokens.count()} tokens.')
|
||||||
tokens.delete()
|
tokens.delete()
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ from . import get_admin_change_view_url, get_admin_search_url
|
|||||||
MODULE_PATH = 'allianceauth.authentication.admin'
|
MODULE_PATH = 'allianceauth.authentication.admin'
|
||||||
|
|
||||||
|
|
||||||
class MockRequest(object):
|
class MockRequest:
|
||||||
def __init__(self, user=None):
|
def __init__(self, user=None):
|
||||||
self.user = user
|
self.user = user
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ def make_generic_search_request(ModelClass: type, search_term: str):
|
|||||||
c = Client()
|
c = Client()
|
||||||
c.login(username='superuser', password='secret')
|
c.login(username='superuser', password='secret')
|
||||||
return c.get(
|
return c.get(
|
||||||
'%s?q=%s' % (get_admin_search_url(ModelClass), quote(search_term))
|
f'{get_admin_search_url(ModelClass)}?q={quote(search_term)}'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,12 +114,12 @@ class TestAuthenticate(TestCase):
|
|||||||
def test_authenticate_main_character(self):
|
def test_authenticate_main_character(self):
|
||||||
t = Token(character_id=self.main_character.character_id, character_owner_hash='1')
|
t = Token(character_id=self.main_character.character_id, character_owner_hash='1')
|
||||||
user = StateBackend().authenticate(token=t)
|
user = StateBackend().authenticate(token=t)
|
||||||
self.assertEquals(user, self.user)
|
self.assertEqual(user, self.user)
|
||||||
|
|
||||||
def test_authenticate_alt_character(self):
|
def test_authenticate_alt_character(self):
|
||||||
t = Token(character_id=self.alt_character.character_id, character_owner_hash='2')
|
t = Token(character_id=self.alt_character.character_id, character_owner_hash='2')
|
||||||
user = StateBackend().authenticate(token=t)
|
user = StateBackend().authenticate(token=t)
|
||||||
self.assertEquals(user, self.user)
|
self.assertEqual(user, self.user)
|
||||||
|
|
||||||
def test_authenticate_unclaimed_character(self):
|
def test_authenticate_unclaimed_character(self):
|
||||||
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='3')
|
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='3')
|
||||||
|
@ -36,8 +36,8 @@ class CharacterOwnershipTestCase(TestCase):
|
|||||||
character_owner_hash='1',
|
character_owner_hash='1',
|
||||||
)
|
)
|
||||||
co = CharacterOwnership.objects.get(character=self.character)
|
co = CharacterOwnership.objects.get(character=self.character)
|
||||||
self.assertEquals(co.user, self.user)
|
self.assertEqual(co.user, self.user)
|
||||||
self.assertEquals(co.owner_hash, '1')
|
self.assertEqual(co.owner_hash, '1')
|
||||||
|
|
||||||
def test_transfer_ownership(self):
|
def test_transfer_ownership(self):
|
||||||
Token.objects.create(
|
Token.objects.create(
|
||||||
@ -54,7 +54,7 @@ class CharacterOwnershipTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
co = CharacterOwnership.objects.get(character=self.character)
|
co = CharacterOwnership.objects.get(character=self.character)
|
||||||
self.assertNotEqual(self.user, co.user)
|
self.assertNotEqual(self.user, co.user)
|
||||||
self.assertEquals(self.alt_user, co.user)
|
self.assertEqual(self.alt_user, co.user)
|
||||||
|
|
||||||
def test_clear_main_character(self):
|
def test_clear_main_character(self):
|
||||||
Token.objects.create(
|
Token.objects.create(
|
||||||
@ -98,29 +98,29 @@ class StateTestCase(TestCase):
|
|||||||
def test_state_assignment_on_character_change(self):
|
def test_state_assignment_on_character_change(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.member_state)
|
self.assertEqual(self.user.profile.state, self.member_state)
|
||||||
|
|
||||||
self.member_state.member_characters.remove(self.test_character)
|
self.member_state.member_characters.remove(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.guest_state)
|
self.assertEqual(self.user.profile.state, self.guest_state)
|
||||||
|
|
||||||
def test_state_assignment_on_corporation_change(self):
|
def test_state_assignment_on_corporation_change(self):
|
||||||
self.member_state.member_corporations.add(self.test_corporation)
|
self.member_state.member_corporations.add(self.test_corporation)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.member_state)
|
self.assertEqual(self.user.profile.state, self.member_state)
|
||||||
|
|
||||||
self.member_state.member_corporations.remove(self.test_corporation)
|
self.member_state.member_corporations.remove(self.test_corporation)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.guest_state)
|
self.assertEqual(self.user.profile.state, self.guest_state)
|
||||||
|
|
||||||
def test_state_assignment_on_alliance_addition(self):
|
def test_state_assignment_on_alliance_addition(self):
|
||||||
self.member_state.member_alliances.add(self.test_alliance)
|
self.member_state.member_alliances.add(self.test_alliance)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.member_state)
|
self.assertEqual(self.user.profile.state, self.member_state)
|
||||||
|
|
||||||
self.member_state.member_alliances.remove(self.test_alliance)
|
self.member_state.member_alliances.remove(self.test_alliance)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.guest_state)
|
self.assertEqual(self.user.profile.state, self.guest_state)
|
||||||
|
|
||||||
def test_state_assignment_on_higher_priority_state_creation(self):
|
def test_state_assignment_on_higher_priority_state_creation(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
@ -130,10 +130,10 @@ class StateTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
higher_state.member_characters.add(self.test_character)
|
higher_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(higher_state, self.user.profile.state)
|
self.assertEqual(higher_state, self.user.profile.state)
|
||||||
higher_state.member_characters.clear()
|
higher_state.member_characters.clear()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
self.member_state.member_characters.clear()
|
self.member_state.member_characters.clear()
|
||||||
|
|
||||||
def test_state_assignment_on_lower_priority_state_creation(self):
|
def test_state_assignment_on_lower_priority_state_creation(self):
|
||||||
@ -144,10 +144,10 @@ class StateTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
lower_state.member_characters.add(self.test_character)
|
lower_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
lower_state.member_characters.clear()
|
lower_state.member_characters.clear()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
self.member_state.member_characters.clear()
|
self.member_state.member_characters.clear()
|
||||||
|
|
||||||
def test_state_assignment_on_priority_change(self):
|
def test_state_assignment_on_priority_change(self):
|
||||||
@ -161,11 +161,11 @@ class StateTestCase(TestCase):
|
|||||||
lower_state.priority = 500
|
lower_state.priority = 500
|
||||||
lower_state.save()
|
lower_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(lower_state, self.user.profile.state)
|
self.assertEqual(lower_state, self.user.profile.state)
|
||||||
lower_state.priority = 125
|
lower_state.priority = 125
|
||||||
lower_state.save()
|
lower_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
|
|
||||||
def test_state_assignment_on_state_deletion(self):
|
def test_state_assignment_on_state_deletion(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
@ -175,11 +175,11 @@ class StateTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
higher_state.member_characters.add(self.test_character)
|
higher_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(higher_state, self.user.profile.state)
|
self.assertEqual(higher_state, self.user.profile.state)
|
||||||
higher_state.delete()
|
higher_state.delete()
|
||||||
self.assertFalse(State.objects.filter(name='Higher State').count())
|
self.assertFalse(State.objects.filter(name='Higher State').count())
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
|
|
||||||
def test_state_assignment_on_public_toggle(self):
|
def test_state_assignment_on_public_toggle(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
@ -188,26 +188,26 @@ class StateTestCase(TestCase):
|
|||||||
priority=200,
|
priority=200,
|
||||||
)
|
)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
higher_state.public = True
|
higher_state.public = True
|
||||||
higher_state.save()
|
higher_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(higher_state, self.user.profile.state)
|
self.assertEqual(higher_state, self.user.profile.state)
|
||||||
higher_state.public = False
|
higher_state.public = False
|
||||||
higher_state.save()
|
higher_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEqual(self.member_state, self.user.profile.state)
|
||||||
|
|
||||||
def test_state_assignment_on_active_changed(self):
|
def test_state_assignment_on_active_changed(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self.user.is_active = False
|
self.user.is_active = False
|
||||||
self.user.save()
|
self.user.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.guest_state)
|
self.assertEqual(self.user.profile.state, self.guest_state)
|
||||||
self.user.is_active = True
|
self.user.is_active = True
|
||||||
self.user.save()
|
self.user.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.user.profile.state, self.member_state)
|
self.assertEqual(self.user.profile.state, self.member_state)
|
||||||
|
|
||||||
|
|
||||||
class CharacterOwnershipCheckTestCase(TestCase):
|
class CharacterOwnershipCheckTestCase(TestCase):
|
||||||
|
@ -63,7 +63,7 @@ def dashboard(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@token_required(scopes=settings.LOGIN_TOKEN_SCOPES)
|
@token_required(scopes=settings.LOGIN_TOKEN_SCOPES)
|
||||||
def main_character_change(request, token):
|
def main_character_change(request, token):
|
||||||
logger.debug("main_character_change called by user %s for character %s" % (request.user, token.character_name))
|
logger.debug(f"main_character_change called by user {request.user} for character {token.character_name}")
|
||||||
try:
|
try:
|
||||||
co = CharacterOwnership.objects.get(character__character_id=token.character_id, user=request.user)
|
co = CharacterOwnership.objects.get(character__character_id=token.character_id, user=request.user)
|
||||||
except CharacterOwnership.DoesNotExist:
|
except CharacterOwnership.DoesNotExist:
|
||||||
@ -154,7 +154,7 @@ class RegistrationView(BaseRegistrationView):
|
|||||||
if not getattr(settings, 'REGISTRATION_VERIFY_EMAIL', True):
|
if not getattr(settings, 'REGISTRATION_VERIFY_EMAIL', True):
|
||||||
# Keep the request so the user can be automagically logged in.
|
# Keep the request so the user can be automagically logged in.
|
||||||
setattr(self, 'request', request)
|
setattr(self, 'request', request)
|
||||||
return super(RegistrationView, self).dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def register(self, form):
|
def register(self, form):
|
||||||
user = User.objects.get(pk=self.request.session.get('registration_uid'))
|
user = User.objects.get(pk=self.request.session.get('registration_uid'))
|
||||||
@ -173,7 +173,7 @@ class RegistrationView(BaseRegistrationView):
|
|||||||
return signing.dumps(obj=[getattr(user, User.USERNAME_FIELD), user.email], salt=REGISTRATION_SALT)
|
return signing.dumps(obj=[getattr(user, User.USERNAME_FIELD), user.email], salt=REGISTRATION_SALT)
|
||||||
|
|
||||||
def get_email_context(self, activation_key):
|
def get_email_context(self, activation_key):
|
||||||
context = super(RegistrationView, self).get_email_context(activation_key)
|
context = super().get_email_context(activation_key)
|
||||||
context['url'] = context['site'].domain + reverse('registration_activate', args=[activation_key])
|
context['url'] = context['site'].domain + reverse('registration_activate', args=[activation_key])
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ def create_project(parser, options, args):
|
|||||||
# Call the command with extra context
|
# Call the command with extra context
|
||||||
call_command(StartProject(), *args, **command_options)
|
call_command(StartProject(), *args, **command_options)
|
||||||
|
|
||||||
print("Success! %(project_name)s has been created." % {'project_name': args[0]}) # noqa
|
print(f"Success! {args[0]} has been created.") # noqa
|
||||||
|
|
||||||
|
|
||||||
def update_settings(parser, options, args):
|
def update_settings(parser, options, args):
|
||||||
@ -69,10 +69,10 @@ def update_settings(parser, options, args):
|
|||||||
template_settings_path = os.path.join(template_path, 'project_name/settings/base.py')
|
template_settings_path = os.path.join(template_path, 'project_name/settings/base.py')
|
||||||
|
|
||||||
# overwrite the local project's base settings
|
# overwrite the local project's base settings
|
||||||
with open(template_settings_path, 'r') as template, open(settings_path, 'w') as target:
|
with open(template_settings_path) as template, open(settings_path, 'w') as target:
|
||||||
target.write(template.read())
|
target.write(template.read())
|
||||||
|
|
||||||
print("Successfully updated %(project_name)s settings." % {'project_name': project_name})
|
print(f"Successfully updated {project_name} settings.")
|
||||||
|
|
||||||
|
|
||||||
COMMANDS = {
|
COMMANDS = {
|
||||||
|
@ -29,7 +29,7 @@ class CorpStatsQuerySet(models.QuerySet):
|
|||||||
if user.has_perm('corputils.view_state_corpstats'):
|
if user.has_perm('corputils.view_state_corpstats'):
|
||||||
queries.append(models.Q(corp__in=user.profile.state.member_corporations.all()))
|
queries.append(models.Q(corp__in=user.profile.state.member_corporations.all()))
|
||||||
queries.append(models.Q(corp__alliance__in=user.profile.state.member_alliances.all()))
|
queries.append(models.Q(corp__alliance__in=user.profile.state.member_alliances.all()))
|
||||||
logger.debug('%s queries for user %s visible corpstats.' % (len(queries), user))
|
logger.debug(f'{len(queries)} queries for user {user} visible corpstats.')
|
||||||
# filter based on queries
|
# filter based on queries
|
||||||
query = queries.pop()
|
query = queries.pop()
|
||||||
for q in queries:
|
for q in queries:
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-12-14 21:36
|
# Generated by Django 1.10.1 on 2016-12-14 21:36
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-12-14 21:48
|
# Generated by Django 1.10.1 on 2016-12-14 21:48
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-26 20:13
|
# Generated by Django 1.10.5 on 2017-03-26 20:13
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
@ -48,7 +47,7 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='corpmember',
|
name='corpmember',
|
||||||
unique_together=set([('corpstats', 'character_id')]),
|
unique_together={('corpstats', 'character_id')},
|
||||||
),
|
),
|
||||||
migrations.RunPython(convert_json_to_members, convert_members_to_json),
|
migrations.RunPython(convert_json_to_members, convert_members_to_json),
|
||||||
migrations.RemoveField(
|
migrations.RemoveField(
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.2 on 2017-06-10 15:34
|
# Generated by Django 1.11.2 on 2017-06-10 15:34
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ class CorpStats(models.Model):
|
|||||||
objects = CorpStatsManager()
|
objects = CorpStatsManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s for %s" % (self.__class__.__name__, self.corp)
|
return f"{self.__class__.__name__} for {self.corp}"
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
try:
|
try:
|
||||||
@ -73,7 +73,7 @@ class CorpStats(models.Model):
|
|||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
except TokenError as e:
|
except TokenError as e:
|
||||||
logger.warning("%s failed to update: %s" % (self, e))
|
logger.warning(f"{self} failed to update: {e}")
|
||||||
if self.token.user:
|
if self.token.user:
|
||||||
notify(
|
notify(
|
||||||
self.token.user, "%s failed to update with your ESI token." % self,
|
self.token.user, "%s failed to update with your ESI token." % self,
|
||||||
@ -81,9 +81,9 @@ class CorpStats(models.Model):
|
|||||||
level="error")
|
level="error")
|
||||||
self.delete()
|
self.delete()
|
||||||
except HTTPForbidden as e:
|
except HTTPForbidden as e:
|
||||||
logger.warning("%s failed to update: %s" % (self, e))
|
logger.warning(f"{self} failed to update: {e}")
|
||||||
if self.token.user:
|
if self.token.user:
|
||||||
notify(self.token.user, "%s failed to update with your ESI token." % self, message="%s: %s" % (e.status_code, e.message), level="error")
|
notify(self.token.user, "%s failed to update with your ESI token." % self, message=f"{e.status_code}: {e.message}", level="error")
|
||||||
self.delete()
|
self.delete()
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
logger.warning("%s token character no longer in corp." % self)
|
logger.warning("%s token character no longer in corp." % self)
|
||||||
@ -99,7 +99,7 @@ class CorpStats(models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def user_count(self):
|
def user_count(self):
|
||||||
return len(set([m.main_character for m in self.members.all() if m.main_character]))
|
return len({m.main_character for m in self.members.all() if m.main_character})
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def registered_member_count(self):
|
def registered_member_count(self):
|
||||||
|
@ -243,7 +243,7 @@ class CorpMemberTestCase(TestCase):
|
|||||||
CharacterOwnership.objects.create(character=character, user=self.user, owner_hash='b')
|
CharacterOwnership.objects.create(character=character, user=self.user, owner_hash='b')
|
||||||
self.member.refresh_from_db()
|
self.member.refresh_from_db()
|
||||||
self.assertNotEqual(self.member.main_character, self.member.character)
|
self.assertNotEqual(self.member.main_character, self.member.character)
|
||||||
self.assertEquals(self.member.main_character, self.user.profile.main_character)
|
self.assertEqual(self.member.main_character, self.user.profile.main_character)
|
||||||
|
|
||||||
# test when is main
|
# test when is main
|
||||||
old_main = self.user.profile.main_character
|
old_main = self.user.profile.main_character
|
||||||
@ -274,7 +274,7 @@ class CorpMemberTestCase(TestCase):
|
|||||||
AuthUtils.connect_signals()
|
AuthUtils.connect_signals()
|
||||||
|
|
||||||
def test_portrait_url(self):
|
def test_portrait_url(self):
|
||||||
self.assertEquals(self.member.portrait_url(size=32), 'https://images.evetech.net/characters/2/portrait?size=32')
|
self.assertEqual(self.member.portrait_url(size=32), 'https://images.evetech.net/characters/2/portrait?size=32')
|
||||||
self.assertEquals(self.member.portrait_url(size=32), self.member.portrait_url_32)
|
self.assertEqual(self.member.portrait_url(size=32), self.member.portrait_url_32)
|
||||||
self.assertEquals(self.member.portrait_url(size=64), self.member.portrait_url_64)
|
self.assertEqual(self.member.portrait_url(size=64), self.member.portrait_url_64)
|
||||||
self.assertEquals(self.member.portrait_url(size=128), self.member.portrait_url_128)
|
self.assertEqual(self.member.portrait_url(size=128), self.member.portrait_url_128)
|
||||||
|
@ -10,14 +10,14 @@ from .models import EveCorporationInfo
|
|||||||
|
|
||||||
class EveEntityExistsError(forms.ValidationError):
|
class EveEntityExistsError(forms.ValidationError):
|
||||||
def __init__(self, entity_type_name, id):
|
def __init__(self, entity_type_name, id):
|
||||||
super(EveEntityExistsError, self).__init__(
|
super().__init__(
|
||||||
message='{} with ID {} already exists.'.format(entity_type_name, id))
|
message=f'{entity_type_name} with ID {id} already exists.')
|
||||||
|
|
||||||
|
|
||||||
class EveEntityNotFoundError(forms.ValidationError):
|
class EveEntityNotFoundError(forms.ValidationError):
|
||||||
def __init__(self, entity_type_name, id):
|
def __init__(self, entity_type_name, id):
|
||||||
super(EveEntityNotFoundError, self).__init__(
|
super().__init__(
|
||||||
message='{} with ID {} not found.'.format(entity_type_name, id))
|
message=f'{entity_type_name} with ID {id} not found.')
|
||||||
|
|
||||||
|
|
||||||
class EveEntityForm(forms.ModelForm):
|
class EveEntityForm(forms.ModelForm):
|
||||||
@ -170,4 +170,4 @@ class EveCharacterAdmin(admin.ModelAdmin):
|
|||||||
def get_form(self, request, obj=None, **kwargs):
|
def get_form(self, request, obj=None, **kwargs):
|
||||||
if not obj or not obj.pk:
|
if not obj or not obj.pk:
|
||||||
return EveCharacterForm
|
return EveCharacterForm
|
||||||
return super(EveCharacterAdmin, self).get_form(request, obj=obj, **kwargs)
|
return super().get_form(request, obj=obj, **kwargs)
|
||||||
|
@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
def sync_user_groups(modeladmin, request, queryset):
|
def sync_user_groups(modeladmin, request, queryset):
|
||||||
for agc in queryset:
|
for agc in queryset:
|
||||||
logger.debug("update_all_states_group_membership for {}".format(agc))
|
logger.debug(f"update_all_states_group_membership for {agc}")
|
||||||
agc.update_all_states_group_membership()
|
agc.update_all_states_group_membership()
|
||||||
|
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ class AutogroupsConfigAdmin(admin.ModelAdmin):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def get_actions(self, request):
|
def get_actions(self, request):
|
||||||
actions = super(AutogroupsConfigAdmin, self).get_actions(request)
|
actions = super().get_actions(request)
|
||||||
actions['sync_user_groups'] = (sync_user_groups,
|
actions['sync_user_groups'] = (sync_user_groups,
|
||||||
'sync_user_groups',
|
'sync_user_groups',
|
||||||
'Sync all users groups for this Autogroup Config')
|
'Sync all users groups for this Autogroup Config')
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.6 on 2017-12-23 04:30
|
# Generated by Django 1.11.6 on 2017-12-23 04:30
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -26,7 +26,7 @@ class AutogroupsConfigManager(models.Manager):
|
|||||||
for config in self.filter(states=state):
|
for config in self.filter(states=state):
|
||||||
logger.debug("in state loop")
|
logger.debug("in state loop")
|
||||||
for user in users:
|
for user in users:
|
||||||
logger.debug("in user loop for {}".format(user))
|
logger.debug(f"in user loop for {user}")
|
||||||
config.update_group_membership_for_user(user)
|
config.update_group_membership_for_user(user)
|
||||||
|
|
||||||
def update_groups_for_user(self, user: User, state: State = None):
|
def update_groups_for_user(self, user: User, state: State = None):
|
||||||
@ -81,7 +81,7 @@ class AutogroupsConfig(models.Model):
|
|||||||
objects = AutogroupsConfigManager()
|
objects = AutogroupsConfigManager()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(AutogroupsConfig, self).__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.__class__.__name__
|
return self.__class__.__name__
|
||||||
@ -111,24 +111,24 @@ class AutogroupsConfig(models.Model):
|
|||||||
group = None
|
group = None
|
||||||
try:
|
try:
|
||||||
if not self.alliance_groups or not self.user_entitled_to_groups(user):
|
if not self.alliance_groups or not self.user_entitled_to_groups(user):
|
||||||
logger.debug('User {} does not have required state for alliance group membership'.format(user))
|
logger.debug(f'User {user} does not have required state for alliance group membership')
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
alliance = user.profile.main_character.alliance
|
alliance = user.profile.main_character.alliance
|
||||||
if alliance is None:
|
if alliance is None:
|
||||||
logger.debug('User {} alliance is None, cannot update group membership'.format(user))
|
logger.debug(f'User {user} alliance is None, cannot update group membership')
|
||||||
return
|
return
|
||||||
group = self.get_alliance_group(alliance)
|
group = self.get_alliance_group(alliance)
|
||||||
except EveAllianceInfo.DoesNotExist:
|
except EveAllianceInfo.DoesNotExist:
|
||||||
logger.debug('User {} main characters alliance does not exist in the database. Creating.'.format(user))
|
logger.debug(f'User {user} main characters alliance does not exist in the database. Creating.')
|
||||||
alliance = EveAllianceInfo.objects.create_alliance(user.profile.main_character.alliance_id)
|
alliance = EveAllianceInfo.objects.create_alliance(user.profile.main_character.alliance_id)
|
||||||
group = self.get_alliance_group(alliance)
|
group = self.get_alliance_group(alliance)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
logger.warning('User {} does not have a main character. Group membership not updated'.format(user))
|
logger.warning(f'User {user} does not have a main character. Group membership not updated')
|
||||||
finally:
|
finally:
|
||||||
self.remove_user_from_alliance_groups(user, except_group=group)
|
self.remove_user_from_alliance_groups(user, except_group=group)
|
||||||
if group is not None:
|
if group is not None:
|
||||||
logger.debug('Adding user {} to alliance group {}'.format(user, group))
|
logger.debug(f'Adding user {user} to alliance group {group}')
|
||||||
user.groups.add(group)
|
user.groups.add(group)
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
@ -136,20 +136,20 @@ class AutogroupsConfig(models.Model):
|
|||||||
group = None
|
group = None
|
||||||
try:
|
try:
|
||||||
if not self.corp_groups or not self.user_entitled_to_groups(user):
|
if not self.corp_groups or not self.user_entitled_to_groups(user):
|
||||||
logger.debug('User {} does not have required state for corp group membership'.format(user))
|
logger.debug(f'User {user} does not have required state for corp group membership')
|
||||||
else:
|
else:
|
||||||
corp = user.profile.main_character.corporation
|
corp = user.profile.main_character.corporation
|
||||||
group = self.get_corp_group(corp)
|
group = self.get_corp_group(corp)
|
||||||
except EveCorporationInfo.DoesNotExist:
|
except EveCorporationInfo.DoesNotExist:
|
||||||
logger.debug('User {} main characters corporation does not exist in the database. Creating.'.format(user))
|
logger.debug(f'User {user} main characters corporation does not exist in the database. Creating.')
|
||||||
corp = EveCorporationInfo.objects.create_corporation(user.profile.main_character.corporation_id)
|
corp = EveCorporationInfo.objects.create_corporation(user.profile.main_character.corporation_id)
|
||||||
group = self.get_corp_group(corp)
|
group = self.get_corp_group(corp)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
logger.warning('User {} does not have a main character. Group membership not updated'.format(user))
|
logger.warning(f'User {user} does not have a main character. Group membership not updated')
|
||||||
finally:
|
finally:
|
||||||
self.remove_user_from_corp_groups(user, except_group=group)
|
self.remove_user_from_corp_groups(user, except_group=group)
|
||||||
if group is not None:
|
if group is not None:
|
||||||
logger.debug('Adding user {} to corp group {}'.format(user, group))
|
logger.debug(f'Adding user {user} to corp group {group}')
|
||||||
user.groups.add(group)
|
user.groups.add(group)
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
@ -15,7 +15,7 @@ def pre_save_config(sender, instance, *args, **kwargs):
|
|||||||
Checks if enable was toggled on group config and
|
Checks if enable was toggled on group config and
|
||||||
deletes groups if necessary.
|
deletes groups if necessary.
|
||||||
"""
|
"""
|
||||||
logger.debug("Received pre_save from {}".format(instance))
|
logger.debug(f"Received pre_save from {instance}")
|
||||||
if not instance.pk:
|
if not instance.pk:
|
||||||
# new model being created
|
# new model being created
|
||||||
return
|
return
|
||||||
|
@ -9,7 +9,7 @@ MODULE_PATH = 'allianceauth.eveonline.autogroups'
|
|||||||
|
|
||||||
|
|
||||||
def patch(target, *args, **kwargs):
|
def patch(target, *args, **kwargs):
|
||||||
return mock.patch('{}{}'.format(MODULE_PATH, target), *args, **kwargs)
|
return mock.patch(f'{MODULE_PATH}{target}', *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def connect_signals():
|
def connect_signals():
|
||||||
|
@ -56,15 +56,15 @@ def _eve_entity_image_url(
|
|||||||
tenants = ['tranquility', 'singularity']
|
tenants = ['tranquility', 'singularity']
|
||||||
|
|
||||||
if not entity_id:
|
if not entity_id:
|
||||||
raise ValueError('Invalid entity_id: {}'.format(entity_id))
|
raise ValueError(f'Invalid entity_id: {entity_id}')
|
||||||
else:
|
else:
|
||||||
entity_id = int(entity_id)
|
entity_id = int(entity_id)
|
||||||
|
|
||||||
if not size or size < 32 or size > 1024 or (size & (size - 1) != 0):
|
if not size or size < 32 or size > 1024 or (size & (size - 1) != 0):
|
||||||
raise ValueError('Invalid size: {}'.format(size))
|
raise ValueError(f'Invalid size: {size}')
|
||||||
|
|
||||||
if category not in categories:
|
if category not in categories:
|
||||||
raise ValueError('Invalid category {}'.format(category))
|
raise ValueError(f'Invalid category {category}')
|
||||||
else:
|
else:
|
||||||
endpoint = categories[category]['endpoint']
|
endpoint = categories[category]['endpoint']
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ def _eve_entity_image_url(
|
|||||||
variant = categories[category]['variants'][0]
|
variant = categories[category]['variants'][0]
|
||||||
|
|
||||||
if tenant and tenant not in tenants:
|
if tenant and tenant not in tenants:
|
||||||
raise ValueError('Invalid tenant {}'.format(tenant))
|
raise ValueError(f'Invalid tenant {tenant}')
|
||||||
|
|
||||||
# compose result URL
|
# compose result URL
|
||||||
result = '{}/{}/{}/{}?size={}'.format(
|
result = '{}/{}/{}/{}?size={}'.format(
|
||||||
@ -89,7 +89,7 @@ def _eve_entity_image_url(
|
|||||||
size
|
size
|
||||||
)
|
)
|
||||||
if tenant:
|
if tenant:
|
||||||
result += '&tenant={}'.format(tenant)
|
result += f'&tenant={tenant}'
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ def _build_url(category: str, eve_id: int) -> str:
|
|||||||
|
|
||||||
url = urljoin(
|
url = urljoin(
|
||||||
_BASE_URL,
|
_BASE_URL,
|
||||||
'{}/{}'.format(partial, int(eve_id))
|
f'{partial}/{int(eve_id)}'
|
||||||
)
|
)
|
||||||
return url
|
return url
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ def _build_url(category: str, eve_id: int) -> str:
|
|||||||
|
|
||||||
url = urljoin(
|
url = urljoin(
|
||||||
_BASE_URL,
|
_BASE_URL,
|
||||||
'{}/{}/'.format(partial, int(eve_id))
|
f'{partial}/{int(eve_id)}/'
|
||||||
)
|
)
|
||||||
return url
|
return url
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-10 20:20
|
# Generated by Django 1.10.1 on 2016-09-10 20:20
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-10-26 01:49
|
# Generated by Django 1.10.2 on 2016-10-26 01:49
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-11-01 04:20
|
# Generated by Django 1.10.2 on 2016-11-01 04:20
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-12-16 23:22
|
# Generated by Django 1.10.1 on 2016-12-16 23:22
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2017-01-02 19:23
|
# Generated by Django 1.10.1 on 2017-01-02 19:23
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-01-18 13:20
|
# Generated by Django 1.10.5 on 2017-01-18 13:20
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
def get_duplicates(items):
|
def get_duplicates(items):
|
||||||
return set([item for item in items if items.count(item) > 1])
|
return {item for item in items if items.count(item) > 1}
|
||||||
|
|
||||||
|
|
||||||
def enforce_unique_characters(apps, schema_editor):
|
def enforce_unique_characters(apps, schema_editor):
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:09
|
# Generated by Django 1.10.5 on 2017-03-22 23:09
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -34,10 +34,10 @@ class ObjectNotFound(Exception):
|
|||||||
self.type = type_name
|
self.type = type_name
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '%s with ID %s not found.' % (self.type, self.id)
|
return f'{self.type} with ID {self.id} not found.'
|
||||||
|
|
||||||
|
|
||||||
class Entity(object):
|
class Entity:
|
||||||
def __init__(self, id=None, name=None):
|
def __init__(self, id=None, name=None):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.name = name
|
self.name = name
|
||||||
@ -46,7 +46,7 @@ class Entity(object):
|
|||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<{} ({}): {}>".format(self.__class__.__name__, self.id, self.name)
|
return f"<{self.__class__.__name__} ({self.id}): {self.name}>"
|
||||||
|
|
||||||
def __bool__(self):
|
def __bool__(self):
|
||||||
return bool(self.id)
|
return bool(self.id)
|
||||||
@ -57,7 +57,7 @@ class Entity(object):
|
|||||||
|
|
||||||
class Corporation(Entity):
|
class Corporation(Entity):
|
||||||
def __init__(self, ticker=None, ceo_id=None, members=None, alliance_id=None, **kwargs):
|
def __init__(self, ticker=None, ceo_id=None, members=None, alliance_id=None, **kwargs):
|
||||||
super(Corporation, self).__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.ticker = ticker
|
self.ticker = ticker
|
||||||
self.ceo_id = ceo_id
|
self.ceo_id = ceo_id
|
||||||
self.members = members
|
self.members = members
|
||||||
@ -82,7 +82,7 @@ class Corporation(Entity):
|
|||||||
|
|
||||||
class Alliance(Entity):
|
class Alliance(Entity):
|
||||||
def __init__(self, ticker=None, corp_ids=None, executor_corp_id=None, **kwargs):
|
def __init__(self, ticker=None, corp_ids=None, executor_corp_id=None, **kwargs):
|
||||||
super(Alliance, self).__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.ticker = ticker
|
self.ticker = ticker
|
||||||
self.corp_ids = corp_ids
|
self.corp_ids = corp_ids
|
||||||
self.executor_corp_id = executor_corp_id
|
self.executor_corp_id = executor_corp_id
|
||||||
@ -97,7 +97,7 @@ class Alliance(Entity):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def corps(self):
|
def corps(self):
|
||||||
return sorted([self.corp(c_id) for c_id in self.corp_ids], key=lambda x: x.name)
|
return sorted((self.corp(c_id) for c_id in self.corp_ids), key=lambda x: x.name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def executor_corp(self):
|
def executor_corp(self):
|
||||||
@ -108,7 +108,7 @@ class Alliance(Entity):
|
|||||||
|
|
||||||
class Character(Entity):
|
class Character(Entity):
|
||||||
def __init__(self, corp_id=None, alliance_id=None, **kwargs):
|
def __init__(self, corp_id=None, alliance_id=None, **kwargs):
|
||||||
super(Character, self).__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.corp_id = corp_id
|
self.corp_id = corp_id
|
||||||
self.alliance_id = alliance_id
|
self.alliance_id = alliance_id
|
||||||
self._corp = None
|
self._corp = None
|
||||||
@ -129,10 +129,10 @@ class Character(Entity):
|
|||||||
|
|
||||||
class ItemType(Entity):
|
class ItemType(Entity):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super(ItemType, self).__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class EveProvider(object):
|
class EveProvider:
|
||||||
def get_alliance(self, alliance_id):
|
def get_alliance(self, alliance_id):
|
||||||
"""
|
"""
|
||||||
:return: an Alliance object for the given ID
|
:return: an Alliance object for the given ID
|
||||||
|
@ -18,7 +18,7 @@ def set_logger(logger_name: str, name: str) -> object:
|
|||||||
'%(asctime)s - %(levelname)s - %(module)s:%(funcName)s - %(message)s'
|
'%(asctime)s - %(levelname)s - %(module)s:%(funcName)s - %(message)s'
|
||||||
)
|
)
|
||||||
f_handler = logging.FileHandler(
|
f_handler = logging.FileHandler(
|
||||||
'{}.log'.format(os.path.splitext(name)[0]),
|
f'{os.path.splitext(name)[0]}.log',
|
||||||
'w+'
|
'w+'
|
||||||
)
|
)
|
||||||
f_handler.setFormatter(f_format)
|
f_handler.setFormatter(f_format)
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from allianceauth.fleetactivitytracking.models import Fatlink, Fat
|
from allianceauth.fleetactivitytracking.models import Fatlink, Fat
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -54,6 +53,6 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='fat',
|
name='fat',
|
||||||
unique_together=set([('character', 'fatlink')]),
|
unique_together={('character', 'fatlink')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 22:20
|
# Generated by Django 1.10.1 on 2016-09-05 22:20
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-06 23:54
|
# Generated by Django 1.10.1 on 2016-09-06 23:54
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ get_universe_structures_structure_id
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CorpStat(object):
|
class CorpStat:
|
||||||
def __init__(self, corp_id, start_of_month, start_of_next_month, corp=None):
|
def __init__(self, corp_id, start_of_month, start_of_next_month, corp=None):
|
||||||
if corp:
|
if corp:
|
||||||
self.corp = corp
|
self.corp = corp
|
||||||
@ -53,7 +53,7 @@ class CorpStat(object):
|
|||||||
return "%.2f" % 0
|
return "%.2f" % 0
|
||||||
|
|
||||||
|
|
||||||
class MemberStat(object):
|
class MemberStat:
|
||||||
def __init__(self, member, start_of_month, start_of_next_month, mainchid=None):
|
def __init__(self, member, start_of_month, start_of_next_month, mainchid=None):
|
||||||
if mainchid:
|
if mainchid:
|
||||||
self.mainchid = mainchid
|
self.mainchid = mainchid
|
||||||
@ -215,7 +215,7 @@ def fatlink_monthly_personal_statistics_view(request, year, month, char_id=None)
|
|||||||
user = EveCharacter.objects.get(character_id=char_id).user
|
user = EveCharacter.objects.get(character_id=char_id).user
|
||||||
else:
|
else:
|
||||||
user = request.user
|
user = request.user
|
||||||
logger.debug("Personal monthly statistics view for user %s called by %s" % (user, request.user))
|
logger.debug(f"Personal monthly statistics view for user {user} called by {request.user}")
|
||||||
|
|
||||||
personal_fats = Fat.objects.filter(user=user)\
|
personal_fats = Fat.objects.filter(user=user)\
|
||||||
.filter(fatlink__fatdatetime__gte=start_of_month).filter(fatlink__fatdatetime__lt=start_of_next_month)
|
.filter(fatlink__fatdatetime__gte=start_of_month).filter(fatlink__fatdatetime__lt=start_of_next_month)
|
||||||
@ -347,7 +347,7 @@ def modify_fatlink_view(request, fat_hash=None):
|
|||||||
if request.GET.get('removechar', None):
|
if request.GET.get('removechar', None):
|
||||||
character_id = request.GET.get('removechar')
|
character_id = request.GET.get('removechar')
|
||||||
character = EveCharacter.objects.get(character_id=character_id)
|
character = EveCharacter.objects.get(character_id=character_id)
|
||||||
logger.debug("Removing character %s from fleetactivitytracking %s" % (character.character_name, fatlink))
|
logger.debug(f"Removing character {character.character_name} from fleetactivitytracking {fatlink}")
|
||||||
|
|
||||||
Fat.objects.filter(fatlink=fatlink).filter(character=character).delete()
|
Fat.objects.filter(fatlink=fatlink).filter(character=character).delete()
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-06 23:54
|
# Generated by Django 1.10.1 on 2016-09-06 23:54
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-09 23:22
|
# Generated by Django 1.10.1 on 2016-09-09 23:22
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-12-04 10:25
|
# Generated by Django 1.10.2 on 2016-12-04 10:25
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-02-04 06:11
|
# Generated by Django 1.10.5 on 2017-02-04 06:11
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-02-04 07:17
|
# Generated by Django 1.10.5 on 2017-02-04 07:17
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import django.contrib.auth.models
|
import django.contrib.auth.models
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.10 on 2018-02-23 23:09
|
# Generated by Django 1.11.10 on 2018-02-23 23:09
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ class AuthGroup(models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
("request_groups", u"Can request non-public groups"),
|
("request_groups", "Can request non-public groups"),
|
||||||
)
|
)
|
||||||
default_permissions = tuple()
|
default_permissions = tuple()
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ logger = logging.getLogger(__name__)
|
|||||||
@receiver(state_changed)
|
@receiver(state_changed)
|
||||||
def check_groups_on_state_change(sender, user, state, **kwargs):
|
def check_groups_on_state_change(sender, user, state, **kwargs):
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"Checking group memberships for %s based on new state %s" % (user, state)
|
f"Checking group memberships for {user} based on new state {state}"
|
||||||
)
|
)
|
||||||
state_groups = (
|
state_groups = (
|
||||||
user.groups.select_related("authgroup").exclude(authgroup__states=None)
|
user.groups.select_related("authgroup").exclude(authgroup__states=None)
|
||||||
@ -17,6 +17,6 @@ def check_groups_on_state_change(sender, user, state, **kwargs):
|
|||||||
for group in state_groups:
|
for group in state_groups:
|
||||||
if not group.authgroup.states.filter(id=state.id).exists():
|
if not group.authgroup.states.filter(id=state.id).exists():
|
||||||
logger.info(
|
logger.info(
|
||||||
"Removing user %s from group %s due to missing state" % (user, group)
|
f"Removing user {user} from group {group} due to missing state"
|
||||||
)
|
)
|
||||||
user.groups.remove(group)
|
user.groups.remove(group)
|
||||||
|
@ -25,7 +25,7 @@ else:
|
|||||||
MODULE_PATH = 'allianceauth.groupmanagement.admin'
|
MODULE_PATH = 'allianceauth.groupmanagement.admin'
|
||||||
|
|
||||||
|
|
||||||
class MockRequest(object):
|
class MockRequest:
|
||||||
|
|
||||||
def __init__(self, user=None):
|
def __init__(self, user=None):
|
||||||
self.user = user
|
self.user = user
|
||||||
|
@ -42,7 +42,7 @@ def group_management(request):
|
|||||||
else:
|
else:
|
||||||
acceptrequests.append(grouprequest)
|
acceptrequests.append(grouprequest)
|
||||||
|
|
||||||
logger.debug("Providing user %s with %s acceptrequests and %s leaverequests." % (
|
logger.debug("Providing user {} with {} acceptrequests and {} leaverequests.".format(
|
||||||
request.user, len(acceptrequests), len(leaverequests)))
|
request.user, len(acceptrequests), len(leaverequests)))
|
||||||
|
|
||||||
render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests}
|
render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests}
|
||||||
@ -78,7 +78,7 @@ def group_membership_audit(request, group_id):
|
|||||||
# Check its a joinable group i.e. not corp or internal
|
# Check its a joinable group i.e. not corp or internal
|
||||||
# And the user has permission to manage it
|
# And the user has permission to manage it
|
||||||
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group):
|
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group):
|
||||||
logger.warning("User %s attempted to view the membership of group %s but permission was denied" % (request.user, group_id))
|
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:
|
||||||
@ -139,13 +139,13 @@ def group_membership_list(request, group_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(GroupManager.can_manage_groups)
|
@user_passes_test(GroupManager.can_manage_groups)
|
||||||
def group_membership_remove(request, group_id, user_id):
|
def group_membership_remove(request, group_id, user_id):
|
||||||
logger.debug("group_membership_remove called by user %s for group id %s on user id %s" % (request.user, group_id, user_id))
|
logger.debug(f"group_membership_remove called by user {request.user} for group id {group_id} on user id {user_id}")
|
||||||
group = get_object_or_404(Group, id=group_id)
|
group = get_object_or_404(Group, id=group_id)
|
||||||
try:
|
try:
|
||||||
# Check its a joinable group i.e. not corp or internal
|
# Check its a joinable group i.e. not corp or internal
|
||||||
# And the user has permission to manage it
|
# And the user has permission to manage it
|
||||||
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group):
|
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group):
|
||||||
logger.warning("User %s attempted to remove a user from group %s but permission was denied" % (request.user, group_id))
|
logger.warning(f"User {request.user} attempted to remove a user from group {group_id} but permission was denied")
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -155,7 +155,7 @@ def group_membership_remove(request, group_id, user_id):
|
|||||||
log.save()
|
log.save()
|
||||||
# Remove group from user
|
# Remove group from user
|
||||||
user.groups.remove(group)
|
user.groups.remove(group)
|
||||||
logger.info("User %s removed user %s from group %s" % (request.user, user, group))
|
logger.info(f"User {request.user} removed user {user} from group {group}")
|
||||||
messages.success(request, _("Removed user %(user)s from group %(group)s.") % {"user": user, "group": group})
|
messages.success(request, _("Removed user %(user)s from group %(group)s.") % {"user": user, "group": group})
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
messages.warning(request, _("User does not exist in that group"))
|
messages.warning(request, _("User does not exist in that group"))
|
||||||
@ -169,7 +169,7 @@ def group_membership_remove(request, group_id, user_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(GroupManager.can_manage_groups)
|
@user_passes_test(GroupManager.can_manage_groups)
|
||||||
def group_accept_request(request, group_request_id):
|
def group_accept_request(request, group_request_id):
|
||||||
logger.debug("group_accept_request called by user %s for grouprequest id %s" % (request.user, group_request_id))
|
logger.debug(f"group_accept_request called by user {request.user} for grouprequest id {group_request_id}")
|
||||||
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
||||||
try:
|
try:
|
||||||
group, created = Group.objects.get_or_create(name=group_request.group.name)
|
group, created = Group.objects.get_or_create(name=group_request.group.name)
|
||||||
@ -183,7 +183,7 @@ def group_accept_request(request, group_request_id):
|
|||||||
log = RequestLog(request_type=group_request.leave_request,group=group,request_info=group_request.__str__(),action=1,request_actor=request.user)
|
log = RequestLog(request_type=group_request.leave_request,group=group,request_info=group_request.__str__(),action=1,request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
group_request.delete()
|
group_request.delete()
|
||||||
logger.info("User %s accepted group request from user %s to group %s" % (
|
logger.info("User {} accepted group request from user {} to group {}".format(
|
||||||
request.user, group_request.user, group_request.group.name))
|
request.user, group_request.user, group_request.group.name))
|
||||||
notify(group_request.user, "Group Application Accepted", level="success",
|
notify(group_request.user, "Group Application Accepted", level="success",
|
||||||
message="Your application to %s has been accepted." % group_request.group)
|
message="Your application to %s has been accepted." % group_request.group)
|
||||||
@ -191,11 +191,11 @@ def group_accept_request(request, group_request_id):
|
|||||||
_('Accepted application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
_('Accepted application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
|
|
||||||
except PermissionDenied as p:
|
except PermissionDenied as p:
|
||||||
logger.warning("User %s attempted to accept group join request %s but permission was denied" % (request.user, group_request_id))
|
logger.warning(f"User {request.user} attempted to accept group join request {group_request_id} but permission was denied")
|
||||||
raise p
|
raise p
|
||||||
except:
|
except:
|
||||||
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
logger.exception("Unhandled exception occurred while user %s attempting to accept grouprequest id %s." % (
|
logger.exception("Unhandled exception occurred while user {} attempting to accept grouprequest id {}.".format(
|
||||||
request.user, group_request_id))
|
request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -205,14 +205,14 @@ def group_accept_request(request, group_request_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(GroupManager.can_manage_groups)
|
@user_passes_test(GroupManager.can_manage_groups)
|
||||||
def group_reject_request(request, group_request_id):
|
def group_reject_request(request, group_request_id):
|
||||||
logger.debug("group_reject_request called by user %s for group request id %s" % (request.user, group_request_id))
|
logger.debug(f"group_reject_request called by user {request.user} for group request id {group_request_id}")
|
||||||
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
||||||
try:
|
try:
|
||||||
if not GroupManager.can_manage_group(request.user, group_request.group):
|
if not GroupManager.can_manage_group(request.user, group_request.group):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
if group_request:
|
if group_request:
|
||||||
logger.info("User %s rejected group request from user %s to group %s" % (
|
logger.info("User {} rejected group request from user {} to group {}".format(
|
||||||
request.user, group_request.user, group_request.group.name))
|
request.user, group_request.user, group_request.group.name))
|
||||||
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user)
|
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
@ -222,11 +222,11 @@ def group_reject_request(request, group_request_id):
|
|||||||
_('Rejected application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
_('Rejected application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
|
|
||||||
except PermissionDenied as p:
|
except PermissionDenied as p:
|
||||||
logger.warning("User %s attempted to reject group join request %s but permission was denied" % (request.user, group_request_id))
|
logger.warning(f"User {request.user} attempted to reject group join request {group_request_id} but permission was denied")
|
||||||
raise p
|
raise p
|
||||||
except:
|
except:
|
||||||
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
logger.exception("Unhandled exception occurred while user %s attempting to reject group request id %s" % (
|
logger.exception("Unhandled exception occurred while user {} attempting to reject group request id {}".format(
|
||||||
request.user, group_request_id))
|
request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ def group_reject_request(request, group_request_id):
|
|||||||
@user_passes_test(GroupManager.can_manage_groups)
|
@user_passes_test(GroupManager.can_manage_groups)
|
||||||
def group_leave_accept_request(request, group_request_id):
|
def group_leave_accept_request(request, group_request_id):
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"group_leave_accept_request called by user %s for group request id %s" % (request.user, group_request_id))
|
f"group_leave_accept_request called by user {request.user} for group request id {group_request_id}")
|
||||||
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
||||||
try:
|
try:
|
||||||
if not GroupManager.can_manage_group(request.user, group_request.group):
|
if not GroupManager.can_manage_group(request.user, group_request.group):
|
||||||
@ -249,19 +249,19 @@ def group_leave_accept_request(request, group_request_id):
|
|||||||
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=1,request_actor=request.user)
|
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=1,request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
group_request.delete()
|
group_request.delete()
|
||||||
logger.info("User %s accepted group leave request from user %s to group %s" % (
|
logger.info("User {} accepted group leave request from user {} to group {}".format(
|
||||||
request.user, group_request.user, group_request.group.name))
|
request.user, group_request.user, group_request.group.name))
|
||||||
notify(group_request.user, "Group Leave Request Accepted", level="success",
|
notify(group_request.user, "Group Leave Request Accepted", level="success",
|
||||||
message="Your request to leave %s has been accepted." % group_request.group)
|
message="Your request to leave %s has been accepted." % group_request.group)
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Accepted application from %(mainchar)s to leave %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
_('Accepted application from %(mainchar)s to leave %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
except PermissionDenied as p:
|
except PermissionDenied as p:
|
||||||
logger.warning("User %s attempted to accept group leave request %s but permission was denied" % (request.user, group_request_id))
|
logger.warning(f"User {request.user} attempted to accept group leave request {group_request_id} but permission was denied")
|
||||||
raise p
|
raise p
|
||||||
except:
|
except:
|
||||||
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % {
|
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % {
|
||||||
"mainchar": group_request.main_char, "group": group_request.group})
|
"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
logger.exception("Unhandled exception occurred while user %s attempting to accept group leave request id %s" % (
|
logger.exception("Unhandled exception occurred while user {} attempting to accept group leave request id {}".format(
|
||||||
request.user, group_request_id))
|
request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ def group_leave_accept_request(request, group_request_id):
|
|||||||
@user_passes_test(GroupManager.can_manage_groups)
|
@user_passes_test(GroupManager.can_manage_groups)
|
||||||
def group_leave_reject_request(request, group_request_id):
|
def group_leave_reject_request(request, group_request_id):
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"group_leave_reject_request called by user %s for group request id %s" % (request.user, group_request_id))
|
f"group_leave_reject_request called by user {request.user} for group request id {group_request_id}")
|
||||||
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
group_request = get_object_or_404(GroupRequest, id=group_request_id)
|
||||||
try:
|
try:
|
||||||
if not GroupManager.can_manage_group(request.user, group_request.group):
|
if not GroupManager.can_manage_group(request.user, group_request.group):
|
||||||
@ -282,18 +282,18 @@ def group_leave_reject_request(request, group_request_id):
|
|||||||
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user)
|
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
group_request.delete()
|
group_request.delete()
|
||||||
logger.info("User %s rejected group leave request from user %s for group %s" % (
|
logger.info("User {} rejected group leave request from user {} for group {}".format(
|
||||||
request.user, group_request.user, group_request.group.name))
|
request.user, group_request.user, group_request.group.name))
|
||||||
notify(group_request.user, "Group Leave Request Rejected", level="danger", message="Your request to leave %s has been rejected." % group_request.group)
|
notify(group_request.user, "Group Leave Request Rejected", level="danger", message="Your request to leave %s has been rejected." % group_request.group)
|
||||||
messages.success(request, _('Rejected application from %(mainchar)s to leave %(group)s.') % {
|
messages.success(request, _('Rejected application from %(mainchar)s to leave %(group)s.') % {
|
||||||
"mainchar": group_request.main_char, "group": group_request.group})
|
"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
except PermissionDenied as p:
|
except PermissionDenied as p:
|
||||||
logger.warning("User %s attempted to reject group leave request %s but permission was denied" % (request.user, group_request_id))
|
logger.warning(f"User {request.user} attempted to reject group leave request {group_request_id} but permission was denied")
|
||||||
raise p
|
raise p
|
||||||
except:
|
except:
|
||||||
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % {
|
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % {
|
||||||
"mainchar": group_request.main_char, "group": group_request.group})
|
"mainchar": group_request.main_char, "group": group_request.group})
|
||||||
logger.exception("Unhandled exception occurred while user %s attempting to reject group leave request id %s" % (
|
logger.exception("Unhandled exception occurred while user {} attempting to reject group leave request id {}".format(
|
||||||
request.user, group_request_id))
|
request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -324,25 +324,25 @@ def groups_view(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_request_add(request, group_id):
|
def group_request_add(request, group_id):
|
||||||
logger.debug("group_request_add called by user %s for group id %s" % (request.user, group_id))
|
logger.debug(f"group_request_add called by user {request.user} for group id {group_id}")
|
||||||
group = Group.objects.get(id=group_id)
|
group = Group.objects.get(id=group_id)
|
||||||
state = request.user.profile.state
|
state = request.user.profile.state
|
||||||
if not GroupManager.joinable_group(group, state):
|
if not GroupManager.joinable_group(group, state):
|
||||||
logger.warning("User %s attempted to join group id %s but it is not a joinable group" % (request.user, group_id))
|
logger.warning(f"User {request.user} attempted to join group id {group_id} but it is not a joinable group")
|
||||||
messages.warning(request, _("You cannot join that group"))
|
messages.warning(request, _("You cannot join that group"))
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
if group in request.user.groups.all():
|
if group in request.user.groups.all():
|
||||||
# User is already a member of this group.
|
# User is already a member of this group.
|
||||||
logger.warning("User %s attempted to join group id %s but they are already a member." % (request.user, group_id))
|
logger.warning(f"User {request.user} attempted to join group id {group_id} but they are already a member.")
|
||||||
messages.warning(request, _("You are already a member of that group."))
|
messages.warning(request, _("You are already a member of that group."))
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
if not request.user.has_perm('groupmanagement.request_groups') and not group.authgroup.public:
|
if not request.user.has_perm('groupmanagement.request_groups') and not group.authgroup.public:
|
||||||
# Does not have the required permission, trying to join a non-public group
|
# Does not have the required permission, trying to join a non-public group
|
||||||
logger.warning("User %s attempted to join group id %s but it is not a public group" % (request.user, group_id))
|
logger.warning(f"User {request.user} attempted to join group id {group_id} but it is not a public group")
|
||||||
messages.warning(request, _("You cannot join that group"))
|
messages.warning(request, _("You cannot join that group"))
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
if group.authgroup.open:
|
if group.authgroup.open:
|
||||||
logger.info("%s joining %s as is an open group" % (request.user, group))
|
logger.info(f"{request.user} joining {group} as is an open group")
|
||||||
request.user.groups.add(group)
|
request.user.groups.add(group)
|
||||||
request_info = request.user.username + ":" + group.name
|
request_info = request.user.username + ":" + group.name
|
||||||
log = RequestLog(request_type=False, group=group, request_info=request_info, action=1, request_actor=request.user)
|
log = RequestLog(request_type=False, group=group, request_info=request_info, action=1, request_actor=request.user)
|
||||||
@ -350,7 +350,7 @@ def group_request_add(request, group_id):
|
|||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
req = GroupRequest.objects.filter(user=request.user, group=group)
|
req = GroupRequest.objects.filter(user=request.user, group=group)
|
||||||
if len(req) > 0:
|
if len(req) > 0:
|
||||||
logger.info("%s attempted to join %s but already has an open application" % (request.user, group))
|
logger.info(f"{request.user} attempted to join {group} but already has an open application")
|
||||||
messages.warning(request, _("You already have a pending application for that group."))
|
messages.warning(request, _("You already have a pending application for that group."))
|
||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
grouprequest = GroupRequest()
|
grouprequest = GroupRequest()
|
||||||
@ -359,25 +359,25 @@ def group_request_add(request, group_id):
|
|||||||
grouprequest.user = request.user
|
grouprequest.user = request.user
|
||||||
grouprequest.leave_request = False
|
grouprequest.leave_request = False
|
||||||
grouprequest.save()
|
grouprequest.save()
|
||||||
logger.info("Created group request for user %s to group %s" % (request.user, Group.objects.get(id=group_id)))
|
logger.info(f"Created group request for user {request.user} to group {Group.objects.get(id=group_id)}")
|
||||||
messages.success(request, _('Applied to group %(group)s.') % {"group": group})
|
messages.success(request, _('Applied to group %(group)s.') % {"group": group})
|
||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_request_leave(request, group_id):
|
def group_request_leave(request, group_id):
|
||||||
logger.debug("group_request_leave called by user %s for group id %s" % (request.user, group_id))
|
logger.debug(f"group_request_leave called by user {request.user} for group id {group_id}")
|
||||||
group = Group.objects.get(id=group_id)
|
group = Group.objects.get(id=group_id)
|
||||||
if not GroupManager.check_internal_group(group):
|
if not GroupManager.check_internal_group(group):
|
||||||
logger.warning("User %s attempted to leave group id %s but it is not a joinable group" % (request.user, group_id))
|
logger.warning(f"User {request.user} attempted to leave group id {group_id} but it is not a joinable group")
|
||||||
messages.warning(request, _("You cannot leave that group"))
|
messages.warning(request, _("You cannot leave that group"))
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
if group not in request.user.groups.all():
|
if group not in request.user.groups.all():
|
||||||
logger.debug("User %s attempted to leave group id %s but they are not a member" % (request.user, group_id))
|
logger.debug(f"User {request.user} attempted to leave group id {group_id} but they are not a member")
|
||||||
messages.warning(request, _("You are not a member of that group"))
|
messages.warning(request, _("You are not a member of that group"))
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
if group.authgroup.open:
|
if group.authgroup.open:
|
||||||
logger.info("%s leaving %s as is an open group" % (request.user, group))
|
logger.info(f"{request.user} leaving {group} as is an open group")
|
||||||
request_info = request.user.username + ":" + group.name
|
request_info = request.user.username + ":" + group.name
|
||||||
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
|
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
@ -385,11 +385,11 @@ def group_request_leave(request, group_id):
|
|||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
req = GroupRequest.objects.filter(user=request.user, group=group)
|
req = GroupRequest.objects.filter(user=request.user, group=group)
|
||||||
if len(req) > 0:
|
if len(req) > 0:
|
||||||
logger.info("%s attempted to leave %s but already has an pending leave request." % (request.user, group))
|
logger.info(f"{request.user} attempted to leave {group} but already has an pending leave request.")
|
||||||
messages.warning(request, _("You already have a pending leave request for that group."))
|
messages.warning(request, _("You already have a pending leave request for that group."))
|
||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
if getattr(settings, 'AUTO_LEAVE', False):
|
if getattr(settings, 'AUTO_LEAVE', False):
|
||||||
logger.info("%s leaving joinable group %s due to auto_leave" % (request.user, group))
|
logger.info(f"{request.user} leaving joinable group {group} due to auto_leave")
|
||||||
request_info = request.user.username + ":" + group.name
|
request_info = request.user.username + ":" + group.name
|
||||||
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
|
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
|
||||||
log.save()
|
log.save()
|
||||||
@ -401,6 +401,6 @@ def group_request_leave(request, group_id):
|
|||||||
grouprequest.user = request.user
|
grouprequest.user = request.user
|
||||||
grouprequest.leave_request = True
|
grouprequest.leave_request = True
|
||||||
grouprequest.save()
|
grouprequest.save()
|
||||||
logger.info("Created group leave request for user %s to group %s" % (request.user, Group.objects.get(id=group_id)))
|
logger.info(f"Created group leave request for user {request.user} to group {Group.objects.get(id=group_id)}")
|
||||||
messages.success(request, _('Applied to leave group %(group)s.') % {"group": group})
|
messages.success(request, _('Applied to leave group %(group)s.') % {"group": group})
|
||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
|
@ -67,7 +67,7 @@ def register(name, fn=None):
|
|||||||
logger.debug("Creating new hook %s" % name)
|
logger.debug("Creating new hook %s" % name)
|
||||||
_hooks[name] = []
|
_hooks[name] = []
|
||||||
|
|
||||||
logger.debug('Registering hook %s for function %s' % (name, fn))
|
logger.debug(f'Registering hook {name} for function {fn}')
|
||||||
_hooks[name].append(func)
|
_hooks[name].append(func)
|
||||||
|
|
||||||
if fn is None:
|
if fn is None:
|
||||||
@ -98,7 +98,7 @@ def get_app_submodules(module_name):
|
|||||||
"""
|
"""
|
||||||
for name, module in get_app_modules():
|
for name, module in get_app_modules():
|
||||||
if module_has_submodule(module, module_name):
|
if module_has_submodule(module, module_name):
|
||||||
yield name, import_module('{0}.{1}'.format(name, module_name))
|
yield name, import_module(f'{name}.{module_name}')
|
||||||
|
|
||||||
|
|
||||||
def register_all_hooks():
|
def register_all_hooks():
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
# Generated by Django 1.10.1 on 2016-09-05 21:39
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
@ -117,10 +116,10 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='applicationresponse',
|
name='applicationresponse',
|
||||||
unique_together=set([('question', 'application')]),
|
unique_together={('question', 'application')},
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='application',
|
name='application',
|
||||||
unique_together=set([('form', 'user')]),
|
unique_together={('form', 'user')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.4 on 2017-08-23 19:46
|
# Generated by Django 1.11.4 on 2017-08-23 19:46
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10 on 2017-10-20 13:51
|
# Generated by Django 1.10 on 2017-10-20 13:51
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-27 03:29
|
# Generated by Django 1.10.5 on 2017-03-27 03:29
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
import sortedm2m.fields
|
import sortedm2m.fields
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.2 on 2017-06-08 02:54
|
# Generated by Django 1.11.2 on 2017-06-08 02:54
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ def hr_application_management_view(request):
|
|||||||
corp_applications = base_app_query.filter(form=app_form).filter(approved=None).order_by('-created')
|
corp_applications = base_app_query.filter(form=app_form).filter(approved=None).order_by('-created')
|
||||||
finished_corp_applications = base_app_query.filter(form=app_form).filter(
|
finished_corp_applications = base_app_query.filter(form=app_form).filter(
|
||||||
approved__in=[True, False]).order_by('-created')
|
approved__in=[True, False]).order_by('-created')
|
||||||
logger.debug("Retrieved %s personal, %s corp applications for %s" % (
|
logger.debug("Retrieved {} personal, {} corp applications for {}".format(
|
||||||
len(request.user.applications.all()), len(corp_applications), request.user))
|
len(request.user.applications.all()), len(corp_applications), request.user))
|
||||||
context = {
|
context = {
|
||||||
'personal_apps': request.user.applications.all(),
|
'personal_apps': request.user.applications.all(),
|
||||||
@ -57,7 +57,7 @@ def hr_application_create_view(request, form_id=None):
|
|||||||
app_form = get_object_or_404(ApplicationForm, id=form_id)
|
app_form = get_object_or_404(ApplicationForm, id=form_id)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
if Application.objects.filter(user=request.user).filter(form=app_form).exists():
|
if Application.objects.filter(user=request.user).filter(form=app_form).exists():
|
||||||
logger.warn("User %s attempting to duplicate application to %s" % (request.user, app_form.corp))
|
logger.warn(f"User {request.user} attempting to duplicate application to {app_form.corp}")
|
||||||
else:
|
else:
|
||||||
application = Application(user=request.user, form=app_form)
|
application = Application(user=request.user, form=app_form)
|
||||||
application.save()
|
application.save()
|
||||||
@ -65,7 +65,7 @@ def hr_application_create_view(request, form_id=None):
|
|||||||
response = ApplicationResponse(question=question, application=application)
|
response = ApplicationResponse(question=question, application=application)
|
||||||
response.answer = "\n".join(request.POST.getlist(str(question.pk), ""))
|
response.answer = "\n".join(request.POST.getlist(str(question.pk), ""))
|
||||||
response.save()
|
response.save()
|
||||||
logger.info("%s created %s" % (request.user, application))
|
logger.info(f"{request.user} created {application}")
|
||||||
return redirect('hrapplications:personal_view', application.id)
|
return redirect('hrapplications:personal_view', application.id)
|
||||||
else:
|
else:
|
||||||
questions = app_form.questions.all()
|
questions = app_form.questions.all()
|
||||||
@ -80,7 +80,7 @@ def hr_application_create_view(request, form_id=None):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def hr_application_personal_view(request, app_id):
|
def hr_application_personal_view(request, app_id):
|
||||||
logger.debug("hr_application_personal_view called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_personal_view called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
if app.user == request.user:
|
if app.user == request.user:
|
||||||
context = {
|
context = {
|
||||||
@ -92,29 +92,29 @@ def hr_application_personal_view(request, app_id):
|
|||||||
}
|
}
|
||||||
return render(request, 'hrapplications/view.html', context=context)
|
return render(request, 'hrapplications/view.html', context=context)
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s not authorized to view %s" % (request.user, app))
|
logger.warn(f"User {request.user} not authorized to view {app}")
|
||||||
return redirect('hrapplications:personal_view')
|
return redirect('hrapplications:personal_view')
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def hr_application_personal_removal(request, app_id):
|
def hr_application_personal_removal(request, app_id):
|
||||||
logger.debug("hr_application_personal_removal called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_personal_removal called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
if app.user == request.user:
|
if app.user == request.user:
|
||||||
if app.approved is None:
|
if app.approved is None:
|
||||||
logger.info("User %s deleting %s" % (request.user, app))
|
logger.info(f"User {request.user} deleting {app}")
|
||||||
app.delete()
|
app.delete()
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s attempting to delete reviewed app %s" % (request.user, app))
|
logger.warn(f"User {request.user} attempting to delete reviewed app {app}")
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s not authorized to delete %s" % (request.user, app))
|
logger.warn(f"User {request.user} not authorized to delete {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.human_resources')
|
@permission_required('auth.human_resources')
|
||||||
def hr_application_view(request, app_id):
|
def hr_application_view(request, app_id):
|
||||||
logger.debug("hr_application_view called by user %s for app id %s" % (request.user, 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:
|
||||||
@ -129,7 +129,7 @@ def hr_application_view(request, app_id):
|
|||||||
comment.user = request.user
|
comment.user = request.user
|
||||||
comment.text = form.cleaned_data['comment']
|
comment.text = form.cleaned_data['comment']
|
||||||
comment.save()
|
comment.save()
|
||||||
logger.info("Saved comment by user %s to %s" % (request.user, app))
|
logger.info(f"Saved comment by user {request.user} to {app}")
|
||||||
return redirect('hrapplications:view', app_id)
|
return redirect('hrapplications:view', app_id)
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s does not have permission to add ApplicationComments" % request.user)
|
logger.warn("User %s does not have permission to add ApplicationComments" % request.user)
|
||||||
@ -151,9 +151,9 @@ def hr_application_view(request, app_id):
|
|||||||
@permission_required('auth.human_resources')
|
@permission_required('auth.human_resources')
|
||||||
@permission_required('hrapplications.delete_application')
|
@permission_required('hrapplications.delete_application')
|
||||||
def hr_application_remove(request, app_id):
|
def hr_application_remove(request, app_id):
|
||||||
logger.debug("hr_application_remove called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_remove called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
logger.info("User %s deleting %s" % (request.user, app))
|
logger.info(f"User {request.user} deleting {app}")
|
||||||
app.delete()
|
app.delete()
|
||||||
notify(app.user, "Application Deleted", message="Your application to %s was deleted." % app.form.corp)
|
notify(app.user, "Application Deleted", message="Your application to %s was deleted." % app.form.corp)
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
@ -163,15 +163,15 @@ def hr_application_remove(request, app_id):
|
|||||||
@permission_required('auth.human_resources')
|
@permission_required('auth.human_resources')
|
||||||
@permission_required('hrapplications.approve_application')
|
@permission_required('hrapplications.approve_application')
|
||||||
def hr_application_approve(request, app_id):
|
def hr_application_approve(request, app_id):
|
||||||
logger.debug("hr_application_approve called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_approve called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
if request.user.is_superuser or request.user == app.reviewer:
|
if request.user.is_superuser or request.user == app.reviewer:
|
||||||
logger.info("User %s approving %s" % (request.user, app))
|
logger.info(f"User {request.user} approving {app}")
|
||||||
app.approved = True
|
app.approved = True
|
||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application Accepted", message="Your application to %s has been approved." % app.form.corp, level="success")
|
notify(app.user, "Application Accepted", message="Your application to %s has been approved." % app.form.corp, level="success")
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s not authorized to approve %s" % (request.user, app))
|
logger.warn(f"User {request.user} not authorized to approve {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@ -179,15 +179,15 @@ def hr_application_approve(request, app_id):
|
|||||||
@permission_required('auth.human_resources')
|
@permission_required('auth.human_resources')
|
||||||
@permission_required('hrapplications.reject_application')
|
@permission_required('hrapplications.reject_application')
|
||||||
def hr_application_reject(request, app_id):
|
def hr_application_reject(request, app_id):
|
||||||
logger.debug("hr_application_reject called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_reject called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
if request.user.is_superuser or request.user == app.reviewer:
|
if request.user.is_superuser or request.user == app.reviewer:
|
||||||
logger.info("User %s rejecting %s" % (request.user, app))
|
logger.info(f"User {request.user} rejecting {app}")
|
||||||
app.approved = False
|
app.approved = False
|
||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application Rejected", message="Your application to %s has been rejected." % app.form.corp, level="danger")
|
notify(app.user, "Application Rejected", message="Your application to %s has been rejected." % app.form.corp, level="danger")
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s not authorized to reject %s" % (request.user, app))
|
logger.warn(f"User {request.user} not authorized to reject {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@ -200,8 +200,8 @@ def hr_application_search(request):
|
|||||||
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
searchstring = form.cleaned_data['search_string'].lower()
|
searchstring = form.cleaned_data['search_string'].lower()
|
||||||
applications = set([])
|
applications = set()
|
||||||
logger.debug("Searching for application with character name %s for user %s" % (searchstring, request.user))
|
logger.debug(f"Searching for application with character name {searchstring} for user {request.user}")
|
||||||
app_list = Application.objects.all()
|
app_list = Application.objects.all()
|
||||||
if not request.user.is_superuser:
|
if not request.user.is_superuser:
|
||||||
try:
|
try:
|
||||||
@ -237,15 +237,15 @@ def hr_application_search(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.human_resources')
|
@permission_required('auth.human_resources')
|
||||||
def hr_application_mark_in_progress(request, app_id):
|
def hr_application_mark_in_progress(request, app_id):
|
||||||
logger.debug("hr_application_mark_in_progress called by user %s for app id %s" % (request.user, app_id))
|
logger.debug(f"hr_application_mark_in_progress called by user {request.user} for app id {app_id}")
|
||||||
app = get_object_or_404(Application, pk=app_id)
|
app = get_object_or_404(Application, pk=app_id)
|
||||||
if not app.reviewer:
|
if not app.reviewer:
|
||||||
logger.info("User %s marking %s in progress" % (request.user, app))
|
logger.info(f"User {request.user} marking {app} in progress")
|
||||||
app.reviewer = request.user
|
app.reviewer = request.user
|
||||||
app.reviewer_character = request.user.profile.main_character
|
app.reviewer_character = request.user.profile.main_character
|
||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application In Progress", message="Your application to %s is being reviewed by %s" % (app.form.corp, app.reviewer_str))
|
notify(app.user, "Application In Progress", message=f"Your application to {app.form.corp} is being reviewed by {app.reviewer_str}")
|
||||||
else:
|
else:
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"User %s unable to mark %s in progress: already being reviewed by %s" % (request.user, app, app.reviewer))
|
f"User {request.user} unable to mark {app} in progress: already being reviewed by {app.reviewer}")
|
||||||
return redirect("hrapplications:view", app_id)
|
return redirect("hrapplications:view", app_id)
|
||||||
|
@ -25,7 +25,7 @@ class NotificationHandler(logging.Handler):
|
|||||||
for user in users:
|
for user in users:
|
||||||
notify(
|
notify(
|
||||||
user,
|
user,
|
||||||
"%s [%s:%s]" % (record.levelname, record.funcName, record.lineno),
|
f"{record.levelname} [{record.funcName}:{record.lineno}]",
|
||||||
level=Notification.Level.from_old_name(record.levelname),
|
level=Notification.Level.from_old_name(record.levelname),
|
||||||
message=message
|
message=message
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:40
|
# Generated by Django 1.10.1 on 2016-09-05 21:40
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-10 16:49
|
# Generated by Django 1.10.1 on 2016-09-10 16:49
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class Notification(models.Model):
|
|||||||
objects = NotificationManager()
|
objects = NotificationManager()
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return "%s: %s" % (self.user, self.title)
|
return f"{self.user}: {self.title}"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
# overriden save to ensure cache is invaidated on very call
|
# overriden save to ensure cache is invaidated on very call
|
||||||
|
@ -26,7 +26,7 @@ class TestQuerySet(TestCase):
|
|||||||
Notification.objects.notify_user(self.user_1, 'dummy_1')
|
Notification.objects.notify_user(self.user_1, 'dummy_1')
|
||||||
Notification.objects.notify_user(self.user_2, 'dummy_2')
|
Notification.objects.notify_user(self.user_2, 'dummy_2')
|
||||||
Notification.objects.update(viewed=True)
|
Notification.objects.update(viewed=True)
|
||||||
self.assertEquals(mock_invalidate_user_notification_cache.call_count, 2)
|
self.assertEqual(mock_invalidate_user_notification_cache.call_count, 2)
|
||||||
|
|
||||||
|
|
||||||
class TestUserNotify(TestCase):
|
class TestUserNotify(TestCase):
|
||||||
@ -123,19 +123,19 @@ class TestMaxNotificationsPerUser(TestCase):
|
|||||||
def test_reset_to_default_if_not_defined(self):
|
def test_reset_to_default_if_not_defined(self):
|
||||||
result = Notification.objects._max_notifications_per_user()
|
result = Notification.objects._max_notifications_per_user()
|
||||||
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
||||||
self.assertEquals(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
@override_settings(NOTIFICATIONS_MAX_PER_USER='11')
|
@override_settings(NOTIFICATIONS_MAX_PER_USER='11')
|
||||||
def test_reset_to_default_if_not_int(self):
|
def test_reset_to_default_if_not_int(self):
|
||||||
result = Notification.objects._max_notifications_per_user()
|
result = Notification.objects._max_notifications_per_user()
|
||||||
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
||||||
self.assertEquals(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
@override_settings(NOTIFICATIONS_MAX_PER_USER=-1)
|
@override_settings(NOTIFICATIONS_MAX_PER_USER=-1)
|
||||||
def test_reset_to_default_if_lt_zero(self):
|
def test_reset_to_default_if_lt_zero(self):
|
||||||
result = Notification.objects._max_notifications_per_user()
|
result = Notification.objects._max_notifications_per_user()
|
||||||
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
|
||||||
self.assertEquals(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
|
|
||||||
@patch('allianceauth.notifications.managers.cache')
|
@patch('allianceauth.notifications.managers.cache')
|
||||||
@ -219,7 +219,7 @@ class TestUnreadCount(TestCase):
|
|||||||
|
|
||||||
def test_return_error_code_when_user_not_found(self, mock_cache):
|
def test_return_error_code_when_user_not_found(self, mock_cache):
|
||||||
mock_cache.get.return_value = None
|
mock_cache.get.return_value = None
|
||||||
invalid_user_id = max([user.pk for user in User.objects.all()]) + 1
|
invalid_user_id = max(user.pk for user in User.objects.all()) + 1
|
||||||
result = Notification.objects.user_unread_count(invalid_user_id)
|
result = Notification.objects.user_unread_count(invalid_user_id)
|
||||||
expected = -1
|
expected = -1
|
||||||
self.assertEqual(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
@ -29,7 +29,7 @@ class TestUserNotify(TestCase):
|
|||||||
def test_save_will_invalidate_cache(self, mock_invalidate_user_notification_cache):
|
def test_save_will_invalidate_cache(self, mock_invalidate_user_notification_cache):
|
||||||
obj = Notification.objects.notify_user(self.user, 'dummy')
|
obj = Notification.objects.notify_user(self.user, 'dummy')
|
||||||
self.assertTrue(Notification.objects.filter(pk=obj.pk).exists())
|
self.assertTrue(Notification.objects.filter(pk=obj.pk).exists())
|
||||||
self.assertEquals(mock_invalidate_user_notification_cache.call_count, 1)
|
self.assertEqual(mock_invalidate_user_notification_cache.call_count, 1)
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.Notification.objects.invalidate_user_notification_cache')
|
@patch(MODULE_PATH + '.Notification.objects.invalidate_user_notification_cache')
|
||||||
def test_delete_will_invalidate_cache(
|
def test_delete_will_invalidate_cache(
|
||||||
@ -38,7 +38,7 @@ class TestUserNotify(TestCase):
|
|||||||
obj = Notification.objects.notify_user(self.user, 'dummy')
|
obj = Notification.objects.notify_user(self.user, 'dummy')
|
||||||
obj.delete()
|
obj.delete()
|
||||||
self.assertFalse(Notification.objects.filter(pk=obj.pk).exists())
|
self.assertFalse(Notification.objects.filter(pk=obj.pk).exists())
|
||||||
self.assertEquals(mock_invalidate_user_notification_cache.call_count, 2)
|
self.assertEqual(mock_invalidate_user_notification_cache.call_count, 2)
|
||||||
|
|
||||||
def test_can_view(self):
|
def test_can_view(self):
|
||||||
obj = Notification.objects.notify_user(self.user, 'dummy')
|
obj = Notification.objects.notify_user(self.user, 'dummy')
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.1 on 2016-09-05 21:40
|
# Generated by Django 1.10.1 on 2016-09-05 21:40
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11 on 2017-04-13 04:42
|
# Generated by Django 1.11 on 2017-04-13 04:42
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
# Generated by Django 1.10.5 on 2017-03-22 23:35
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
# Generated by Django 1.11.5 on 2017-09-28 02:16
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -51,7 +51,7 @@ def add_optimer_view(request):
|
|||||||
op.create_time = post_time
|
op.create_time = post_time
|
||||||
op.eve_character = character
|
op.eve_character = character
|
||||||
op.save()
|
op.save()
|
||||||
logger.info("User %s created op timer with name %s" % (request.user, op.operation_name))
|
logger.info(f"User {request.user} created op timer with name {op.operation_name}")
|
||||||
messages.success(request, _('Created operation timer for %(opname)s.') % {"opname": op.operation_name})
|
messages.success(request, _('Created operation timer for %(opname)s.') % {"opname": op.operation_name})
|
||||||
return redirect("optimer:view")
|
return redirect("optimer:view")
|
||||||
else:
|
else:
|
||||||
@ -66,10 +66,10 @@ def add_optimer_view(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.optimer_management')
|
@permission_required('auth.optimer_management')
|
||||||
def remove_optimer(request, optimer_id):
|
def remove_optimer(request, optimer_id):
|
||||||
logger.debug("remove_optimer called by user %s for operation id %s" % (request.user, optimer_id))
|
logger.debug(f"remove_optimer called by user {request.user} for operation id {optimer_id}")
|
||||||
op = get_object_or_404(OpTimer, id=optimer_id)
|
op = get_object_or_404(OpTimer, id=optimer_id)
|
||||||
op.delete()
|
op.delete()
|
||||||
logger.info("Deleting optimer id %s by user %s" % (optimer_id, request.user))
|
logger.info(f"Deleting optimer id {optimer_id} by user {request.user}")
|
||||||
messages.success(request, _('Removed operation timer for %(opname)s.') % {"opname": op.operation_name})
|
messages.success(request, _('Removed operation timer for %(opname)s.') % {"opname": op.operation_name})
|
||||||
return redirect("optimer:view")
|
return redirect("optimer:view")
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ def remove_optimer(request, optimer_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.optimer_management')
|
@permission_required('auth.optimer_management')
|
||||||
def edit_optimer(request, optimer_id):
|
def edit_optimer(request, optimer_id):
|
||||||
logger.debug("edit_optimer called by user %s for optimer id %s" % (request.user, optimer_id))
|
logger.debug(f"edit_optimer called by user {request.user} for optimer id {optimer_id}")
|
||||||
op = get_object_or_404(OpTimer, id=optimer_id)
|
op = get_object_or_404(OpTimer, id=optimer_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = OpForm(request.POST)
|
form = OpForm(request.POST)
|
||||||
@ -91,7 +91,7 @@ def edit_optimer(request, optimer_id):
|
|||||||
op.operation_name = form.cleaned_data['operation_name']
|
op.operation_name = form.cleaned_data['operation_name']
|
||||||
op.fc = form.cleaned_data['fc']
|
op.fc = form.cleaned_data['fc']
|
||||||
op.eve_character = character
|
op.eve_character = character
|
||||||
logger.info("User %s updating optimer id %s " % (request.user, optimer_id))
|
logger.info(f"User {request.user} updating optimer id {optimer_id} ")
|
||||||
op.save()
|
op.save()
|
||||||
messages.success(request, _('Saved changes to operation timer for %(opname)s.') % {"opname": op.operation_name})
|
messages.success(request, _('Saved changes to operation timer for %(opname)s.') % {"opname": op.operation_name})
|
||||||
return redirect("optimer:view")
|
return redirect("optimer:view")
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user