mirror of
https://github.com/nikdoof/evestandings.git
synced 2025-12-23 23:09:22 +00:00
Rework application layout.
This commit is contained in:
@@ -1,94 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from .core import Standings
|
||||
|
||||
import sys
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
except ImportError:
|
||||
from ordereddict import OrderedDict
|
||||
|
||||
from eveapi import EVEAPIConnection, Error
|
||||
from jinja2 import Environment, PackageLoader
|
||||
|
||||
from standings.cache import DbCacheHandler
|
||||
|
||||
__version__ = '0.1'
|
||||
|
||||
STANDINGS_ALLIANCE = 0
|
||||
STANDINGS_CORPORATION = 1
|
||||
|
||||
class Standings:
|
||||
"""
|
||||
Grabs the latest Standings from the EVE API and outputs them into
|
||||
a nice template format
|
||||
"""
|
||||
|
||||
def __init__(self, keyid, vcode, characterid, dbpath='/tmp/standingscache.sqlite3', type=STANDINGS_ALLIANCE):
|
||||
self.eveapi = EVEAPIConnection(cacheHandler=DbCacheHandler(dbpath)).auth(keyID=keyid, vCode=vcode)
|
||||
self.character = characterid
|
||||
self.standings_type = type
|
||||
|
||||
@property
|
||||
def _get_alliance_id_list(self):
|
||||
if not hasattr(self, '_allianceids'):
|
||||
self._allianceids = set([x.allianceID for x in EVEAPIConnection().eve.AllianceList().alliances])
|
||||
return self._allianceids
|
||||
|
||||
def _check_if_corp(self, corpid):
|
||||
try:
|
||||
res = EVEAPIConnection().corp.CorporationSheet(corporationID=corpid)
|
||||
except Error:
|
||||
return False
|
||||
return True
|
||||
|
||||
def _get_standings(self):
|
||||
res = self.eveapi.corp.ContactList(characterID=self.character)
|
||||
|
||||
standings = OrderedDict()
|
||||
for x in ['excellent', 'good', 'neutral', 'bad', 'terrible']: standings[x] = []
|
||||
|
||||
def parse_list(list, output):
|
||||
for row in list:
|
||||
level = float(row['standing'])
|
||||
if level > 5 and level <= 10:
|
||||
type = 'excellent'
|
||||
elif level > 0 and level <= 5:
|
||||
type = 'good'
|
||||
elif level < 0 and level >= -5:
|
||||
type = 'bad'
|
||||
elif level < -5 and level >= -10:
|
||||
type = 'terrible'
|
||||
else:
|
||||
# Neutral?
|
||||
type = 'neutral'
|
||||
|
||||
if int(row['contactID']) in self._get_alliance_id_list:
|
||||
rowtype = 'alli'
|
||||
elif self._check_if_corp(int(row['contactID'])):
|
||||
rowtype = 'corp'
|
||||
else:
|
||||
rowtype = 'char'
|
||||
|
||||
output[type].append((rowtype, row['contactID'], row['contactName'], row['standing']))
|
||||
|
||||
# Order standings for each group
|
||||
for x in ['excellent', 'good', 'neutral', 'bad', 'terrible']:
|
||||
standings[x] = sorted(standings[x], key=lambda v: -int(v[3]))
|
||||
|
||||
|
||||
if self.standings_type == STANDINGS_ALLIANCE:
|
||||
parse_list(res.allianceContactList, standings)
|
||||
else:
|
||||
parse_list(res.corporateContactList, standings)
|
||||
|
||||
return standings
|
||||
|
||||
def _get_name(self):
|
||||
res = self.eveapi.corp.CorporationSheet()
|
||||
if hasattr(res, 'allianceName'): return res.allianceName
|
||||
return res.corporationName
|
||||
|
||||
def _get_html(self, template='standings_list.html'):
|
||||
if not template: template = 'standings_list.html'
|
||||
env = Environment(loader=PackageLoader('standings', 'templates'))
|
||||
template = env.get_template(template)
|
||||
return template.render(standings=self._get_standings(), name=self._get_name())
|
||||
__version__ = '0.2'
|
||||
61
standings/cli.py
Normal file
61
standings/cli.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import os
|
||||
from argparse import ArgumentParser
|
||||
from ConfigParser import ConfigParser
|
||||
|
||||
from standings import Standings
|
||||
|
||||
|
||||
def load_config(file='~/.evestandings.conf'):
|
||||
config = ConfigParser()
|
||||
file = os.path.expanduser(file)
|
||||
if os.path.exists(file):
|
||||
config.read(file)
|
||||
outconfig = object()
|
||||
for name, val in config.items('standings'):
|
||||
setattr(outconfig, name, val)
|
||||
return outconfig
|
||||
else:
|
||||
return {}
|
||||
|
||||
|
||||
def main():
|
||||
parser = ArgumentParser(prog='EVEStandings', description='Outputs a EVE corporation/alliance standings to a HTML page')
|
||||
parser.add_argument('-k', '--keyid', help='Key ID of the API key')
|
||||
parser.add_argument('-v', '--vcode', help='vCode of the API key')
|
||||
parser.add_argument('-c', '--character', help='Character whos corporation you wish to output')
|
||||
parser.add_argument('-t', '--type', help='Type of standings list, either corp or alliance')
|
||||
parser.add_argument('-C', '--config', help='Path to your configuration file')
|
||||
parser.add_argument('-f', '--output', help='Output the resulting HTML to a file')
|
||||
parser.add_argument('--template', help='Location of a customized template to use instead of the default')
|
||||
|
||||
ns = parser.parse_args()
|
||||
|
||||
#
|
||||
if 'keyid' in ns or 'vcode' in ns:
|
||||
conf = ns
|
||||
else:
|
||||
if 'config' in ns:
|
||||
conf = load_config(ns['config'])
|
||||
else:
|
||||
conf = load_config()
|
||||
|
||||
if not conf.keyid or not conf.vcode:
|
||||
sys.stderr.write('Key ID or vCode is missing, please provide both on the command line or in the config file\n')
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
print ns
|
||||
obj = Standings(conf.keyid, conf.vcode, conf.character)
|
||||
html = obj._get_html(conf.template)
|
||||
|
||||
if conf.output:
|
||||
f = open(os.path.expanduser(conf.output), 'w')
|
||||
f.write(html)
|
||||
f.close()
|
||||
else:
|
||||
sys.stdout.write(html)
|
||||
|
||||
sys.exit(0)
|
||||
92
standings/core.py
Normal file
92
standings/core.py
Normal file
@@ -0,0 +1,92 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
except ImportError:
|
||||
from ordereddict import OrderedDict
|
||||
|
||||
from eveapi import EVEAPIConnection, Error
|
||||
from jinja2 import Environment, PackageLoader
|
||||
|
||||
from .cache import DbCacheHandler
|
||||
|
||||
STANDINGS_ALLIANCE = 0
|
||||
STANDINGS_CORPORATION = 1
|
||||
|
||||
class Standings:
|
||||
"""
|
||||
Grabs the latest Standings from the EVE API and outputs them into
|
||||
a nice template format
|
||||
"""
|
||||
|
||||
def __init__(self, keyid, vcode, characterid, dbpath='/tmp/standingscache.sqlite3', type=STANDINGS_ALLIANCE):
|
||||
self.eveapi = EVEAPIConnection(cacheHandler=DbCacheHandler(dbpath)).auth(keyID=keyid, vCode=vcode)
|
||||
self.character = characterid
|
||||
self.standings_type = type
|
||||
|
||||
@property
|
||||
def _get_alliance_id_list(self):
|
||||
if not hasattr(self, '_allianceids'):
|
||||
self._allianceids = set([x.allianceID for x in EVEAPIConnection().eve.AllianceList().alliances])
|
||||
return self._allianceids
|
||||
|
||||
def _check_if_corp(self, corpid):
|
||||
try:
|
||||
res = EVEAPIConnection().corp.CorporationSheet(corporationID=corpid)
|
||||
except Error:
|
||||
return False
|
||||
return True
|
||||
|
||||
def _get_standings(self):
|
||||
res = self.eveapi.corp.ContactList(characterID=self.character)
|
||||
|
||||
standings = OrderedDict()
|
||||
for x in ['excellent', 'good', 'neutral', 'bad', 'terrible']: standings[x] = []
|
||||
|
||||
def parse_list(list, output):
|
||||
for row in list:
|
||||
level = float(row['standing'])
|
||||
if level > 5 and level <= 10:
|
||||
type = 'excellent'
|
||||
elif level > 0 and level <= 5:
|
||||
type = 'good'
|
||||
elif level < 0 and level >= -5:
|
||||
type = 'bad'
|
||||
elif level < -5 and level >= -10:
|
||||
type = 'terrible'
|
||||
else:
|
||||
# Neutral?
|
||||
type = 'neutral'
|
||||
|
||||
if int(row['contactID']) in self._get_alliance_id_list:
|
||||
rowtype = 'alli'
|
||||
elif self._check_if_corp(int(row['contactID'])):
|
||||
rowtype = 'corp'
|
||||
else:
|
||||
rowtype = 'char'
|
||||
|
||||
output[type].append((rowtype, row['contactID'], row['contactName'], row['standing']))
|
||||
|
||||
# Order standings for each group
|
||||
for x in ['excellent', 'good', 'neutral', 'bad', 'terrible']:
|
||||
standings[x] = sorted(standings[x], key=lambda v: -int(v[3]))
|
||||
|
||||
|
||||
if self.standings_type == STANDINGS_ALLIANCE:
|
||||
parse_list(res.allianceContactList, standings)
|
||||
else:
|
||||
parse_list(res.corporateContactList, standings)
|
||||
|
||||
return standings
|
||||
|
||||
def _get_name(self):
|
||||
res = self.eveapi.corp.CorporationSheet()
|
||||
if hasattr(res, 'allianceName'): return res.allianceName
|
||||
return res.corporationName
|
||||
|
||||
def _get_html(self, template='standings_list.html'):
|
||||
if not template: template = 'standings_list.html'
|
||||
env = Environment(loader=PackageLoader('standings', 'templates'))
|
||||
template = env.get_template(template)
|
||||
return template.render(standings=self._get_standings(), name=self._get_name())
|
||||
@@ -3,7 +3,7 @@ try:
|
||||
except ImportError:
|
||||
raise Exception('Flask is not available, please install if you wish to use Standings as a webapp')
|
||||
|
||||
from standings import Standings
|
||||
from .core import Standings
|
||||
|
||||
app = Flask(__name__)
|
||||
stdobj = Standings()
|
||||
|
||||
Reference in New Issue
Block a user