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:
Peter Pfeufer 2021-10-18 11:59:05 +02:00
parent 2fe1de1c97
commit a6b340c179
No known key found for this signature in database
GPG Key ID: 6051D2C6AD4EBC27
199 changed files with 499 additions and 590 deletions

View File

@ -22,7 +22,13 @@ repos:
args: [ '--remove' ]
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
rev: 2.3.5
rev: 2.3.54
hooks:
- id: editorconfig-checker
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 ]

View File

@ -4,5 +4,5 @@
__version__ = '2.9.0'
__title__ = 'Alliance Auth'
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
NAME = '%s v%s' % (__title__, __version__)
NAME = f'{__title__} v{__version__}'
default_app_config = 'allianceauth.apps.AllianceAuthConfig'

View File

@ -16,7 +16,7 @@ class AnalyticsIdentifier(models.Model):
raise ValidationError('There is can be only one \
AnalyticsIdentifier instance')
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):

View File

@ -36,8 +36,8 @@ def make_service_hooks_update_groups_action(service):
for user in queryset: # queryset filtering doesn't work here?
service.update_groups(user)
update_service_groups.__name__ = str('update_{}_groups'.format(slugify(service.name)))
update_service_groups.short_description = "Sync groups for selected {} accounts".format(service.title)
update_service_groups.__name__ = str(f'update_{slugify(service.name)}_groups')
update_service_groups.short_description = f"Sync groups for selected {service.title} accounts"
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?
service.sync_nickname(user)
sync_nickname.__name__ = str('sync_{}_nickname'.format(slugify(service.name)))
sync_nickname.short_description = "Sync nicknames for selected {} accounts".format(service.title)
sync_nickname.__name__ = str(f'sync_{slugify(service.name)}_nickname')
sync_nickname.short_description = f"Sync nicknames for selected {service.title} accounts"
return sync_nickname
@ -194,7 +194,7 @@ class MainCorporationsFilter(admin.SimpleListFilter):
.distinct()\
.order_by(Lower('corporation_name'))
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):
@ -228,7 +228,7 @@ class MainAllianceFilter(admin.SimpleListFilter):
.distinct()\
.order_by(Lower('alliance_name'))
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):
@ -252,7 +252,7 @@ def update_main_character_model(modeladmin, request, queryset):
modeladmin.message_user(
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'
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(
my_groups, AUTHENTICATION_ADMIN_USERS_MAX_GROUPS
)
@ -455,7 +455,7 @@ class StateAdmin(admin.ModelAdmin):
def has_delete_permission(self, request, obj=None):
if obj == get_guest_state():
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):
if obj == get_guest_state():
@ -464,7 +464,7 @@ class StateAdmin(admin.ModelAdmin):
'fields': ('permissions', 'priority'),
}),
)
return super(StateAdmin, self).get_fieldsets(request, obj=obj)
return super().get_fieldsets(request, obj=obj)
class BaseOwnershipAdmin(admin.ModelAdmin):

View File

@ -7,6 +7,6 @@ class AuthenticationConfig(AppConfig):
label = 'authentication'
def ready(self):
super(AuthenticationConfig, self).ready()
super().ready()
from allianceauth.authentication import checks, signals
register(Tags.security)(checks.check_login_scopes_setting)

View File

@ -36,17 +36,17 @@ class StateBackend(ModelBackend):
try:
ownership = CharacterOwnership.objects.get(character__character_id=token.character_id)
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
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()
return self.create_user(token)
except CharacterOwnership.DoesNotExist:
try:
# insecure legacy main check for pre-sso registration auth installs
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
token.user = profile.user
CharacterOwnership.objects.create_by_token(token)
@ -59,13 +59,13 @@ class StateBackend(ModelBackend):
user = records[0].user
token.user = user
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:
# set this as their main by default if they have none
user.profile.main_character = co.character
user.profile.save()
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)
def create_user(self, token):
@ -77,7 +77,7 @@ class StateBackend(ModelBackend):
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.save()
logger.debug('Created new user {0}'.format(user))
logger.debug(f'Created new user {user}')
return user
@staticmethod
@ -87,10 +87,10 @@ class StateBackend(ModelBackend):
if User.objects.filter(username__startswith=name).exists():
u = User.objects.filter(username__startswith=name)
num = len(u)
username = "%s_%s" % (name, num)
username = f"{name}_{num}"
while u.filter(username=username).exists():
num += 1
username = "%s_%s" % (name, num)
username = f"{name}_{num}"
else:
username = name
return username

