A corporation manager and dashboard for EVE Online
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

59 rivejä
1.8 KiB

  1. # -*- coding: utf-8 -*-
  2. from collections import namedtuple
  3. from flask import g
  4. from flask_mako import render_template
  5. from ._provided import blueprint, logger
  6. from ..exceptions import EVEAPIForbiddenError
  7. SCOPES = {"esi-corporations.read_corporation_membership.v1"}
  8. _Member = namedtuple("_Member", ["id", "name", "roles"])
  9. def _weight(role):
  10. """Return an integer weight for the given role for sorting purposes."""
  11. if role == "CEO":
  12. return 0
  13. return 100
  14. def get_members():
  15. """Return a list of the members of the user's corporation.
  16. Members are returned as 3-namedtuples of (id, name, roles). An empty list
  17. is returned if there was some error with tokens.
  18. """
  19. token = g.auth.get_token()
  20. if not token:
  21. return []
  22. corp_id = g.config.get("corp.id")
  23. logger.debug("Fetching member list for corp id=%d", corp_id)
  24. try:
  25. ceo_id = g.eve.esi(token).v2.corporations(corp_id).get()["ceo_id"]
  26. cids_r = g.eve.esi(token).v2.corporations(corp_id).members.get()
  27. cids = ",".join(sorted(str(item["character_id"]) for item in cids_r))
  28. resp = g.eve.esi(token).v1.characters.names.get(character_ids=cids)
  29. except EVEAPIForbiddenError:
  30. return []
  31. members = [_Member(item["character_id"], item["character_name"],
  32. "CEO" if item["character_id"] == ceo_id else None)
  33. for item in resp]
  34. members.sort(key=lambda m: (_weight(m.roles), m.name))
  35. return members
  36. def home():
  37. """Render and return the main members page."""
  38. return render_template("members/members.mako", members=get_members())
  39. def navitem():
  40. """Render and return the navigation item for this module."""
  41. return render_template("members/navitem.mako").decode("utf8")
  42. @blueprint.rroute("/members")
  43. def members():
  44. """Render and return the main members page."""
  45. return home()