from datetime import date import requests from dateutil import parser from django.contrib.auth.models import User from django.db import models from django.utils import timezone class Station(models.Model): station = { "station_id": 60014740, "name": "Balle VII - Moon 17 - Center for Advanced Studies School", "type_id": 57, "position": { "x": 1888188211200, "y": -102009446400, "z": 859582832640 }, "system_id": 30002634, "reprocessing_efficiency": 0.5, "reprocessing_stations_take": 0.05, "max_dockable_ship_volume": 50000000, "office_rental_cost": 19056579, "services": [ "bounty-missions", "courier-missions", "reprocessing-plant", "market", "cloning", "repair-facilities", "factory", "fitting", "news", "insurance", "docking", "office-rental", "loyalty-point-store", "navy-offices" ], "owner": 1000169, "race_id": 8 } id = models.IntegerField(primary_key=True) name = models.CharField(max_length=100, blank=True, null=True) def update(self): res = requests.get(f'https://esi.tech.ccp.is/latest/universe/stations/{self.id}/?datasource=tranquility') data = res.json() self.name = data['name'] self.save() class Alliance(models.Model): # https://esi.tech.ccp.is/latest/alliances/{alliance_id}/?datasource=tranquility alliance = { "name": "Goonswarm Federation", "creator_id": 240070320, "creator_corporation_id": 459299583, "ticker": "CONDI", "date_founded": "2010-06-01T05:36:00Z", "executor_corporation_id": 1344654522 } id = models.IntegerField(primary_key=True) name = models.CharField(max_length=255, blank=True, null=True) creator = models.ForeignKey('Character', on_delete=models.SET_NULL, null=True) creator_corporation = models.ForeignKey('Corporation', on_delete=models.SET_NULL, null=True, related_name='+') ticker = models.CharField(max_length=20, blank=True, null=True) date_founded = models.DateTimeField(blank=True, null=True) executor_corporation = models.ForeignKey('Corporation', on_delete=models.SET_NULL, null=True, related_name='executor') updated = models.DateTimeField(auto_now=True) def update(self): res = requests.get(f'https://esi.tech.ccp.is/latest/alliances/{self.id}/?datasource=tranquility') data = res.json() self.name = data['name'] self.creator, _ = Character.objects.get_or_create(id=data['creator_id']) self.creator_corporation, _ = Corporation.objects.get_or_create(id=data['creator_corporation_id']) self.ticker = data['ticker'] self.date_founded = parser.parse(data['date_founded']) self.executor_corporation, _ = Corporation.objects.get_or_create(id=data['executor_corporation_id']) self.save() def __str__(self): return self.name if self.name else super().__str__() class Corporation(models.Model): corp = { "name": "Ajurna Jakar Corporation", "ticker": "AJC12", "member_count": 1, "ceo_id": 197587263, "tax_rate": 0, "creator_id": 197587263, "description": "Enter a description of your corporation here.", "date_founded": "2018-04-20T08:09:24Z", "url": "http://", "home_station_id": 60014740, "shares": 1000 } corp_in_alliance = { "name": "The Dream Team", "ticker": "-TDT-", "member_count": 13, "ceo_id": 874898855, "tax_rate": 0.15, "creator_id": 213704116, "alliance_id": 1354830081, "description": "We are an \"Invite Only\" Corp", "date_founded": "2010-11-15T22:04:00Z", "url": "", "home_station_id": 60013960, "shares": 1000 } id = models.IntegerField(primary_key=True) name = models.CharField(max_length=255, null=True, blank=True) ticker = models.CharField(max_length=10, null=True, blank=True) ceo = models.ForeignKey('Character', on_delete=models.SET_NULL, null=True) tax_rate = models.IntegerField(default=0) creator = models.ForeignKey('Character', on_delete=models.SET_NULL, null=True, related_name='+') alliance = models.ForeignKey(Alliance, on_delete=models.SET_NULL, null=True) date_founded = models.DateTimeField(default=timezone.now) description = models.TextField(blank=True, null=True) url = models.URLField(blank=True, null=True) home_station = models.ForeignKey(Station, on_delete=models.SET_NULL, null=True) updated = models.DateTimeField(auto_now=True) def update(self): res = requests.get(f'https://esi.tech.ccp.is/latest/corporations/{self.id}/?datasource=tranquility') data: dict = res.json() self.name = data['name'] self.ticker = data['ticker'] self.ceo, _ = Character.objects.get_or_create(id=data['ceo_id']) self.tax_rate = data['tax_rate'] self.creator, _ = Character.objects.get_or_create(id=data['creator_id']) if 'alliance_id' in data: self.alliance, _ = Alliance.objects.get_or_create(id=data['alliance_id']) # The backup date here is the release date of eve-online it # raises a warning but timezones don't really matter here. self.date_founded = parser.parse(data['date_founded']) if 'date_founded' in data else date(2003, 5, 6) self.description = data['description'] self.url = data.get('url', None) self.home_station, _ = Station.objects.get_or_create(id=data['home_station_id']) self.save() def __str__(self): return self.name if self.name else super().__str__() class Character(models.Model): character = { "corporation_id": 98556532, "birthday": "2006-01-19T15:10:00Z", "name": "Ajurna Jakar", "gender": "male", "race_id": 8, "bloodline_id": 8, "description": "lots of text", "ancestry_id": 18, "security_status": 5.0093381834 } id = models.IntegerField(primary_key=True) corp = models.ForeignKey(Corporation, on_delete=models.SET_NULL, null=True) name = models.CharField(max_length=50, null=True) security_status = models.FloatField(default=0.0) birthday = models.DateTimeField(default=timezone.now) updated = models.DateTimeField(auto_now=True) def update(self): res = requests.get(f'https://esi.tech.ccp.is/latest/characters/{self.id}/?datasource=tranquility') data = res.json() if 'error' in data: self.name = 'NPC Character' self.save() return self.corp, _ = Corporation.objects.get_or_create(id=data['corporation_id']) self.name = data['name'] self.security_status = data['security_status'] self.birthday = parser.parse(data['birthday']) self.save() def __str__(self): return self.name if self.name else super().__str__()