View File

@ -11,10 +11,10 @@ class Command(BaseCommand):
if profiles.exists():
for profile in profiles:
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.main_character = None
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:
self.stdout.write(self.style.SUCCESS('All main characters have active ownership.'))

View File

@ -49,7 +49,7 @@ class StateQuerySet(QuerySet):
for state in self:
for profile in state.userprofile_set.all():
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):

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:38
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-07 19:14
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-09 20:29
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-09 23:19
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-09 23:11
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-10 05:42
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-10 21:50
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-12 13:04
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.2 on 2016-10-21 02:28
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2017-01-07 06:47
from __future__ import unicode_literals
from django.db import migrations
@ -9,7 +8,7 @@ def count_completed_fields(model):
def forward(apps, schema_editor):
# this ensures only one model exists per user
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:
auths = AuthServicesInfo.objects.filter(user=u)
if auths.count() > 1:

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2017-01-07 07:11
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-01-12 00:59
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.2 on 2016-12-11 23:14
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-09 23:19
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:09
from __future__ import unicode_literals
import allianceauth.authentication.models
import django.db.models.deletion

View File

@ -1,5 +1,3 @@
from __future__ import unicode_literals
from django.db import migrations

View File

@ -39,7 +39,7 @@ class State(models.Model):
with transaction.atomic():
for profile in self.userprofile_set.all():
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():
@ -67,7 +67,7 @@ class UserProfile(models.Model):
if self.state != state:
self.state = state
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'])
notify(
self.user,
@ -102,7 +102,7 @@ class CharacterOwnership(models.Model):
objects = CharacterOwnershipManager()
def __str__(self):
return "%s: %s" % (self.user, self.character)
return f"{self.user}: {self.character}"
class OwnershipRecord(models.Model):
@ -115,4 +115,4 @@ class OwnershipRecord(models.Model):
ordering = ['-created']
def __str__(self):
return "%s: %s on %s" % (self.user, self.character, self.created)
return f"{self.user}: {self.character} on {self.created}"

View File

@ -29,27 +29,27 @@ def trigger_state_check(state):
@receiver(m2m_changed, sender=State.member_characters.through)
def state_member_characters_changed(sender, instance, action, *args, **kwargs):
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)
@receiver(m2m_changed, sender=State.member_corporations.through)
def state_member_corporations_changed(sender, instance, action, *args, **kwargs):
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)
@receiver(m2m_changed, sender=State.member_alliances.through)
def state_member_alliances_changed(sender, instance, action, *args, **kwargs):
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)
@receiver(post_save, sender=State)
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)
@ -60,7 +60,7 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs):
if not created:
update_fields = kwargs.pop('update_fields', []) or []
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()
@ -68,14 +68,14 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs):
def create_required_models(sender, instance, created, *args, **kwargs):
# ensure all users have a model
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)
@receiver(post_save, sender=Token)
def record_character_ownership(sender, instance, created, *args, **kwargs):
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:
query = Q(owner_hash=instance.character_owner_hash) & Q(user=instance.user)
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()
# create character if needed
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)
char = EveCharacter.objects.get(character_id=instance.character_id)
# check if we need to create ownership
if instance.user and not CharacterOwnership.objects.filter(
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})
@ -98,7 +98,7 @@ def record_character_ownership(sender, instance, created, *args, **kwargs):
def validate_main_character(sender, instance, *args, **kwargs):
try:
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))
# clear main character as user no longer owns them
instance.user.profile.main_character = None
@ -111,7 +111,7 @@ def validate_main_character(sender, instance, *args, **kwargs):
@receiver(post_delete, sender=Token)
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():
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()
@ -122,11 +122,11 @@ def assign_state_on_active_change(sender, instance, *args, **kwargs):
old_instance = User.objects.get(pk=instance.pk)
if old_instance.is_active != 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()
else:
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.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):
# if this is a main character updating, check that user's state
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()
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
@ -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)
if records.exists():
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
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)

View File

@ -22,13 +22,13 @@ def check_character_ownership(owner_hash):
continue
except (KeyError, IncompleteResponseError):
# 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))
break
if not t.character_owner_hash == old_hash:
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()
break

View File

