Compare commits

...

5 Commits

Author SHA1 Message Date
Col Crunch
337c4d9ce5 Version Bump to v2.4.0 2020-01-22 19:46:20 -05:00
colcrunch
9afc36a009 Merge branch 'corpstat_fix' into 'master'
Increase Corpstats Performance

See merge request allianceauth/allianceauth!1138
2020-01-23 00:38:39 +00:00
Aaron Kable
ebff1387c1 Increase Corpstats Performance 2020-01-23 00:38:39 +00:00
colcrunch
801502ec77 Merge branch 'celery_update' into 'master'
Update Dependencies

Closes #1175

See merge request allianceauth/allianceauth!1141
2020-01-23 00:34:35 +00:00
Aaron Kable
c07f59201e Update Dependencies 2020-01-23 00:34:34 +00:00
5 changed files with 74 additions and 27 deletions

View File

@@ -1,6 +1,6 @@
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
__version__ = '2.3.0'
__version__ = '2.4.0'
NAME = 'Alliance Auth v%s' % __version__
default_app_config = 'allianceauth.apps.AllianceAuthConfig'

View File

@@ -29,9 +29,9 @@
<div class="panel panel-default">
<div class="panel-heading">
<ul class="nav nav-pills pull-left">
<li class="active"><a href="#mains" data-toggle="pill">{% trans 'Mains' %} ({{ corpstats.main_count }})</a></li>
<li class="active"><a href="#mains" data-toggle="pill">{% trans 'Mains' %} ({{ total_mains }})</a></li>
<li><a href="#members" data-toggle="pill">{% trans 'Members' %} ({{ corpstats.member_count }})</a></li>
<li><a href="#unregistered" data-toggle="pill">{% trans 'Unregistered' %} ({{ corpstats.unregistered_member_count }})</a></li>
<li><a href="#unregistered" data-toggle="pill">{% trans 'Unregistered' %} ({{ unregistered.count }})</a></li>
</ul>
<div class="pull-right">
{% trans "Last update:" %} {{ corpstats.last_update|naturaltime }}
@@ -54,14 +54,14 @@
</tr>
</thead>
<tbody>
{% for main in mains %}
{% for id, main in mains.items %}
<tr>
<td class="text-center" style="vertical-align:middle">
<div class="thumbnail"
style="border: 0 none; box-shadow: none; background: transparent;">
<img src="{{ main.portrait_url_64 }}" class="img-circle">
<img src="{{ main.main.portrait_url_64 }}" class="img-circle">
<div class="caption text-center">
{{ main }}
{{ main.main }}
</div>
</div>
</td>
@@ -119,16 +119,29 @@
</thead>
<tbody>
{% for member in members %}
<tr {% if not member.registered %}class="danger"{% endif %}>
<tr>
<td><img src="{{ member.portrait_url }}" class="img-circle"></td>
<td class="text-center">{{ member }}</td>
<td class="text-center"><a
href="https://zkillboard.com/character/{{ member.character_id }}/"
class="label label-danger"
target="_blank">{% trans "Killboard" %}</a></td>
<td class="text-center">{{ member.character_ownership.user.profile.main_character.character_name }}</td>
<td class="text-center">{{ member.character_ownership.user.profile.main_character.corporation_name }}</td>
<td class="text-center">{{ member.character_ownership.user.profile.main_character.alliance_name }}</td>
</tr>
{% endfor %}
{% for member in unregistered %}
<tr class="danger">
<td><img src="{{ member.portrait_url }}" class="img-circle"></td>
<td class="text-center">{{ member.character_name }}</td>
<td class="text-center"><a
href="https://zkillboard.com/character/{{ member.character_id }}/"
class="label label-danger"
target="_blank">{% trans "Killboard" %}</a></td>
<td class="text-center">{{ member.main_character.character_name }}</td>
<td class="text-center">{{ member.main_character.corporation_name }}</td>
<td class="text-center">{{ member.main_character.alliance_name }}</td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
</tr>
{% endfor %}
</tbody>

View File

