def get_alliance(name=None, allianceid=None): api = apiroot() try: if name is None: name = api.eve.CharacterName(ids=allianceid).characters[0].name if allianceid is None: allianceid = api.eve.CharacterID(names=name).characters[0].characterID alliance_list = api.eve.AllianceList().alliances except Exception as e: raise UnknownAllianceError("Error getting alliance list for alliance " "%s (%s): %s" % (name, allianceid, str(e))) found = False for alliance in alliance_list: if allianceid is not None and alliance.allianceID == allianceid: if name is None: name = alliance.name found = True if name is not None and alliance.name == name: if allianceid is None: allianceid = alliance.allianceID found = True if not found: raise UnknownAllianceError('Alliance %s (%s) not found in API' % (name, allianceid)) alliance, created = Alliance.objects.get_or_create( allianceid=allianceid, defaults={'name': name}) if not created: alliance.name = name alliance.save() return alliance
def view_topstats(request): api = apiroot() fwts = api.eve.FacWarTopStats() vplastweek = Bag(characters=[], corporations=[], factions=[]) for rank, entry in enumerate(fwts.characters.VictoryPointsLastWeek): image, corp = pilot_image_and_corp(entry.characterID) vplastweek.characters.append(Bag(rank=rank + 1, id=entry.characterID, name=entry.characterName, points=entry.victoryPoints, igb=igb.ShowInfoCharacter(entry.characterID), faction=image, corp="(Unknown)" if corp is None else corp.name, corpigb="" if corp is None else igb.ShowInfoCorp(corp.corporationid))) for rank, entry in enumerate(fwts.corporations.VictoryPointsLastWeek): vplastweek.corporations.append(Bag(rank=rank + 1, id=entry.corporationID, name=entry.corporationName, points=entry.victoryPoints, igb=igb.ShowInfoCorp(entry.corporationID), faction=corp_image(entry.corporationID))) for rank, entry in enumerate(fwts.factions.VictoryPointsLastWeek): vplastweek.factions.append(Bag(rank=rank + 1, id=entry.factionID, name=entry.factionName, points=entry.victoryPoints, igb="", faction=factionname_image(entry.factionName))) return direct_to_template(request, 'fw/topstats.html', extra_context={'tab': 'topstats', 'vplastweek': vplastweek, 'cacheduntil': datetime.datetime.utcfromtimestamp(fwts._meta.cachedUntil)})
def view_submitpilots(request): if request.method == 'POST': names = request.POST.get("names", "") if "I found" in names and "for you" in names: messages.add_message(request, messages.ERROR, 'You are trying to submit a locator trace. ' 'Please do that under "Submit Trace", use ' 'this form to submit pilot names.') return HttpResponseRedirect('/intel/submit/pilots/') names = [name.strip() for name in names.split("\n") if name != ''] api = apiroot() charids = api.eve.CharacterID(names=",".join(names)) charname2id = dict([(char.name, char.characterID) for char in charids.characters]) for name in names: if name in charname2id and charname2id[name] == 0: messages.add_message(request, messages.ERROR, "Pilot %s not found" % name) continue try: get_pilot(name, charname2id[name]) except: messages.add_message(request, messages.ERROR, "Pilot %s not found" % name) continue messages.add_message(request, messages.INFO, "Pilot %s added" % name) return HttpResponseRedirect('/intel/submit/pilots/') return direct_to_template(request, 'intel/submitpilots.html', extra_context={'tab': 'submitpilots'})
def get_membername(charid): grd = APIKey.objects.get(name='Gradient').corp() for row in grd.MemberTracking().members: if row.characterID == charid: return row.name api = apiroot() return api.eve.CharacterName(ids=charid).characters[0].name
def apicheck(self): if self.corporationid is None: return api = apiroot() corpinfo = api.corp.CorporationSheet(corporationID=self.corporationid) lastapi = datetime.datetime.utcfromtimestamp( corpinfo._meta.currentTime) if corpinfo.ceoID >= 90000000: # Not an NPC ceo, created = Pilot.objects.get_or_create_from_api( characterid=corpinfo.ceoID) if not created: ceo.apicheck() if hasattr(corpinfo, 'allianceID') and corpinfo.allianceID > 0: ally, created = Alliance.objects.get_or_create_from_api( allianceid=corpinfo.allianceID) self.update_intel(lastapi, faction=None) else: ally = None # Corp 1028105327 has no ticker ... if not isinstance(corpinfo.ticker, (basestring, int)): corpinfo.ticker = '' self.update_intel( lastapi, name=corpinfo.corporationName, alliance=ally, ticker=corpinfo.ticker, members=corpinfo.memberCount, lastapi=lastapi, do_api_check=False )
def corp_size(corpid): api = apiroot() try: result = api.corp.CorporationSheet(corporationID=corpid) return result.memberCount except: return 0
def from_request(cls, request): if cls.SESSIONVAR in request.session: return request.session[cls.SESSIONVAR] else: applicant = cls() charid = request.user.profile.characterid api = apiroot() applicant.charinfo = api.eve.CharacterInfo(characterID=charid) request.session[cls.SESSIONVAR] = applicant request.session.set_expiry(60 * 60 * 24 * 365) return applicant
def recheck(self): api = apiroot() info = api.eve.CharacterInfo(characterID=self.characterid) self.name = info.characterName self.corpid = info.corporationID self.corpname = info.corporation self.allianceid = getattr(info, 'allianceID', None) self.alliancename = getattr(info, 'alliance', '') em = APIKey.objects.get(name='Gradient').corp() cl = em.ContactList() self.standing = 0 for contact in cl.allianceContactList: if contact.contactID in [self.corpid, self.allianceid]: self.standing = contact.standing break self.lastchecked = datetime.datetime.utcnow()
def get_ownerid(arg): if '<' in arg or '>' in arg: return None api = apiroot() try: charid = api.eve.CharacterID(names=arg).characters[0].characterID if charid == 0: return None return charid except eveapi.Error as e: if e.code == 122: # Invalid or missing list of names return None raise except NameError: # Encoding error return None except UnicodeEncodeError: return None
def get_standings(): alliance_corps = {} standings = {} api = apiroot() for ally in api.eve.AllianceList().alliances: alliance_corps[ally.allianceID] = set() for corp in ally.memberCorporations: alliance_corps[ally.allianceID].add(corp.corporationID) grd = APIKey.objects.get(name="Gradient").corp() try: gcl = grd.ContactList() except: return standings for contact in gcl.allianceContactList: standings[contact.contactID] = "%+i" % contact.standing for corpid in alliance_corps.get(contact.contactID, []): standings[corpid] = "%+i" % contact.standing return standings
def update_all(): """ Update all intel information. """ api = apiroot() apicorp = APIKey.objects.get(name="Gradient").corp() alliances = set() # Alliance list for alliance in api.eve.AllianceList().alliances: alliances.add(alliance.allianceID) ally = get_alliance(alliance.name, alliance.allianceID) ally.ticker = alliance.shortName ally.members = alliance.memberCount ally.save() if ally.trackedentity_set.count() != 0: for corp in alliance.memberCorporations: get_corp(corpid=corp.corporationID) # Alliance standings # Bugged: contact.contactID can be dead alliance # for contact in apicorp.ContactList().allianceContactList: # try: # if contact.contactID in alliances: # entity = get_alliance(allianceid=contact.contactID) # else: # entity = get_corp(corpid=contact.contactID) # except UnknownEntityError: # continue # entity.standing = contact.standing # entity.save() # Tracked entities for tracked in TrackedEntity.objects.all(): if tracked.corporation: get_corp(tracked.corporation.name, tracked.corporation.corporationid) if tracked.alliance: get_alliance(tracked.alliance.name, tracked.alliance.allianceid) # Tracked pilots for pilot in Pilot.objects.all(): if (pilot.corporation.trackedentity_set.count() > 0 or (pilot.alliance is not None and pilot.alliance.trackedentity_set.count() > 0)): get_pilot(pilot.name, pilot.characterid)
def apicheck(self): if self.allianceid is None: return api = apiroot() allyapi = api.eve.AllianceList() lastapi = datetime.datetime.utcfromtimestamp( allyapi._meta.currentTime) for allyinfo in allyapi.alliances: if self.allianceid == allyinfo.allianceID: self.update_intel(lastapi, name=allyinfo.name, ticker=allyinfo.shortName, members=allyinfo.memberCount, lastapi=lastapi, do_api_check=False) return self.update_intel(lastapi, members=0, lastapi=lastapi, do_api_check=False)
def get_pilot(name=None, charid=None): api = apiroot() try: if charid is None: charid = api.eve.CharacterID(names=name).characters[0].characterID charinfo = api.eve.CharacterInfo(characterID=charid) except Exception as e: raise UnknownPilotError("Unknown pilot %s (%s): %s" % (name, charid, str(e))) if hasattr(charinfo, 'allianceID'): alliance = get_alliance(charinfo.alliance, charinfo.allianceID) else: alliance = None corp = get_corp(charinfo.corporation, charinfo.corporationID) pilot, created = Pilot.objects.get_or_create( name=charinfo.characterName, characterid=charinfo.characterID, defaults={'corporation': corp, 'alliance': alliance, 'security': charinfo.securityStatus}) if created: ChangeLog.objects.create(pilot=pilot, oldcorp=None, oldalliance=None, newcorp=corp, newalliance=alliance) else: if pilot.corporation != corp or pilot.alliance != alliance: ChangeLog.objects.create(pilot=pilot, oldcorp=pilot.corporation, oldalliance=pilot.alliance, newcorp=corp, newalliance=alliance) pilot.corporation = corp pilot.alliance = alliance pilot.security = charinfo.securityStatus pilot.save() return pilot
def get_corp(name=None, corpid=None): api = apiroot() try: if corpid is None: corpid = api.eve.CharacterID(names=name).characters[0].characterID corpsheet = api.corp.CorporationSheet(corporationID=corpid) if name is None: name = corpsheet.corporationName except Exception as e: raise UnknownCorporationError("Unknown corporation %s (%s): %s" % (name, corpid, str(e))) if hasattr(corpsheet, 'allianceName'): alliance = get_alliance(corpsheet.allianceName, corpsheet.allianceID) else: alliance = None corp, created = Corporation.objects.get_or_create( corporationid=corpid, defaults={'name': name, 'alliance': alliance, 'ticker': corpsheet.ticker, 'members': corpsheet.memberCount}) if not created: # Corp existed. If the alliance changed, all pilots change. if corp.alliance != alliance: for pilot in corp.pilot_set.all(): ChangeLog.objects.create(pilot=pilot, oldcorp=corp, oldalliance=corp.alliance, newcorp=corp, newalliance=alliance) pilot.alliance = alliance pilot.save() # Update in any case to change the timestamp corp.name = name corp.alliance = alliance corp.ticker = corpsheet.ticker corp.members = corpsheet.memberCount corp.save() return corp
def handle_messages_view(request, characterid=None): api = apiroot() if characterid is not None: name = api.eve.CharacterName(ids=characterid).characters[0].name else: name = None if request.method == 'POST': if characterid is not None: Message.objects.create( characterid=characterid, name=name, read_by_customer=False, read_by_handler=True, handler=request.user, text=request.POST.get('text', '') ) return HttpResponseRedirect('/shop/handle/messages/%s/' % characterid) message_list = Message.objects.all() if characterid is not None: message_list = message_list.filter(characterid=characterid) paginator = Paginator(message_list, 10) try: pagenum = int(request.GET.get('page', None)) except (ValueError, TypeError): pagenum = paginator.num_pages try: page = paginator.page(pagenum) except (EmptyPage, InvalidPage): page = paginator.page(paginator.num_pages) context = {} context['is_paginated'] = True context['page_obj'] = page context['message_list'] = page.object_list context['characterid'] = characterid context['charactername'] = name for message in page.object_list: message.read_by_handler = True message.save() return direct_to_template(request, 'shop/handle-messages.html', extra_context=context)
def view_corps(request): corp_lists = {} known_members = {} amarr_standings = 0 qs = Corporation.objects.exclude( faction=None ).exclude( members=0 ).order_by("-members", "name") for corp in qs: corp_lists.setdefault(corp.faction.name, []) corp_lists[corp.faction.name].append(corp) known_members.setdefault(corp.faction.name, 0) if corp.members is not None: known_members[corp.faction.name] += corp.members if (corp.faction.name == 'Amarr Empire' and corp.standing is not None and corp.standing == -10): amarr_standings += corp.members api = apiroot() fws = api.eve.FacWarStats() all_members = dict((row.factionName, row.pilots) for row in fws.factions) return direct_to_template(request, 'fw/corps.html', extra_context={ 'tab': 'corps', 'amarr_standings': amarr_standings, 'amarr_percentage': 100 * (amarr_standings / float(all_members['Amarr Empire'])), 'corp_lists': [(name, corp_lists[name], image, known_members[name], all_members[name], 100 * (known_members[name] / float(all_members[name])), ) for (name, image) in [('Amarr Empire', '/media/img/icons/amarr.png'), ('Minmatar Republic', '/media/img/icons/minmatar.png'), ('Caldari State', '/media/img/icons/caldari.png'), ('Gallente Federation', '/media/img/icons/gallente.png')] ]})
def get_evsco_feeds(entities_per_feed=1): """ Generate EVSCO feeds from our standings and all entities active in the Republic in the last 28 days. """ key = APIKey.objects.get(name='Gradient') cl = key.corp().ContactList() api = apiroot() al = api.eve.AllianceList() all_alliances = set(a.allianceID for a in al.alliances) corpids = set() allianceids = set() for contact in cl.allianceContactList: if contact.contactID in all_alliances: allianceids.add(contact.contactID) else: corpids.add(contact.contactID) feeds = [] for corpid in corpids: feeds.append("http://eve-kill.net/?a=idfeed&corp=%s" % corpid) for allianceid in allianceids: feeds.append("http://eve-kill.net/?a=idfeed&alliance=%s" % allianceid) return feeds
def apicheck(self): if self.characterid is None: return api = apiroot() charinfo = api.eve.CharacterInfo(characterID=self.characterid) corp, created = Corporation.objects.get_or_create( corporationid=charinfo.corporationID) if hasattr(charinfo, 'allianceID'): ally, created = Alliance.objects.get_or_create( allianceid=charinfo.allianceID) else: ally = None lastapi = datetime.datetime.utcfromtimestamp( charinfo._meta.currentTime) self.update_intel( lastapi, name=charinfo.characterName, corporation=corp, alliance=ally, security=charinfo.securityStatus, lastapi=lastapi, do_api_check=False, )
gmt = grd.MemberTracking() prospects = [m.name for m in gms.members if "Prospect" in [t.titleName for t in m.titles]] non_prospects = [m.name for m in gms.members if "Prospect" not in [t.titleName for t in m.titles]] everyone = [m.name for m in gms.members] c.execute("UPDATE vote SET allowed_voters = %s WHERE id IN (163, 164)", ["".join((name + "\n") for name in non_prospects)]) for name in everyone: c.execute("INSERT INTO vote_option (vote_id, name) " "VALUES (%s, %s)", [163, name]) from emtools.ccpeve.models import apiroot api = apiroot() old = time.time() - (60*60*24*365*2) younger_than_two_years = [] for m in gmt.members: cs = api.eve.CharacterInfo(characterID=m.characterID) license = cs.employmentHistory[-1].startDate if license > old: younger_than_two_years.append(m.name) for name in younger_than_two_years: c.execute("INSERT INTO vote_option (vote_id, name) " "VALUES (%s, %s)", [164, name])
def add_transaction_info(grd): api = apiroot() standingmap = dict((row.contactID, row.standing) for row in grd.ContactList().allianceContactList) for entry in Transaction.objects.filter(info=None): info = TransactionInfo() info.transaction = entry info.account = Account.objects.get(accountkey=entry.accountkey) info.typename = get_typename(entry.typeid) if info.typename is None: continue try: pl = PriceList.objects.get(typeid=entry.typeid) info.cost = pl.productioncost info.safetymargin = pl.safetymargin except PriceList.DoesNotExist: try: index = Index.objects.filter(typeid=entry.typeid)[0:1].get() info.cost = index.republic info.safetymargin = 1.0 except Index.DoesNotExist: info.cost = 0.0 info.safetymargin = 1.1 info.stationname = get_itemname(entry.stationid) if entry.characterid is not None: info.charactername = get_membername(entry.characterid) try: charinfo = api.eve.CharacterInfo(characterID=entry.clientid) except: pass else: info.clientname = charinfo.characterName info.clientstanding = standingmap.get(charinfo.characterID, None) info.clientcorp = charinfo.corporation info.clientcorpid = charinfo.corporationID info.clientcorpstanding = standingmap.get(charinfo.corporationID, None) if hasattr(charinfo, 'allianceID'): info.clientalliance = charinfo.alliance info.clientallianceid = charinfo.allianceID info.clientalliancestanding = standingmap.get( charinfo.allianceID, None) info.save() transaction.commit() continue # It's a CorporationID! info.clientname = None info.clientstanding = None info.clientcorpid = entry.clientid name = get_itemname(entry.clientid) if name is not None: # NPC corp info.clientcorp = name info.clientcorpstanding = standingmap.get(entry.clientid, None) info.save() transaction.commit() continue # Player corp try: corpinfo = api.eve.CorporationSheet(corporationID=entry.clientid) except: # Something bad happened, ignore this transaction.rollback() continue info.clientcorp = corpinfo.corporationName info.clientcorpstanding = standingmap.get(corpinfo.corporationID, None) if hasattr(corpinfo, 'allianceID'): info.clientalliance = corpinfo.allianceName info.clientallianceid = corpinfo.allianceID info.clientalliancestanding = standingmap.get(corpinfo.allianceID, None) info.save() transaction.commit()
def auth_view(request): shopuser = ShopUser.from_request(request) shopinfo = ShopInfo() context = {'shopinfo': shopinfo, 'shopuser': shopuser} if request.method == 'GET': context['next_url'] = request.GET.get('next', '/shop/') return direct_to_template(request, 'shop/auth.html', extra_context=context) # POST context['next_url'] = request.POST.get('next') keyid = request.POST.get('keyid') vcode = request.POST.get('vcode') characterid = request.POST.get('characterid') if keyid is None or vcode is None: return direct_to_template(request, 'shop/auth.html', extra_context=context) context['keyid'] = keyid context['vcode'] = vcode if 'grdshop' not in vcode: context['error'] = 'bad-vcode' return direct_to_template(request, 'shop/auth.html', extra_context=context) # Check API key api = apiroot() api = api.auth(keyID=keyid, vCode=vcode) try: keyinfo = api.account.APIKeyInfo() except Exception as e: context['error'] = 'api-error' context['message'] = ('Error %s during API call: %s' % (e.__class__.__name__, str(e))) return direct_to_template(request, 'shop/auth.html', extra_context=context) context['characters'] = keyinfo.key.characters if len(keyinfo.key.characters) == 1: char = keyinfo.key.characters[0] elif len(keyinfo.key.characters) > 1 and characterid is None: return direct_to_template(request, 'shop/auth.html', extra_context=context) else: char = None for char_entry in keyinfo.key.characters: if str(char_entry.characterID) == characterid: char = char_entry break if char is None: context['error'] = 'char-not-found' return direct_to_template(request, 'shop/auth.html', extra_context=context) user = shopuser user.characterid = char.characterID user.name = char.characterName try: user.recheck() except Exception as e: context['error'] = 'api-error' context['message'] = ('Error %s during API call: %s' % (e.__class__.__name__, str(e))) return direct_to_template(request, 'shop/auth.html', extra_context=context) request.session.set_expiry(60 * 60 * 24 * 365) user.save(request) return HttpResponseRedirect(context['next_url'])
def authenticate_users(user=None): """ Authenticate all users. Go through MyBB users. If they do not have a profile, drop groups. If they have a profile, if it's not active, drop groups. Go through groups. """ start = datetime.datetime.utcnow() db = utils.connect('emforum') # dict of name -> (titles, freeformtitle) grddetails = get_gradient_details() # set of entityID allies = get_allies() if user is None: users = get_mybbusers(db) else: users = get_mybbusers(db, user.profile.mybb_uid) api = apiroot() totalcount = 0 activecount = 0 for mybbuser in users: if mybbuser.has_group('Banned'): continue totalcount += 1 oldcorp = None if mybbuser.profile: oldcorp = mybbuser.profile.corp reason = update_single_user(api, mybbuser, grddetails, allies) if len(mybbuser.toadd) == 0: active = False else: active = True activecount += 1 if mybbuser.profile: if mybbuser.profile.usertitle: usertitle = '<b>%s</b><br />' % mybbuser.profile.usertitle elif mybbuser.has_group('Council'): usertitle = '<b>Council Member</b><br />' elif mybbuser.has_group('Diplomats'): usertitle = '<b>Alliance Diplomat</b><br />' else: usertitle = '' if mybbuser.profile.alliance: usertitle += '%s<br />%s' % (mybbuser.profile.corp, mybbuser.profile.alliance) elif mybbuser.profile.corp: usertitle += mybbuser.profile.corp mybbuser.usertitle = usertitle mybbuser.save() if mybbuser.profile: mybbuser.profile.active = active mybbuser.profile.save() newcorp = mybbuser.profile.corp change_description = mybbuser.change_description() if change_description is not None: message = "User %s %s: %s" % (mybbuser.username, change_description, reason) if not active: message += ", marking inactive" log.info("%s" % (message,)) if mybbuser.profile: for corp in set([oldcorp, newcorp]): if corp is not None: AuthLog.objects.create(corp=corp, message=message) else: AuthLog.objects.create(corp=None, message=message) db.commit() end = datetime.datetime.utcnow() if user is None: log.info("Authenticated %i active users of %i in %s" % (activecount, totalcount, str(end - start)))
def main_handle_apikey(request): profile = request.user.profile keyid = request.POST.get('keyID', None) vcode = request.POST.get('vCode', None) selected_charid = request.POST.get('characterID', None) dorename = request.POST.get('dorename', False) api = apiroot() if vcode is not None and not 'emforum' in vcode: messages.add_message(request, messages.ERROR, "Please change your Verification Code so " "it contains the string 'emforum'") return HttpResponseRedirect('/auth/') try: chars = api.account.Characters(keyID=keyid, vCode=vcode) chars = [(row.name, row.characterID) for row in chars.characters] except Exception as e: messages.add_message(request, messages.ERROR, "Error during API call: %s" % str(e)) return HttpResponseRedirect('/auth/') if len(chars) == 1: charname, charid = chars[0] else: charname = None charid = None for thischarname, thischarid in chars: if (str(thischarid) == selected_charid or thischarname.lower() == profile.mybb_username.lower()): charname = thischarname charid = thischarid break if charname is None: return direct_to_template( request, 'emauth/main.html', extra_context={'state': 'select_character', 'character_list': sorted(chars), 'keyID': keyid, 'vCode': vcode, 'tab': 'auth'}) if charname != profile.mybb_username: if not dorename: return direct_to_template( request, 'emauth/main.html', extra_context={'state': 'ask_rename', 'keyID': keyid, 'vCode': vcode, 'characterID': charid, 'forum_name': profile.mybb_username, 'char_name': charname, 'tab': 'auth'}) else: db = utils.connect('emforum') c = db.cursor() if not userauth.mybb_setusername(c, profile.mybb_uid, charname): db.rollback() messages.add_message(request, messages.ERROR, "That username already exists. Please " "contact a forum administrator to " "resolve this conflict.") return HttpResponseRedirect('/auth/') db.commit() messages.add_message(request, messages.INFO, "Forum username changed to %s" % charname) # Forum username is correct now # Set the profile info charinfo = api.eve.CharacterInfo(characterID=charid) profile.name = charinfo.characterName profile.characterid = charinfo.characterID profile.corp = charinfo.corporation profile.corpid = charinfo.corporationID profile.alliance = getattr(charinfo, 'alliance', None) profile.allianceid = getattr(charinfo, 'allianceID', None) profile.active = True profile.save() try: userauth.authenticate_users(profile.user) messages.add_message(request, messages.INFO, "Authentication successful.") except userauth.AuthenticationError as e: messages.add_message(request, messages.ERROR, str(e)) return HttpResponseRedirect('/auth/')
def audit_apikey(request, userid, apikey, visibility): try: api = apiroot().auth(keyID=userid, vCode=apikey) characters = api.account.Characters() except Exception as e: messages.add_message(request, messages.ERROR, "Error during API call: %s" % (str(e),)) return None user = User(userid=userid, visibility=visibility) user.save() for row in characters.characters: try: charapi = api.character(row.characterID) sheet = charapi.CharacterSheet() standings = charapi.Standings() info = api.eve.CharacterInfo(characterID=row.characterID) except Exception as e: messages.add_message(request, messages.ERROR, "Error during API call: %s" % (str(e),)) return None char = Character(user=user, characterid=row.characterID, name=row.name, gender=sheet.gender, race=sheet.race, bloodline=sheet.bloodLine, security=info.securityStatus, graduation=utc(sheet.DoB), skillpoints=sum(skill.skillpoints for skill in sheet.skills), wallet=sheet.balance, corpid=sheet.corporationID, corpname=sheet.corporationName, corpjoin=utc(info.corporationDate)) if hasattr(sheet, 'allianceID') and sheet.allianceID > 0: char.allianceid = sheet.allianceID char.alliancename = sheet.allianceName if hasattr(info, 'allianceDate'): char.alliancejoin = utc(info.allianceDate) char.save() for skill in sheet.skills: typename = get_typename(skill.typeID) if typename is None: typename = "<TypeID %s>" % skill.typeID Skill.objects.create(character=char, typeid=skill.typeID, typename=typename, skillpoints=skill.skillpoints, level=skill.level, published=skill.published) for bonus in ['charismaBonus', 'intelligenceBonus', 'memoryBonus', 'perceptionBonus', 'willpowerBonus']: if not hasattr(sheet.attributeEnhancers, bonus): continue name = bonus[:-5].title() obj = getattr(sheet.attributeEnhancers, bonus) Implant.objects.create(character=char, attribute=name, augmentor=obj.augmentatorName, value=obj.augmentatorValue) for faction in standings.characterNPCStandings.factions: Standing.objects.create(character=char, entitytype="faction", fromid=faction.fromID, fromname=faction.fromName, standing=faction.standing) for corp in standings.characterNPCStandings.NPCCorporations: Standing.objects.create(character=char, entitytype="corp", fromid=corp.fromID, fromname=corp.fromName, standing=corp.standing) for agent in standings.characterNPCStandings.agents: Standing.objects.create(character=char, entitytype="agent", fromid=agent.fromID, fromname=agent.fromName, standing=agent.standing) return user
def get_charname(charid): api = apiroot() try: return api.eve.CharacterName(ids=charid).characters[0].name except: return None