@ -36,7 +36,7 @@ from . import get_admin_change_view_url, get_admin_search_url
MODULE_PATH = 'allianceauth.authentication.admin'
class MockRequest(object):
class MockRequest:
def __init__(self, user=None):
self.user = user
@ -188,7 +188,7 @@ def make_generic_search_request(ModelClass: type, search_term: str):
c = Client()
c.login(username='superuser', password='secret')
return c.get(
'%s?q=%s' % (get_admin_search_url(ModelClass), quote(search_term))
f'{get_admin_search_url(ModelClass)}?q={quote(search_term)}'
)

View File

@ -114,12 +114,12 @@ class TestAuthenticate(TestCase):
def test_authenticate_main_character(self):
t = Token(character_id=self.main_character.character_id, character_owner_hash='1')
user = StateBackend().authenticate(token=t)
self.assertEquals(user, self.user)
self.assertEqual(user, self.user)
def test_authenticate_alt_character(self):
t = Token(character_id=self.alt_character.character_id, character_owner_hash='2')
user = StateBackend().authenticate(token=t)
self.assertEquals(user, self.user)
self.assertEqual(user, self.user)
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')

View File

@ -36,8 +36,8 @@ class CharacterOwnershipTestCase(TestCase):
character_owner_hash='1',
)
co = CharacterOwnership.objects.get(character=self.character)
self.assertEquals(co.user, self.user)
self.assertEquals(co.owner_hash, '1')
self.assertEqual(co.user, self.user)
self.assertEqual(co.owner_hash, '1')
def test_transfer_ownership(self):
Token.objects.create(
@ -54,7 +54,7 @@ class CharacterOwnershipTestCase(TestCase):
)
co = CharacterOwnership.objects.get(character=self.character)
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):
Token.objects.create(
@ -98,29 +98,29 @@ class StateTestCase(TestCase):
def test_state_assignment_on_character_change(self):
self.member_state.member_characters.add(self.test_character)
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._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):
self.member_state.member_corporations.add(self.test_corporation)
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._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):
self.member_state.member_alliances.add(self.test_alliance)
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._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):
self.member_state.member_characters.add(self.test_character)
@ -130,10 +130,10 @@ class StateTestCase(TestCase):
)
higher_state.member_characters.add(self.test_character)
self._refresh_user()
self.assertEquals(higher_state, self.user.profile.state)
self.assertEqual(higher_state, self.user.profile.state)
higher_state.member_characters.clear()
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()
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)
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()
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()
def test_state_assignment_on_priority_change(self):
@ -161,11 +161,11 @@ class StateTestCase(TestCase):
lower_state.priority = 500
lower_state.save()
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.save()
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):
self.member_state.member_characters.add(self.test_character)
@ -175,11 +175,11 @@ class StateTestCase(TestCase):
)
higher_state.member_characters.add(self.test_character)
self._refresh_user()
self.assertEquals(higher_state, self.user.profile.state)
self.assertEqual(higher_state, self.user.profile.state)
higher_state.delete()
self.assertFalse(State.objects.filter(name='Higher State').count())
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):
self.member_state.member_characters.add(self.test_character)
@ -188,26 +188,26 @@ class StateTestCase(TestCase):
priority=200,
)
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.save()
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.save()
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):
self.member_state.member_characters.add(self.test_character)
self.user.is_active = False
self.user.save()
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.save()
self._refresh_user()
self.assertEquals(self.user.profile.state, self.member_state)
self.assertEqual(self.user.profile.state, self.member_state)
class CharacterOwnershipCheckTestCase(TestCase):

View File

@ -63,7 +63,7 @@ def dashboard(request):
@login_required
@token_required(scopes=settings.LOGIN_TOKEN_SCOPES)
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:
co = CharacterOwnership.objects.get(character__character_id=token.character_id, user=request.user)
except CharacterOwnership.DoesNotExist:
@ -154,7 +154,7 @@ class RegistrationView(BaseRegistrationView):
if not getattr(settings, 'REGISTRATION_VERIFY_EMAIL', True):
# Keep the request so the user can be automagically logged in.
setattr(self, 'request', request)
return super(RegistrationView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
def register(self, form):
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)
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])
return context

View File

