# -*- coding: utf-8 -*- from collections import namedtuple from flask import g from flask_mako import render_template from ._provided import blueprint, logger from ..exceptions import EVEAPIForbiddenError SCOPES = {"esi-corporations.read_corporation_membership.v1"} _Member = namedtuple("_Member", ["id", "name", "roles"]) def _weight(role): """Return an integer weight for the given role for sorting purposes.""" if role == "CEO": return 0 return 100 def get_members(): """Return a list of the members of the user's corporation. Members are returned as 3-namedtuples of (id, name, roles). An empty list is returned if there was some error with tokens. """ token = g.auth.get_token() if not token: return [] corp_id = g.config.get("corp.id") logger.debug("Fetching member list for corp id=%d", corp_id) try: ceo_id = g.eve.esi(token).v2.corporations(corp_id).get()["ceo_id"] cids_r = g.eve.esi(token).v2.corporations(corp_id).members.get() cids = ",".join(sorted(str(item["character_id"]) for item in cids_r)) resp = g.eve.esi(token).v1.characters.names.get(character_ids=cids) except EVEAPIForbiddenError: return [] members = [_Member(item["character_id"], item["character_name"], "CEO" if item["character_id"] == ceo_id else None) for item in resp] members.sort(key=lambda m: (_weight(m.roles), m.name)) return members def home(): """Render and return the main members page.""" return render_template("members/members.mako", members=get_members()) def navitem(): """Render and return the navigation item for this module.""" return render_template("members/navitem.mako").decode("utf8") @blueprint.rroute("/members") def members(): """Render and return the main members page.""" return home()