diff --git a/authentication/signals.py b/authentication/signals.py index 399b92e7..8f652d0e 100644 --- a/authentication/signals.py +++ b/authentication/signals.py @@ -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 diff --git a/corputils/managers.py b/corputils/managers.py index 1508674c..fd064adc 100644 --- a/corputils/managers.py +++ b/corputils/managers.py @@ -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: diff --git a/eveonline/admin.py b/eveonline/admin.py index 6c1f2623..ff25e698 100644 --- a/eveonline/admin.py +++ b/eveonline/admin.py @@ -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) diff --git a/eveonline/managers.py b/eveonline/managers.py index 70cbba0b..052f8d46 100644 --- a/eveonline/managers.py +++ b/eveonline/managers.py @@ -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 diff --git a/eveonline/tasks.py b/eveonline/tasks.py index 81a9b021..7e8ee3f5 100644 --- a/eveonline/tasks.py +++ b/eveonline/tasks.py @@ -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) diff --git a/fleetactivitytracking/views.py b/fleetactivitytracking/views.py index 947011d6..895f3cf5 100644 --- a/fleetactivitytracking/views.py +++ b/fleetactivitytracking/views.py @@ -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))