@ -41,7 +41,7 @@ def create_project(parser, options, args):
# Call the command with extra context
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):
@ -69,10 +69,10 @@ def update_settings(parser, options, args):
template_settings_path = os.path.join(template_path, 'project_name/settings/base.py')
# 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())
print("Successfully updated %(project_name)s settings." % {'project_name': project_name})
print(f"Successfully updated {project_name} settings.")
COMMANDS = {

View File

@ -29,7 +29,7 @@ class CorpStatsQuerySet(models.QuerySet):
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__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
query = queries.pop()
for q in queries:

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-12-14 21:36
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-12-14 21:48
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:35
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-26 20:13
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
@ -48,7 +47,7 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='corpmember',
unique_together=set([('corpstats', 'character_id')]),
unique_together={('corpstats', 'character_id')},
),
migrations.RunPython(convert_json_to_members, convert_members_to_json),
migrations.RemoveField(

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.2 on 2017-06-10 15:34
from __future__ import unicode_literals
from django.db import migrations

View File

@ -43,7 +43,7 @@ class CorpStats(models.Model):
objects = CorpStatsManager()
def __str__(self):
return "%s for %s" % (self.__class__.__name__, self.corp)
return f"{self.__class__.__name__} for {self.corp}"
def update(self):
try:
@ -73,7 +73,7 @@ class CorpStats(models.Model):
self.save()
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:
notify(
self.token.user, "%s failed to update with your ESI token." % self,
@ -81,9 +81,9 @@ class CorpStats(models.Model):
level="error")
self.delete()
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:
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()
except AssertionError:
logger.warning("%s token character no longer in corp." % self)
@ -99,7 +99,7 @@ class CorpStats(models.Model):
@property
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
def registered_member_count(self):

View File

@ -243,7 +243,7 @@ class CorpMemberTestCase(TestCase):
CharacterOwnership.objects.create(character=character, user=self.user, owner_hash='b')
self.member.refresh_from_db()
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
old_main = self.user.profile.main_character
@ -274,7 +274,7 @@ class CorpMemberTestCase(TestCase):
AuthUtils.connect_signals()
def test_portrait_url(self):
self.assertEquals(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.assertEquals(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=32), 'https://images.evetech.net/characters/2/portrait?size=32')
self.assertEqual(self.member.portrait_url(size=32), self.member.portrait_url_32)
self.assertEqual(self.member.portrait_url(size=64), self.member.portrait_url_64)
self.assertEqual(self.member.portrait_url(size=128), self.member.portrait_url_128)

View File

@ -10,14 +10,14 @@ from .models import EveCorporationInfo
class EveEntityExistsError(forms.ValidationError):
def __init__(self, entity_type_name, id):
super(EveEntityExistsError, self).__init__(
message='{} with ID {} already exists.'.format(entity_type_name, id))
super().__init__(
message=f'{entity_type_name} with ID {id} already exists.')
class EveEntityNotFoundError(forms.ValidationError):
def __init__(self, entity_type_name, id):
super(EveEntityNotFoundError, self).__init__(
message='{} with ID {} not found.'.format(entity_type_name, id))
super().__init__(
message=f'{entity_type_name} with ID {id} not found.')
class EveEntityForm(forms.ModelForm):
@ -170,4 +170,4 @@ class EveCharacterAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if not obj or not obj.pk:
return EveCharacterForm
return super(EveCharacterAdmin, self).get_form(request, obj=obj, **kwargs)
return super().get_form(request, obj=obj, **kwargs)

View File

@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
def sync_user_groups(modeladmin, request, 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()
@ -29,7 +29,7 @@ class AutogroupsConfigAdmin(admin.ModelAdmin):
return []
def get_actions(self, request):
actions = super(AutogroupsConfigAdmin, self).get_actions(request)
actions = super().get_actions(request)
actions['sync_user_groups'] = (sync_user_groups,
'sync_user_groups',
'Sync all users groups for this Autogroup Config')

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.6 on 2017-12-23 04:30
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -26,7 +26,7 @@ class AutogroupsConfigManager(models.Manager):
for config in self.filter(states=state):
logger.debug("in state loop")
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)
def update_groups_for_user(self, user: User, state: State = None):
@ -81,7 +81,7 @@ class AutogroupsConfig(models.Model):
objects = AutogroupsConfigManager()
def __init__(self, *args, **kwargs):
super(AutogroupsConfig, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def __repr__(self):
return self.__class__.__name__
@ -111,24 +111,24 @@ class AutogroupsConfig(models.Model):
group = None
try:
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
else:
alliance = user.profile.main_character.alliance
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
group = self.get_alliance_group(alliance)
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)
group = self.get_alliance_group(alliance)
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:
self.remove_user_from_alliance_groups(user, except_group=group)
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)
@transaction.atomic
@ -136,20 +136,20 @@ class AutogroupsConfig(models.Model):
group = None
try:
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:
corp = user.profile.main_character.corporation
group = self.get_corp_group(corp)
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)
group = self.get_corp_group(corp)
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:
self.remove_user_from_corp_groups(user, except_group=group)
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)
@transaction.atomic

