import requests def _make_endpoint(path, include=None, exclude=None, trim=None, method=requests.get): def _trim(data): if include: data = {k: v for k, v in data.items() if k in include} if exclude: for key in exclude: if key in data: del data[key] return data if not callable(trim): trim = _trim def _method(*args, **kwargs): query = "https://esi.evetech.net/latest/" + path + "?datasource=tranquility" response = method(query.format(*args), **kwargs) response.raise_for_status() return trim(response.json()) return _method def _trim_killmail(km): del km['attackers'] del km['victim']['items'] del km['victim']['damage_taken'] return km def _trim_names(names): for name in names: del name['category'] return names killmail = _make_endpoint("killmails/{}/{}/", trim=_trim_killmail) type = _make_endpoint("universe/types/{}/", include=['type_id', 'name', 'group_id']) system = _make_endpoint( "universe/systems/{}/", include=['system_id', 'constellation_id', 'name', 'position', 'security_status']) constellation = _make_endpoint("universe/constellations/{}/", include=['region_id', 'name']) region = _make_endpoint("universe/regions/{}/", include=['name']) names = _make_endpoint("universe/names/", method=requests.post, trim=_trim_names) corporation = _make_endpoint("corporations/{}/", include=['corporation_id', 'name', 'ticker']) alliance = _make_endpoint("alliances/{}/", include=['alliance_id', 'name', 'ticker'])