2017-03-23 22:54:25 -04:00

64 lines
2.2 KiB
Python
Executable File

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.db import models
from django.contrib.auth.models import User, Permission
from authentication.managers import CharacterOwnershipManager, StateManager
from eveonline.models import EveCharacter, EveCorporationInfo, EveAllianceInfo
@python_2_unicode_compatible
class State(models.Model):
name = models.CharField(max_length=20, unique=True)
permissions = models.ManyToManyField(Permission, blank=True)
priority = models.IntegerField(unique=True)
member_characters = models.ManyToManyField(EveCharacter)
member_corporations = models.ManyToManyField(EveCorporationInfo)
member_alliances = models.ManyToManyField(EveAllianceInfo)
public = models.BooleanField(default=False)
objects = StateManager()
class Meta:
ordering = ['priority']
def __str__(self):
return self.name
def get_guest_state():
return State.objects.update_or_create(name='Guest', defaults={'priority': 0, 'public': True})[0]
@python_2_unicode_compatible
class UserProfile(models.Model):
class Meta:
default_permissions = ('change',)
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
main_character = models.OneToOneField(EveCharacter, blank=True, null=True, on_delete=models.SET_NULL)
state = models.ForeignKey(State, on_delete=models.SET(get_guest_state))
def assign_state(self, commit=True):
self.state = State.objects.get_for_user(self.user)
if commit:
self.save(update_fields=['state'])
def __str__(self):
return "%s Profile" % self.user
@python_2_unicode_compatible
class CharacterOwnership(models.Model):
class Meta:
default_permissions = ('change', 'delete')
character = models.OneToOneField(EveCharacter, on_delete=models.CASCADE, related_name='character_ownership')
owner_hash = models.CharField(max_length=28, unique=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='character_ownerships')
objects = CharacterOwnershipManager()
def __str__(self):
return "%s: %s" % (self.user, self.character)