View File

@ -15,7 +15,7 @@ def pre_save_config(sender, instance, *args, **kwargs):
Checks if enable was toggled on group config and
deletes groups if necessary.
"""
logger.debug("Received pre_save from {}".format(instance))
logger.debug(f"Received pre_save from {instance}")
if not instance.pk:
# new model being created
return

View File

@ -9,7 +9,7 @@ MODULE_PATH = 'allianceauth.eveonline.autogroups'
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():

View File

@ -56,15 +56,15 @@ def _eve_entity_image_url(
tenants = ['tranquility', 'singularity']
if not entity_id:
raise ValueError('Invalid entity_id: {}'.format(entity_id))
raise ValueError(f'Invalid entity_id: {entity_id}')
else:
entity_id = int(entity_id)
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:
raise ValueError('Invalid category {}'.format(category))
raise ValueError(f'Invalid category {category}')
else:
endpoint = categories[category]['endpoint']
@ -78,7 +78,7 @@ def _eve_entity_image_url(
variant = categories[category]['variants'][0]
if tenant and tenant not in tenants:
raise ValueError('Invalid tenant {}'.format(tenant))
raise ValueError(f'Invalid tenant {tenant}')
# compose result URL
result = '{}/{}/{}/{}?size={}'.format(
@ -89,7 +89,7 @@ def _eve_entity_image_url(
size
)
if tenant:
result += '&tenant={}'.format(tenant)
result += f'&tenant={tenant}'
return result

View File

@ -31,7 +31,7 @@ def _build_url(category: str, eve_id: int) -> str:
url = urljoin(
_BASE_URL,
'{}/{}'.format(partial, int(eve_id))
f'{partial}/{int(eve_id)}'
)
return url

View File

@ -39,7 +39,7 @@ def _build_url(category: str, eve_id: int) -> str:
url = urljoin(
_BASE_URL,
'{}/{}/'.format(partial, int(eve_id))
f'{partial}/{int(eve_id)}/'
)
return url

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:39
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-10 20:20
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.2 on 2016-10-26 01:49
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.2 on 2016-11-01 04:20
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-12-16 23:22
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2017-01-02 19:23
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,11 +1,10 @@
# Generated by Django 1.10.5 on 2017-01-18 13:20
from __future__ import unicode_literals
from django.db import migrations, models
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):

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:09
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.5 on 2017-09-28 02:16
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -34,10 +34,10 @@ class ObjectNotFound(Exception):
self.type = type_name
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):
self.id = id
self.name = name
@ -46,7 +46,7 @@ class Entity(object):
return self.name
def __repr__(self):
return "<{} ({}): {}>".format(self.__class__.__name__, self.id, self.name)
return f"<{self.__class__.__name__} ({self.id}): {self.name}>"
def __bool__(self):
return bool(self.id)
@ -57,7 +57,7 @@ class Entity(object):
class Corporation(Entity):
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.ceo_id = ceo_id
self.members = members
@ -82,7 +82,7 @@ class Corporation(Entity):
class Alliance(Entity):
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.corp_ids = corp_ids
self.executor_corp_id = executor_corp_id
@ -97,7 +97,7 @@ class Alliance(Entity):
@property
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
def executor_corp(self):
@ -108,7 +108,7 @@ class Alliance(Entity):
class Character(Entity):
def __init__(self, corp_id=None, alliance_id=None, **kwargs):
super(Character, self).__init__(**kwargs)
super().__init__(**kwargs)
self.corp_id = corp_id
self.alliance_id = alliance_id
self._corp = None
@ -129,10 +129,10 @@ class Character(Entity):
class ItemType(Entity):
def __init__(self, **kwargs):
super(ItemType, self).__init__(**kwargs)
super().__init__(**kwargs)
class EveProvider(object):
class EveProvider:
def get_alliance(self, alliance_id):
"""
:return: an Alliance object for the given ID

View File

@ -18,7 +18,7 @@ def set_logger(logger_name: str, name: str) -> object:
'%(asctime)s - %(levelname)s - %(module)s:%(funcName)s - %(message)s'
)
f_handler = logging.FileHandler(
'{}.log'.format(os.path.splitext(name)[0]),
f'{os.path.splitext(name)[0]}.log',
'w+'
)
f_handler.setFormatter(f_format)