@@ -3,14 +3,14 @@ import os
from bravado.exception import HTTPError
from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required, user_passes_test
from django.core.exceptions import PermissionDenied
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.db import IntegrityError
from django.shortcuts import render, redirect, get_object_or_404
from django.utils.translation import ugettext_lazy as _
from esi.decorators import token_required
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
from .models import CorpStats
from .models import CorpStats, CorpMember
SWAGGER_SPEC_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'swagger.json')
"""
@@ -68,7 +68,7 @@ def corpstats_view(request, corp_id=None):
corpstats = get_object_or_404(CorpStats, corp=corp)
# get available models
available = CorpStats.objects.visible_to(request.user).order_by('corp__corporation_name')
available = CorpStats.objects.visible_to(request.user).order_by('corp__corporation_name').select_related('corp')
# ensure we can see the requested model
if corpstats and corpstats not in available:
@@ -89,13 +89,49 @@ def corpstats_view(request, corp_id=None):
}
if corpstats:
members = corpstats.members.all()
mains = corpstats.mains.all()
unregistered = corpstats.unregistered_members.all()
character_list = CorpMember.objects.filter(corpstats=corpstats)
linked_chars = EveCharacter.objects.filter(
character_id__in=character_list.values_list('character_id', flat=True))
linked_chars = linked_chars | EveCharacter.objects.filter(
character_ownership__user__profile__main_character__corporation_id=corpstats.corp.corporation_id)
linked_chars = linked_chars.select_related('character_ownership',
'character_ownership__user__profile__main_character') \
.prefetch_related('character_ownership__user__character_ownerships') \
.prefetch_related('character_ownership__user__character_ownerships__character')
members = []
mains = {}
temp_ids = []
for char in linked_chars:
try:
main = char.character_ownership.user.profile.main_character
if main is not None:
if main.character_id not in mains:
mains[main.character_id] = {'main':main, 'alts':[]}
mains[main.character_id]['alts'].append(char)
if char.corporation_id == corpstats.corp.corporation_id:
members.append(char)
temp_ids.append(char.character_id)
except ObjectDoesNotExist:
pass
unregistered = character_list.exclude(character_id__in=temp_ids)
members = members
mains = mains
total_mains = len(mains)
unregistered = unregistered
context.update({
'corpstats': corpstats,
'members': members,
'mains': mains,
'total_mains': total_mains,
'unregistered': unregistered,
})

View File

@@ -19,7 +19,7 @@ Alliance Auth can be installed on any operating system. Dependencies are provide
### Python
Alliance Auth requires python3.4 or higher. Ensure it is installed on your server before proceeding.
Alliance Auth requires python3.5 or higher. Ensure it is installed on your server before proceeding.
Ubuntu:

View File

@@ -11,28 +11,27 @@ install_requires = [
'mysqlclient',
'dnspython',
'passlib',
'requests>=2.9.1',
'requests>=2.9.1,<3.0.0',
'bcrypt',
'python-slugify>=1.2',
'requests-oauthlib',
'semantic_version',
'redis<=2.10.6',
'celery>=4.0.2,<4.3.0',
'redis>=3.3.1,<4.0.0',
'celery>=4.3.0,<5.0.0',
'celery_once',
'django>=2.0,<3.0',
'django-bootstrap-form',
'django-registration==2.4',
'django-sortedm2m',
'django-redis-cache==1.8.1',
'django-celery-beat<=1.1.1',
'django-redis-cache>=2.1.0,<3.0.0',
'django-celery-beat>=1.1.1,<2.0.0',
'openfire-restapi',
'sleekxmpp',
'adarnauth-esi>=1.4.10,<2.0',
'kombu<=4.3.0',
'django-esi>=1.5.0,<2.0'
]
testing_extras = [
@@ -52,10 +51,9 @@ setup(
long_description_content_type='text/markdown',
install_requires=install_requires,
extras_require={
'testing': testing_extras,
':python_version=="3.4"': ['typing'],
'testing': testing_extras
},
python_requires='~=3.4',
python_requires='~=3.5',
license='GPLv2',
packages=['allianceauth'],
url='https://gitlab.com/allianceauth/allianceauth',