Remove references to legacy is_blue attributes

Provide simple EVE model creation forms with ID, populate the rest from providers
Correct handling of non-main characters in signals
This commit is contained in:
Adarnof 2017-03-25 17:59:38 -04:00
parent 54262a850d
commit 64e7c6093e
6 changed files with 98 additions and 38 deletions

View File

@ -113,5 +113,7 @@ def assign_state_on_reactivate(sender, instance, *args, **kwargs):
@receiver(post_save, sender=EveCharacter)
def check_state_on_character_update(sender, instance, *args, **kwargs):
# if this is a main character updating, check that user's state
if instance.userprofile:
try:
instance.userprofile.assign_state()
except UserProfile.DoesNotExist:
pass

View File

@ -16,8 +16,6 @@ class CorpStatsQuerySet(models.QuerySet):
queries.append(models.Q(corp__corporation_id=char.corporation_id))
if user.has_perm('corputils.view_alliance_corpstats'):
queries.append(models.Q(corp__alliance__alliance_id=char.alliance_id))
if user.has_perm('corputils.view_blue_corpstats'):
queries.append(models.Q(corp__is_blue=True))
# filter based on queries
if queries:

View File

@ -1,14 +1,81 @@
from __future__ import unicode_literals
from django.contrib import admin
from django import forms
from django.core.exceptions import ObjectDoesNotExist
from eveonline.models import EveCharacter
from eveonline.models import EveAllianceInfo
from eveonline.models import EveCorporationInfo
admin.site.register(EveAllianceInfo)
admin.site.register(EveCorporationInfo)
from eveonline.managers import EveManager
from eveonline.providers import ObjectNotFound
class EveEntityForm(forms.ModelForm):
id = forms.IntegerField(min_value=1)
entity_type_name = None # override in subclass
entity_model_class = None
def clean_id(self):
try:
assert getattr(EveManager, 'get_%s' % self.entity_type_name)(self.cleaned_data['id'])
except (AssertionError, ObjectNotFound):
raise forms.ValidationError('%s with ID %s not found.' % (self.entity_type_name, self.cleaned_data['id']))
if self.entity_model_class.objects.filter(
**{'%s_id' % self.entity_type_name: self.cleaned_data['id']}).exists():
raise forms.ValidationError(
'%s with ID %s already exists.' % (self.entity_type_name, self.cleaned_data['id']))
return self.cleaned_data['id']
def save(self, commit=True):
return getattr(EveManager, 'create_%s' % self.entity_type_name)(self.cleaned_data['id'])
def save_m2m(self):
pass
class EveCharacterForm(EveEntityForm):
entity_model_class = EveCharacter
entity_type_name = 'character'
class Meta:
fields = ['id']
model = EveCharacter
class EveCorporationForm(EveEntityForm):
entity_model_class = EveCorporationInfo
entity_type_name = 'corporation'
class Meta:
fields = ['id']
model = EveCorporationInfo
class EveAllianceForm(EveEntityForm):
entity_model_class = EveAllianceInfo
entity_type_name = 'alliance'
class Meta:
fields = ['id']
model = EveAllianceInfo
@admin.register(EveCorporationInfo)
class EveCorporationInfoAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if not obj or not obj.pk:
return EveCorporationForm
return super(EveCorporationInfoAdmin, self).get_form(request, obj=obj, **kwargs)
@admin.register(EveAllianceInfo)
class EveAllianceInfoAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if not obj or not obj.pk:
return EveAllianceForm
return super(EveAllianceInfoAdmin, self).get_form(request, obj=obj, **kwargs)
@admin.register(EveCharacter)
class EveCharacterAdmin(admin.ModelAdmin):
search_fields = ['character_name', 'corporation_name', 'alliance_name', 'character_ownership__user__username']
list_display = ('character_name', 'corporation_name', 'alliance_name', 'user', 'main_character')
@ -27,5 +94,7 @@ class EveCharacterAdmin(admin.ModelAdmin):
except (AttributeError, ObjectDoesNotExist):
return None
admin.site.register(EveCharacter, EveCharacterAdmin)
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)

View File