View File

@ -1,4 +1,3 @@
from django.contrib import admin
from allianceauth.fleetactivitytracking.models import Fatlink, Fat

View File

@ -1,4 +1,3 @@
from django.apps import AppConfig

View File

@ -1,4 +1,3 @@
from django import forms
from django.utils.translation import ugettext_lazy as _

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:39
from __future__ import unicode_literals
import django.db.models.deletion
from django.conf import settings
@ -54,6 +53,6 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='fat',
unique_together=set([('character', 'fatlink')]),
unique_together={('character', 'fatlink')},
),
]

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 22:20
from __future__ import unicode_literals
import datetime
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-06 23:54
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:35
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -36,7 +36,7 @@ get_universe_structures_structure_id
logger = logging.getLogger(__name__)
class CorpStat(object):
class CorpStat:
def __init__(self, corp_id, start_of_month, start_of_next_month, corp=None):
if corp:
self.corp = corp
@ -53,7 +53,7 @@ class CorpStat(object):
return "%.2f" % 0
class MemberStat(object):
class MemberStat:
def __init__(self, member, start_of_month, start_of_next_month, mainchid=None):
if 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
else:
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)\
.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):
character_id = request.GET.get('removechar')
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()

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:39
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-06 23:54
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-09 23:22
from __future__ import unicode_literals
from django.db import migrations
from django.conf import settings

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.2 on 2016-12-04 10:25
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-02-04 06:11
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-02-04 07:17
from __future__ import unicode_literals
from django.db import migrations
from django.conf import settings

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.5 on 2017-09-28 02:16
from __future__ import unicode_literals
import django.contrib.auth.models
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.10 on 2018-02-23 23:09
from __future__ import unicode_literals
from django.db import migrations

View File

@ -113,7 +113,7 @@ class AuthGroup(models.Model):
class Meta:
permissions = (
("request_groups", u"Can request non-public groups"),
("request_groups", "Can request non-public groups"),
)
default_permissions = tuple()

View File

@ -9,7 +9,7 @@ logger = logging.getLogger(__name__)
@receiver(state_changed)
def check_groups_on_state_change(sender, user, state, **kwargs):
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 = (
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:
if not group.authgroup.states.filter(id=state.id).exists():
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)

View File

@ -25,7 +25,7 @@ else:
MODULE_PATH = 'allianceauth.groupmanagement.admin'
class MockRequest(object):
class MockRequest:
def __init__(self, user=None):
self.user = user

View File

@ -42,7 +42,7 @@ def group_management(request):
else:
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)))
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
# And the user has permission to manage it
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
except ObjectDoesNotExist:
@ -139,13 +139,13 @@ def group_membership_list(request, group_id):
@login_required
@user_passes_test(GroupManager.can_manage_groups)
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)
try:
# Check its a joinable group i.e. not corp or internal
# And the user has permission to manage it
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
try:
@ -155,7 +155,7 @@ def group_membership_remove(request, group_id, user_id):
log.save()
# Remove group from user
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})
except ObjectDoesNotExist:
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
@user_passes_test(GroupManager.can_manage_groups)
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)
try:
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.save()
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))
notify(group_request.user, "Group Application Accepted", level="success",
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})
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
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})
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))
pass
@ -205,14 +205,14 @@ def group_accept_request(request, group_request_id):
@login_required
@user_passes_test(GroupManager.can_manage_groups)
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)
try:
if not GroupManager.can_manage_group(request.user, group_request.group):
raise PermissionDenied
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))
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()
@ -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})
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
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})
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))
pass
@ -237,7 +237,7 @@ def group_reject_request(request, group_request_id):
@user_passes_test(GroupManager.can_manage_groups)
def group_leave_accept_request(request, group_request_id):
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)
try:
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.save()
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))
notify(group_request.user, "Group Leave Request Accepted", level="success",
message="Your request to leave %s has been accepted." % group_request.group)
messages.success(request,
_('Accepted application from %(mainchar)s to leave %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group})
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
except:
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})
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))
pass
@ -272,7 +272,7 @@ def group_leave_accept_request(request, group_request_id):
@user_passes_test(GroupManager.can_manage_groups)
def group_leave_reject_request(request, group_request_id):
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)
try:
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.save()
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))
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.') % {
"mainchar": group_request.main_char, "group": group_request.group})
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
except:
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})
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))
pass
@ -324,25 +324,25 @@ def groups_view(request):
@login_required
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)
state = request.user.profile.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"))
return redirect('groupmanagement:groups')
if group in request.user.groups.all():
# 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."))
return redirect('groupmanagement:groups')
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
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"))
return redirect('groupmanagement:groups')
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_info = request.user.username + ":" + group.name
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")
req = GroupRequest.objects.filter(user=request.user, group=group)
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."))
return redirect("groupmanagement:groups")
grouprequest = GroupRequest()
@ -359,25 +359,25 @@ def group_request_add(request, group_id):
grouprequest.user = request.user
grouprequest.leave_request = False
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})
return redirect("groupmanagement:groups")
@login_required
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)
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"))
return redirect('groupmanagement:groups')
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"))
return redirect('groupmanagement:groups')
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
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
log.save()
@ -385,11 +385,11 @@ def group_request_leave(request, group_id):
return redirect("groupmanagement:groups")
req = GroupRequest.objects.filter(user=request.user, group=group)
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."))
return redirect("groupmanagement:groups")
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
log = RequestLog(request_type=True, group=group, request_info=request_info, action=1, request_actor=request.user)
log.save()
@ -401,6 +401,6 @@ def group_request_leave(request, group_id):
grouprequest.user = request.user
grouprequest.leave_request = True
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})
return redirect("groupmanagement:groups")

View File

@ -67,7 +67,7 @@ def register(name, fn=None):
logger.debug("Creating new hook %s" % 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)
if fn is None:
@ -98,7 +98,7 @@ def get_app_submodules(module_name):
"""
for name, module in get_app_modules():
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():

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:39
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
@ -117,10 +116,10 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='applicationresponse',
unique_together=set([('question', 'application')]),
unique_together={('question', 'application')},
),
migrations.AlterUniqueTogether(
name='application',
unique_together=set([('form', 'user')]),
unique_together={('form', 'user')},
),
]

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.4 on 2017-08-23 19:46
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10 on 2017-10-20 13:51
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:35
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-27 03:29
from __future__ import unicode_literals
from django.db import migrations
import sortedm2m.fields

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.2 on 2017-06-08 02:54
from __future__ import unicode_literals
from django.db import migrations

View File

@ -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')
finished_corp_applications = base_app_query.filter(form=app_form).filter(
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))
context = {
'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)
if request.method == "POST":
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:
application = Application(user=request.user, form=app_form)
application.save()
@ -65,7 +65,7 @@ def hr_application_create_view(request, form_id=None):
response = ApplicationResponse(question=question, application=application)
response.answer = "\n".join(request.POST.getlist(str(question.pk), ""))
response.save()
logger.info("%s created %s" % (request.user, application))
logger.info(f"{request.user} created {application}")
return redirect('hrapplications:personal_view', application.id)
else:
questions = app_form.questions.all()
@ -80,7 +80,7 @@ def hr_application_create_view(request, form_id=None):
@login_required
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)
if app.user == request.user:
context = {
@ -92,29 +92,29 @@ def hr_application_personal_view(request, app_id):
}
return render(request, 'hrapplications/view.html', context=context)
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')
@login_required
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)
if app.user == request.user:
if app.approved is None:
logger.info("User %s deleting %s" % (request.user, app))
logger.info(f"User {request.user} deleting {app}")
app.delete()
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:
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')
@login_required
@permission_required('auth.human_resources')
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:
app = Application.objects.prefetch_related('responses', 'comments', 'comments__user').get(pk=app_id)
except Application.DoesNotExist:
@ -129,7 +129,7 @@ def hr_application_view(request, app_id):
comment.user = request.user
comment.text = form.cleaned_data['comment']
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)
else:
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('hrapplications.delete_application')
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)
logger.info("User %s deleting %s" % (request.user, app))
logger.info(f"User {request.user} deleting {app}")
app.delete()
notify(app.user, "Application Deleted", message="Your application to %s was deleted." % app.form.corp)
return redirect('hrapplications:index')
@ -163,15 +163,15 @@ def hr_application_remove(request, app_id):
@permission_required('auth.human_resources')
@permission_required('hrapplications.approve_application')
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)
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.save()
notify(app.user, "Application Accepted", message="Your application to %s has been approved." % app.form.corp, level="success")
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')
@ -179,15 +179,15 @@ def hr_application_approve(request, app_id):
@permission_required('auth.human_resources')
@permission_required('hrapplications.reject_application')
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)
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.save()
notify(app.user, "Application Rejected", message="Your application to %s has been rejected." % app.form.corp, level="danger")
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')
@ -200,8 +200,8 @@ def hr_application_search(request):
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid():
searchstring = form.cleaned_data['search_string'].lower()
applications = set([])
logger.debug("Searching for application with character name %s for user %s" % (searchstring, request.user))
applications = set()
logger.debug(f"Searching for application with character name {searchstring} for user {request.user}")
app_list = Application.objects.all()
if not request.user.is_superuser:
try:
@ -237,15 +237,15 @@ def hr_application_search(request):
@login_required
@permission_required('auth.human_resources')
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)
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_character = request.user.profile.main_character
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:
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)

View File

@ -25,7 +25,7 @@ class NotificationHandler(logging.Handler):
for user in users:
notify(
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),
message=message
)

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:40
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-10 16:49
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:35
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -59,7 +59,7 @@ class Notification(models.Model):
objects = NotificationManager()
def __str__(self) -> str:
return "%s: %s" % (self.user, self.title)
return f"{self.user}: {self.title}"
def save(self, *args, **kwargs):
# overriden save to ensure cache is invaidated on very call

View File

@ -26,7 +26,7 @@ class TestQuerySet(TestCase):
Notification.objects.notify_user(self.user_1, 'dummy_1')
Notification.objects.notify_user(self.user_2, 'dummy_2')
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):
@ -123,19 +123,19 @@ class TestMaxNotificationsPerUser(TestCase):
def test_reset_to_default_if_not_defined(self):
result = Notification.objects._max_notifications_per_user()
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
self.assertEquals(result, expected)
self.assertEqual(result, expected)
@override_settings(NOTIFICATIONS_MAX_PER_USER='11')
def test_reset_to_default_if_not_int(self):
result = Notification.objects._max_notifications_per_user()
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
self.assertEquals(result, expected)
self.assertEqual(result, expected)
@override_settings(NOTIFICATIONS_MAX_PER_USER=-1)
def test_reset_to_default_if_lt_zero(self):
result = Notification.objects._max_notifications_per_user()
expected = NOTIFICATIONS_MAX_PER_USER_DEFAULT
self.assertEquals(result, expected)
self.assertEqual(result, expected)
@patch('allianceauth.notifications.managers.cache')
@ -219,7 +219,7 @@ class TestUnreadCount(TestCase):
def test_return_error_code_when_user_not_found(self, mock_cache):
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)
expected = -1
self.assertEqual(result, expected)

View File

@ -29,7 +29,7 @@ class TestUserNotify(TestCase):
def test_save_will_invalidate_cache(self, mock_invalidate_user_notification_cache):
obj = Notification.objects.notify_user(self.user, 'dummy')
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')
def test_delete_will_invalidate_cache(
@ -38,7 +38,7 @@ class TestUserNotify(TestCase):
obj = Notification.objects.notify_user(self.user, 'dummy')
obj.delete()
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):
obj = Notification.objects.notify_user(self.user, 'dummy')

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.1 on 2016-09-05 21:40
from __future__ import unicode_literals
import datetime
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11 on 2017-04-13 04:42
from __future__ import unicode_literals
from django.db import migrations

View File

@ -1,5 +1,4 @@
# Generated by Django 1.10.5 on 2017-03-22 23:35
from __future__ import unicode_literals
from django.db import migrations, models

View File

@ -1,5 +1,4 @@
# Generated by Django 1.11.5 on 2017-09-28 02:16
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@ -51,7 +51,7 @@ def add_optimer_view(request):
op.create_time = post_time
op.eve_character = character
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})
return redirect("optimer:view")
else:
@ -66,10 +66,10 @@ def add_optimer_view(request):
@login_required
@permission_required('auth.optimer_management')
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.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})
return redirect("optimer:view")
@ -77,7 +77,7 @@ def remove_optimer(request, optimer_id):
@login_required
@permission_required('auth.optimer_management')
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)
if request.method == 'POST':
form = OpForm(request.POST)
@ -91,7 +91,7 @@ def edit_optimer(request, optimer_id):
op.operation_name = form.cleaned_data['operation_name']
op.fc = form.cleaned_data['fc']
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()
messages.success(request, _('Saved changes to operation timer for %(opname)s.') % {"opname": op.operation_name})
return redirect("optimer:view")

Some files were not shown because too many files have changed in this diff Show More