@ -58,28 +58,26 @@ class EveManager(object):
return cls.get_adapter().get_alliance(alliance_id)
@staticmethod
def create_alliance(id, is_blue=False):
return EveManager.create_alliance_obj(EveManager.get_alliance(id), is_blue=is_blue)
def create_alliance(id):
return EveManager.create_alliance_obj(EveManager.get_alliance(id))
@staticmethod
def create_alliance_obj(alliance, is_blue=False):
def create_alliance_obj(alliance):
return EveAllianceInfo.objects.create(
alliance_id=alliance.id,
alliance_name=alliance.name,
alliance_ticker=alliance.ticker,
executor_corp_id=alliance.executor_corp_id,
is_blue=is_blue,
)
@staticmethod
def update_alliance(id, is_blue=None):
return EveManager.update_alliance_obj(EveManager.get_alliance(id), is_blue=is_blue)
def update_alliance(id):
return EveManager.update_alliance_obj(EveManager.get_alliance(id))
@staticmethod
def update_alliance_obj(alliance, is_blue=None):
def update_alliance_obj(alliance):
model = EveAllianceInfo.objects.get(alliance_id=alliance.id)
model.executor_corp_id = alliance.executor_corp_id
model.is_blue = model.is_blue if is_blue is None else is_blue
model.save()
return model
@ -89,23 +87,21 @@ class EveManager(object):
alliance = EveManager.get_alliance(id)
for corp_id in alliance.corp_ids:
if not EveCorporationInfo.objects.filter(corporation_id=corp_id).exists():
EveManager.create_corporation(corp_id, is_blue=alliance_model.is_blue)
EveManager.create_corporation(corp_id)
EveCorporationInfo.objects.filter(corporation_id__in=alliance.corp_ids).update(alliance=alliance_model)
EveCorporationInfo.objects.filter(alliance=alliance_model).exclude(corporation_id__in=alliance.corp_ids).update(
alliance=None)
if alliance_model.is_blue:
EveCorporationInfo.objects.filter(alliance=alliance_model).update(is_blue=True)
@classmethod
def get_corporation(cls, corp_id):
return cls.get_adapter().get_corp(corp_id)
@staticmethod
def create_corporation(id, is_blue=False):
return EveManager.create_corporation_obj(EveManager.get_corporation(id), is_blue=is_blue)
def create_corporation(id):
return EveManager.create_corporation_obj(EveManager.get_corporation(id))
@staticmethod
def create_corporation_obj(corp, is_blue=False):
def create_corporation_obj(corp):
try:
alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id)
except EveAllianceInfo.DoesNotExist:
@ -116,22 +112,20 @@ class EveManager(object):
corporation_ticker=corp.ticker,
member_count=corp.members,
alliance=alliance,
is_blue=is_blue,
)
@staticmethod
def update_corporation(id, is_blue=None):
return EveManager.update_corporation_obj(EveManager.get_corporation(id), is_blue=is_blue)
def update_corporation(id):
return EveManager.update_corporation_obj(EveManager.get_corporation(id))
@staticmethod
def update_corporation_obj(corp, is_blue=None):
def update_corporation_obj(corp):
model = EveCorporationInfo.objects.get(corporation_id=corp.id)
model.member_count = corp.members
try:
model.alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id)
except EveAllianceInfo.DoesNotExist:
model.alliance = None
model.is_blue = model.is_blue if is_blue is None else is_blue
model.save()
return model

View File

@ -12,13 +12,13 @@ import logging
logger = logging.getLogger(__name__)
@task
def update_corp(corp_id, is_blue=None):
EveManager.update_corporation(corp_id, is_blue=is_blue)
def update_corp(corp_id):
EveManager.update_corporation(corp_id)
@task
def update_alliance(alliance_id, is_blue=None):
EveManager.update_alliance(alliance_id, is_blue=is_blue)
def update_alliance(alliance_id):
EveManager.update_alliance(alliance_id)
EveManager.populate_alliance(alliance_id)
@ -26,24 +26,22 @@ def update_alliance(alliance_id, is_blue=None):
def run_corp_update():
# generate member corps
for corp_id in settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS:
is_blue = True if corp_id in settings.STR_BLUE_CORP_IDS else False
try:
if EveCorporationInfo.objects.filter(corporation_id=corp_id).exists():
update_corp(corp_id, is_blue=is_blue)
update_corp(corp_id)
else:
EveManager.create_corporation(corp_id, is_blue=is_blue)
EveManager.create_corporation(corp_id)
except ObjectNotFound:
logger.warn('Bad corp ID in settings: %s' % corp_id)
# generate member alliances
for alliance_id in settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS:
is_blue = True if alliance_id in settings.STR_BLUE_ALLIANCE_IDS else False
try:
if EveAllianceInfo.objects.filter(alliance_id=alliance_id).exists():
logger.debug("Updating existing owner alliance model with id %s" % alliance_id)
update_alliance(alliance_id, is_blue=is_blue)
update_alliance(alliance_id)
else:
EveManager.create_alliance(alliance_id, is_blue=is_blue)
EveManager.create_alliance(alliance_id)
EveManager.populate_alliance(alliance_id)
except ObjectNotFound:
logger.warn('Bad alliance ID in settings: %s' % alliance_id)

View File

@ -49,7 +49,6 @@ class CorpStat(object):
self.corp = EveCorporationInfo.objects.get(corporation_id=corp_id)
self.n_fats = Fat.objects.filter(character__corporation_id=self.corp.corporation_id).filter(
fatlink__fatdatetime__gte=start_of_month).filter(fatlink__fatdatetime__lte=start_of_next_month).count()
self.blue = self.corp.is_blue
def avg_fat(self):
return "%.2f" % (float(self.n_fats) / float(self.corp.member_count))