diff --git a/config.py b/config.py
index 66649a2fe..0a9c1a799 100644
--- a/config.py
+++ b/config.py
@@ -31,20 +31,18 @@ gameDB = None
class StreamToLogger(object):
- """
- Fake file-like stream object that redirects writes to a logger instance.
- From: http://www.electricmonk.nl/log/2011/08/14/redirect-stdout-and-stderr-to-a-logger-in-python/
- """
-
- def __init__(self, logger, log_level=logging.INFO):
- self.logger = logger
- self.log_level = log_level
- self.linebuf = ''
-
- def write(self, buf):
- for line in buf.rstrip().splitlines():
- self.logger.log(self.log_level, line.rstrip())
+ """
+ Fake file-like stream object that redirects writes to a logger instance.
+ From: http://www.electricmonk.nl/log/2011/08/14/redirect-stdout-and-stderr-to-a-logger-in-python/
+ """
+ def __init__(self, logger, log_level=logging.INFO):
+ self.logger = logger
+ self.log_level = log_level
+ self.linebuf = ''
+ def write(self, buf):
+ for line in buf.rstrip().splitlines():
+ self.logger.log(self.log_level, line.rstrip())
def isFrozen():
if hasattr(sys, 'frozen'):
@@ -52,12 +50,16 @@ def isFrozen():
else:
return False
+def getPyfaRoot():
+ base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0]
+ root = os.path.dirname(os.path.realpath(os.path.abspath(base)))
+ root = unicode(root, sys.getfilesystemencoding())
+ return root
def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
-
def defPaths(customSavePath):
global debug
global pyfaPath
@@ -75,32 +77,32 @@ def defPaths(customSavePath):
# Python 2.X uses ANSI by default, so we need to convert the character encoding
pyfaPath = getattr(configforced, "pyfaPath", pyfaPath)
if pyfaPath is None:
- pyfaPath = getPyfaPath()
+ pyfaPath = getPyfaRoot()
# Where we store the saved fits etc, default is the current users home directory
if saveInRoot is True:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
- savePath = getPyfaPath("saveddata")
+ savePath = os.path.join(pyfaPath, "saveddata")
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
- if customSavePath is None: # customSavePath is not overriden
- savePath = getSavePath()
+ if customSavePath is None: # customSavePath is not overriden
+ savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
+ sys.getfilesystemencoding())
else:
savePath = customSavePath
__createDirs(savePath)
if isFrozen():
- certName = "cacert.pem"
- os.environ["REQUESTS_CA_BUNDLE"] = getPyfaPath(certName)
- os.environ["SSL_CERT_FILE"] = getPyfaPath(certName)
+ os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
+ os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem")
- loggingFormat = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
- logging.basicConfig(format=loggingFormat, level=logLevel)
- handler = logging.handlers.RotatingFileHandler(getSavePath("log.txt"), maxBytes=1000000, backupCount=3)
- formatter = logging.Formatter(loggingFormat)
+ format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
+ logging.basicConfig(format=format, level=logLevel)
+ handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3)
+ formatter = logging.Formatter(format)
handler.setFormatter(formatter)
logging.getLogger('').addHandler(handler)
@@ -112,53 +114,23 @@ def defPaths(customSavePath):
sys.stdout = sl
# This interferes with cx_Freeze's own handling of exceptions. Find a way to fix this.
- # stderr_logger = logging.getLogger('STDERR')
- # sl = StreamToLogger(stderr_logger, logging.ERROR)
- # sys.stderr = sl
+ #stderr_logger = logging.getLogger('STDERR')
+ #sl = StreamToLogger(stderr_logger, logging.ERROR)
+ #sys.stderr = sl
# The database where we store all the fits etc
- saveDB = getSavePath("saveddata.db")
+ saveDB = os.path.join(savePath, "saveddata.db")
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
- gameDB = getPyfaPath("eve.db")
+ gameDB = os.path.join(pyfaPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
import eos.config
- # Caching modifiers, disable all gamedata caching, its unneeded.
+ #Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"
-
-
-def getPyfaPath(append=None):
- base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0]
- root = os.path.dirname(os.path.realpath(os.path.abspath(base)))
- return _getPath(root, append)
-
-def getSavePath(append=None):
- root = os.path.expanduser(os.path.join("~", ".pyfa"))
- return _getPath(root, append)
-
-def _getPath(root, Append=None):
- if type(root) == str: # leave unicode ones alone
- try:
- root = root.decode('utf8')
- except UnicodeDecodeError:
- root = root.decode('windows-1252')
-
- if not Append:
- return root
-
- if type(root) == str: # leave unicode ones alone
- try:
- path = os.path.abspath(os.path.join(root, Append)).decode('utf8')
- except UnicodeDecodeError:
- path = os.path.abspath(os.path.join(root, Append)).decode('windows-1252')
- else:
- path = os.path.abspath(os.path.join(root, Append))
-
- return path
diff --git a/gui/bitmapLoader.py b/gui/bitmapLoader.py
index 2b991a818..45026bedb 100644
--- a/gui/bitmapLoader.py
+++ b/gui/bitmapLoader.py
@@ -1,4 +1,4 @@
-# ===============================================================================
+#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
@@ -15,25 +15,23 @@
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see .
-# ===============================================================================
+#===============================================================================
-import cStringIO
import os.path
-import zipfile
-
-import wx
-
import config
+import wx
+import zipfile
+import cStringIO
try:
from collections import OrderedDict
except ImportError:
from utils.compat import OrderedDict
-
class BitmapLoader():
+
try:
- archive = zipfile.ZipFile(config.getPyfaPath('imgs.zip'), 'r')
+ archive = zipfile.ZipFile(os.path.join(config.pyfaPath, 'imgs.zip'), 'r')
except IOError:
archive = None
@@ -44,7 +42,7 @@ class BitmapLoader():
@classmethod
def getStaticBitmap(cls, name, parent, location):
static = wx.StaticBitmap(parent)
- static.SetBitmap(cls.getBitmap(name, location))
+ static.SetBitmap(cls.getBitmap(name,location))
return static
@classmethod
@@ -87,7 +85,7 @@ class BitmapLoader():
except KeyError:
print "Missing icon file from zip: {0}".format(path)
else:
- path = config.getPyfaPath('imgs\\' + location + "\\" + filename)
+ path = os.path.join(config.pyfaPath, 'imgs', location, filename)
if os.path.exists(path):
return wx.Image(path)
diff --git a/gui/graphFrame.py b/gui/graphFrame.py
index 4efac6b14..2cedc84d1 100644
--- a/gui/graphFrame.py
+++ b/gui/graphFrame.py
@@ -1,4 +1,4 @@
-# ===============================================================================
+#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
@@ -15,23 +15,21 @@
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see .
-# ===============================================================================
-
-import os
+#===============================================================================
import wx
-
+import os
+from gui.bitmapLoader import BitmapLoader
import gui.display
import gui.globalEvents as GE
-import gui.mainFrame
-import service
-from gui.bitmapLoader import BitmapLoader
+
from gui.graph import Graph
+import service
+import gui.mainFrame
enabled = True
mplImported = False
-
class GraphFrame(wx.Frame):
def __init__(self, parent, style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE | wx.FRAME_FLOAT_ON_PARENT):
@@ -48,20 +46,9 @@ class GraphFrame(wx.Frame):
try:
cache_dir = mpl._get_cachedir()
except:
- cache_dir = os.path.expanduser(os.path.join("~", ".matplotlib"))
- if type(cache_dir) == str: # leave unicode ones alone
- try:
- cache_dir = cache_dir.decode('utf8')
- except UnicodeDecodeError:
- cache_dir = cache_dir.decode('windows-1252')
+ cache_dir = unicode(os.path.expanduser(os.path.join("~", ".matplotlib")))
cache_file = os.path.join(cache_dir, 'fontList.cache')
- if type(cache_file) == str: # leave unicode ones alone
- try:
- cache_file = cache_file.decode('utf8')
- except UnicodeDecodeError:
- cache_file = cache_file.decode('windows-1252')
-
if os.access(cache_dir, os.W_OK | os.X_OK) and os.path.isfile(cache_file):
# remove matplotlib font cache, see #234
os.remove(cache_file)
@@ -71,7 +58,7 @@ class GraphFrame(wx.Frame):
from matplotlib.figure import Figure
enabled = True
if mpl.__version__[0] != "1":
- print "pyfa: Found matplotlib version ", mpl.__version__, " - activating OVER9000 workarounds"
+ print "pyfa: Found matplotlib version ",mpl.__version__, " - activating OVER9000 workarounds"
print "pyfa: Recommended minimum matplotlib version is 1.0.0"
self.legendFix = True
except:
@@ -104,20 +91,19 @@ class GraphFrame(wx.Frame):
self.figure = Figure(figsize=(4, 3))
- rgbtuple = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE).Get()
- clr = [c / 255. for c in rgbtuple]
- self.figure.set_facecolor(clr)
- self.figure.set_edgecolor(clr)
+ rgbtuple = wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ).Get()
+ clr = [c/255. for c in rgbtuple]
+ self.figure.set_facecolor( clr )
+ self.figure.set_edgecolor( clr )
self.canvas = Canvas(self, -1, self.figure)
- self.canvas.SetBackgroundColour(wx.Colour(*rgbtuple))
+ self.canvas.SetBackgroundColour( wx.Colour( *rgbtuple ) )
self.subplot = self.figure.add_subplot(111)
self.subplot.grid(True)
self.mainSizer.Add(self.canvas, 1, wx.EXPAND)
- self.mainSizer.Add(wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL), 0,
- wx.EXPAND)
+ self.mainSizer.Add(wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0 , wx.EXPAND)
self.gridPanel = wx.Panel(self)
self.mainSizer.Add(self.gridPanel, 0, wx.EXPAND)
@@ -136,8 +122,8 @@ class GraphFrame(wx.Frame):
self.graphSelection.SetSelection(0)
self.fields = {}
self.select(0)
- self.sl1 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
- self.mainSizer.Add(self.sl1, 0, wx.EXPAND)
+ self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
+ self.mainSizer.Add(self.sl1,0, wx.EXPAND)
self.mainSizer.Add(self.fitList, 0, wx.EXPAND)
self.fitList.fitList.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
@@ -174,18 +160,18 @@ class GraphFrame(wx.Frame):
self.gridPanel.DestroyChildren()
self.fields.clear()
- # Setup textboxes
+ #Setup textboxes
for field, defaultVal in view.getFields().iteritems():
textBox = wx.TextCtrl(self.gridPanel, wx.ID_ANY, style=0)
self.fields[field] = textBox
textBox.Bind(wx.EVT_TEXT, self.onFieldChanged)
- sizer.Add(textBox, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
+ sizer.Add(textBox, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
if defaultVal is not None:
if not isinstance(defaultVal, basestring):
defaultVal = ("%f" % defaultVal).rstrip("0")
if defaultVal[-1:] == ".":
- defaultVal += "0"
+ defaultVal = defaultVal + "0"
textBox.ChangeValue(defaultVal)
@@ -203,8 +189,7 @@ class GraphFrame(wx.Frame):
else:
label = field
- imgLabelSizer.Add(wx.StaticText(self.gridPanel, wx.ID_ANY, label), 0,
- wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
+ imgLabelSizer.Add(wx.StaticText(self.gridPanel, wx.ID_ANY, label), 0, wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
sizer.Add(imgLabelSizer, 0, wx.ALIGN_CENTER_VERTICAL)
self.draw()
@@ -219,7 +204,7 @@ class GraphFrame(wx.Frame):
try:
success, status = view.getPoints(fit, values)
if not success:
- # TODO: Add a pwetty statys bar to report errors with
+ #TODO: Add a pwetty statys bar to report errors with
self.SetStatusText(status)
return
@@ -233,15 +218,15 @@ class GraphFrame(wx.Frame):
return
if self.legendFix and len(legend) > 0:
- leg = self.subplot.legend(tuple(legend), "upper right", shadow=False)
+ leg = self.subplot.legend(tuple(legend), "upper right" , shadow = False)
for t in leg.get_texts():
t.set_fontsize('small')
for l in leg.get_lines():
l.set_linewidth(1)
- elif not self.legendFix and len(legend) > 0:
- leg = self.subplot.legend(tuple(legend), "upper right", shadow=False, frameon=False)
+ elif not self.legendFix and len(legend) >0:
+ leg = self.subplot.legend(tuple(legend), "upper right" , shadow = False, frameon = False)
for t in leg.get_texts():
t.set_fontsize('small')
@@ -284,10 +269,10 @@ class FitList(wx.Panel):
fitToolTip = wx.ToolTip("Drag a fit into this list to graph it")
self.fitList.SetToolTip(fitToolTip)
-
class FitDisplay(gui.display.Display):
DEFAULT_COLS = ["Base Icon",
"Base Name"]
def __init__(self, parent):
gui.display.Display.__init__(self, parent)
+
diff --git a/gui/itemStats.py b/gui/itemStats.py
index 5acbcaba7..35fb48355 100644
--- a/gui/itemStats.py
+++ b/gui/itemStats.py
@@ -1,4 +1,4 @@
-# ===============================================================================
+#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
@@ -15,41 +15,38 @@
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see .
-# ===============================================================================
-
-import csv
-import re
-import sys
+#===============================================================================
import wx
-import wx.html
-import wx.lib.mixins.listctrl as listmix
-
-import config
+import re
import gui.mainFrame
-import service
-from eos.types import Fit, Ship, Citadel, Module, Skill, Booster, Implant, Drone, Mode, Fighter
from gui.bitmapLoader import BitmapLoader
+import sys
+import wx.lib.mixins.listctrl as listmix
+import wx.html
+from eos.types import Fit, Ship, Citadel, Module, Skill, Booster, Implant, Drone, Mode, Fighter
+from gui.utils.numberFormatter import formatAmount
+import service
+import config
from gui.contextMenu import ContextMenu
from gui.utils.numberFormatter import formatAmount
+import csv
try:
from collections import OrderedDict
except ImportError:
from utils.compat import OrderedDict
-
class ItemStatsDialog(wx.Dialog):
counter = 0
-
def __init__(
self,
victim,
fullContext=None,
pos=wx.DefaultPosition,
size=wx.DefaultSize,
- maximized=False
- ):
+ maximized = False
+ ):
wx.Dialog.__init__(
self,
@@ -58,7 +55,7 @@ class ItemStatsDialog(wx.Dialog):
title="Item stats",
pos=pos,
size=size,
- style=wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU
+ style=wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER| wx.SYSTEM_MENU
)
empty = getattr(victim, "isEmpty", False)
@@ -80,27 +77,26 @@ class ItemStatsDialog(wx.Dialog):
victim = None
self.context = itmContext
if item.icon is not None:
- before, sep, after = item.icon.iconFile.rpartition("_")
- iconFile = "%s%s%s" % (before, sep, "0%s" % after if len(after) < 2 else after)
+ before,sep,after = item.icon.iconFile.rpartition("_")
+ iconFile = "%s%s%s" % (before,sep,"0%s" % after if len(after) < 2 else after)
itemImg = BitmapLoader.getBitmap(iconFile, "icons")
if itemImg is not None:
self.SetIcon(wx.IconFromBitmap(itemImg))
- self.SetTitle("%s: %s%s" % ("%s Stats" % itmContext if itmContext is not None else "Stats", item.name,
- " (%d)" % item.ID if config.debug else ""))
+ self.SetTitle("%s: %s%s" % ("%s Stats" % itmContext if itmContext is not None else "Stats", item.name, " (%d)"%item.ID if config.debug else ""))
self.SetMinSize((300, 200))
if "wxGTK" in wx.PlatformInfo: # GTK has huge tab widgets, give it a bit more room
self.SetSize((580, 500))
else:
self.SetSize((550, 500))
- # self.SetMaxSize((500, -1))
+ #self.SetMaxSize((500, -1))
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.container = ItemStatsContainer(self, victim, item, itmContext)
self.mainSizer.Add(self.container, 1, wx.EXPAND)
if "wxGTK" in wx.PlatformInfo:
- self.closeBtn = wx.Button(self, wx.ID_ANY, u"Close", wx.DefaultPosition, wx.DefaultSize, 0)
- self.mainSizer.Add(self.closeBtn, 0, wx.ALL | wx.ALIGN_RIGHT, 5)
+ self.closeBtn = wx.Button( self, wx.ID_ANY, u"Close", wx.DefaultPosition, wx.DefaultSize, 0 )
+ self.mainSizer.Add( self.closeBtn, 0, wx.ALL|wx.ALIGN_RIGHT, 5 )
self.closeBtn.Bind(wx.EVT_BUTTON, self.closeEvent)
self.SetSizer(self.mainSizer)
@@ -116,13 +112,13 @@ class ItemStatsDialog(wx.Dialog):
counter = ItemStatsDialog.counter
dlgStep = 30
- if counter * dlgStep > ppos.x + psize.width - dlgsize.x or counter * dlgStep > ppos.y + psize.height - dlgsize.y:
+ if counter * dlgStep > ppos.x+psize.width-dlgsize.x or counter * dlgStep > ppos.y+psize.height-dlgsize.y:
ItemStatsDialog.counter = 1
dlgx = ppos.x + counter * dlgStep
dlgy = ppos.y + counter * dlgStep
if pos == wx.DefaultPosition:
- self.SetPosition((dlgx, dlgy))
+ self.SetPosition((dlgx,dlgy))
else:
self.SetPosition(pos)
if maximized:
@@ -142,26 +138,26 @@ class ItemStatsDialog(wx.Dialog):
def closeEvent(self, event):
- if self.dlgOrder == ItemStatsDialog.counter:
+ if self.dlgOrder==ItemStatsDialog.counter:
ItemStatsDialog.counter -= 1
self.parentWnd.UnregisterStatsWindow(self)
self.Destroy()
-
###########################################################################
## Class ItemStatsContainer
###########################################################################
-class ItemStatsContainer(wx.Panel):
- def __init__(self, parent, stuff, item, context=None):
- wx.Panel.__init__(self, parent)
+class ItemStatsContainer ( wx.Panel ):
+
+ def __init__( self, parent, stuff, item, context = None):
+ wx.Panel.__init__ ( self, parent )
sMkt = service.Market.getInstance()
- mainSizer = wx.BoxSizer(wx.VERTICAL)
+ mainSizer = wx.BoxSizer( wx.VERTICAL )
- self.nbContainer = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
- mainSizer.Add(self.nbContainer, 1, wx.EXPAND | wx.ALL, 2)
+ self.nbContainer = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
+ mainSizer.Add( self.nbContainer, 1, wx.EXPAND |wx.ALL, 2 )
if item.traits is not None:
self.traits = ItemTraits(self.nbContainer, stuff, item)
@@ -192,7 +188,7 @@ class ItemStatsContainer(wx.Panel):
self.SetSizer(mainSizer)
self.Layout()
- def __del__(self):
+ def __del__( self ):
pass
def mouseHit(self, event):
@@ -200,54 +196,54 @@ class ItemStatsContainer(wx.Panel):
if tab != -1:
self.nbContainer.SetSelection(tab)
-
###########################################################################
## Class AutoListCtrl
###########################################################################
class AutoListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ListRowHighlighter):
+
def __init__(self, parent, ID, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
listmix.ListCtrlAutoWidthMixin.__init__(self)
listmix.ListRowHighlighter.__init__(self)
-
###########################################################################
## Class AutoListCtrl
###########################################################################
class AutoListCtrlNoHighlight(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ListRowHighlighter):
+
def __init__(self, parent, ID, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
listmix.ListCtrlAutoWidthMixin.__init__(self)
-
###########################################################################
## Class ItemTraits
###########################################################################
-class ItemTraits(wx.Panel):
+class ItemTraits ( wx.Panel ):
+
def __init__(self, parent, stuff, item):
- wx.Panel.__init__(self, parent)
+ wx.Panel.__init__ (self, parent)
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(mainSizer)
self.traits = wx.html.HtmlWindow(self)
self.traits.SetPage(item.traits.traitText)
- mainSizer.Add(self.traits, 1, wx.ALL | wx.EXPAND, 0)
+ mainSizer.Add(self.traits, 1, wx.ALL|wx.EXPAND, 0)
self.Layout()
-
###########################################################################
## Class ItemDescription
###########################################################################
-class ItemDescription(wx.Panel):
+class ItemDescription ( wx.Panel ):
+
def __init__(self, parent, stuff, item):
- wx.Panel.__init__(self, parent)
+ wx.Panel.__init__ (self, parent)
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(mainSizer)
@@ -264,30 +260,28 @@ class ItemDescription(wx.Panel):
desc = re.sub("<( *)font( *)color( *)=(.*?)>(?P.*?)<( *)/( *)font( *)>", "\g", desc)
# Strip URLs
desc = re.sub("<( *)a(.*?)>(?P.*?)<( *)/( *)a( *)>", "\g", desc)
- desc = "" + desc + ""
+ desc = "" + desc + ""
self.description.SetPage(desc)
- mainSizer.Add(self.description, 1, wx.ALL | wx.EXPAND, 0)
+ mainSizer.Add(self.description, 1, wx.ALL|wx.EXPAND, 0)
self.Layout()
-
###########################################################################
## Class ItemParams
###########################################################################
-class ItemParams(wx.Panel):
- def __init__(self, parent, stuff, item, context=None):
- wx.Panel.__init__(self, parent)
- mainSizer = wx.BoxSizer(wx.VERTICAL)
+class ItemParams (wx.Panel):
+ def __init__(self, parent, stuff, item, context = None):
+ wx.Panel.__init__ (self, parent)
+ mainSizer = wx.BoxSizer( wx.VERTICAL )
self.paramList = AutoListCtrl(self, wx.ID_ANY,
- style= # wx.LC_HRULES |
- # wx.LC_NO_HEADER |
- wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES | wx.NO_BORDER)
- mainSizer.Add(self.paramList, 1, wx.ALL | wx.EXPAND, 0)
- self.SetSizer(mainSizer)
+ style = #wx.LC_HRULES |
+ #wx.LC_NO_HEADER |
+ wx.LC_REPORT |wx.LC_SINGLE_SEL |wx.LC_VRULES |wx.NO_BORDER)
+ mainSizer.Add( self.paramList, 1, wx.ALL|wx.EXPAND, 0 )
+ self.SetSizer( mainSizer )
self.toggleView = 1
self.stuff = stuff
@@ -296,31 +290,29 @@ class ItemParams(wx.Panel):
self.attrValues = {}
self._fetchValues()
- self.m_staticline = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
- mainSizer.Add(self.m_staticline, 0, wx.EXPAND)
- bSizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.m_staticline = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
+ mainSizer.Add( self.m_staticline, 0, wx.EXPAND)
+ bSizer = wx.BoxSizer( wx.HORIZONTAL )
- self.totalAttrsLabel = wx.StaticText(self, wx.ID_ANY, u" ", wx.DefaultPosition, wx.DefaultSize, 0)
- bSizer.Add(self.totalAttrsLabel, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
+ self.totalAttrsLabel = wx.StaticText( self, wx.ID_ANY, u" ", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.totalAttrsLabel, 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT)
- self.toggleViewBtn = wx.ToggleButton(self, wx.ID_ANY, u"Toggle view mode", wx.DefaultPosition, wx.DefaultSize,
- 0)
- bSizer.Add(self.toggleViewBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.toggleViewBtn = wx.ToggleButton( self, wx.ID_ANY, u"Toggle view mode", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.toggleViewBtn, 0, wx.ALIGN_CENTER_VERTICAL)
- self.exportStatsBtn = wx.ToggleButton(self, wx.ID_ANY, u"Export Item Stats", wx.DefaultPosition, wx.DefaultSize,
- 0)
- bSizer.Add(self.exportStatsBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.exportStatsBtn = wx.ToggleButton( self, wx.ID_ANY, u"Export Item Stats", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.exportStatsBtn, 0, wx.ALIGN_CENTER_VERTICAL)
if stuff is not None:
- self.refreshBtn = wx.Button(self, wx.ID_ANY, u"Refresh", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT)
- bSizer.Add(self.refreshBtn, 0, wx.ALIGN_CENTER_VERTICAL)
- self.refreshBtn.Bind(wx.EVT_BUTTON, self.RefreshValues)
+ self.refreshBtn = wx.Button( self, wx.ID_ANY, u"Refresh", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
+ bSizer.Add( self.refreshBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.refreshBtn.Bind( wx.EVT_BUTTON, self.RefreshValues )
- mainSizer.Add(bSizer, 0, wx.ALIGN_RIGHT)
+ mainSizer.Add( bSizer, 0, wx.ALIGN_RIGHT)
self.PopulateList()
- self.toggleViewBtn.Bind(wx.EVT_TOGGLEBUTTON, self.ToggleViewMode)
+ self.toggleViewBtn.Bind(wx.EVT_TOGGLEBUTTON,self.ToggleViewMode)
self.exportStatsBtn.Bind(wx.EVT_TOGGLEBUTTON, self.ExportItemStats)
def _fetchValues(self):
@@ -356,7 +348,7 @@ class ItemParams(wx.Panel):
event.Skip()
def ToggleViewMode(self, event):
- self.toggleView *= -1
+ self.toggleView *=-1
self.UpdateList()
event.Skip()
@@ -420,17 +412,17 @@ class ItemParams(wx.Panel):
)
def PopulateList(self):
- self.paramList.InsertColumn(0, "Attribute")
- self.paramList.InsertColumn(1, "Current Value")
+ self.paramList.InsertColumn(0,"Attribute")
+ self.paramList.InsertColumn(1,"Current Value")
if self.stuff is not None:
- self.paramList.InsertColumn(2, "Base Value")
- self.paramList.SetColumnWidth(0, 110)
- self.paramList.SetColumnWidth(1, 90)
+ self.paramList.InsertColumn(2,"Base Value")
+ self.paramList.SetColumnWidth(0,110)
+ self.paramList.SetColumnWidth(1,90)
if self.stuff is not None:
- self.paramList.SetColumnWidth(2, 90)
+ self.paramList.SetColumnWidth(2,90)
self.paramList.setResizeColumn(0)
self.imageList = wx.ImageList(16, 16)
- self.paramList.SetImageList(self.imageList, wx.IMAGE_LIST_SMALL)
+ self.paramList.SetImageList(self.imageList,wx.IMAGE_LIST_SMALL)
names = list(self.attrValues.iterkeys())
names.sort()
@@ -469,6 +461,7 @@ class ItemParams(wx.Panel):
else:
attrIcon = self.imageList.Add(BitmapLoader.getBitmap("7_15", "icons"))
+
index = self.paramList.InsertImageStringItem(sys.maxint, attrName, attrIcon)
idNameMap[idCount] = attrName
self.paramList.SetItemData(index, idCount)
@@ -492,9 +485,11 @@ class ItemParams(wx.Panel):
if self.stuff is not None:
self.paramList.SetStringItem(index, 2, valueUnitDefault)
+
+
self.paramList.SortItems(lambda id1, id2: cmp(idNameMap[id1], idNameMap[id2]))
self.paramList.RefreshRows()
- self.totalAttrsLabel.SetLabel("%d attributes. " % idCount)
+ self.totalAttrsLabel.SetLabel("%d attributes. " %idCount)
self.Layout()
def TranslateValueUnit(self, value, unitName, unitDisplayName):
@@ -510,16 +505,15 @@ class ItemParams(wx.Panel):
attribute = service.Attribute.getInstance().getAttributeInfo(value)
return "%s (%d)" % (attribute.name.capitalize(), value)
- trans = {"Inverse Absolute Percent": (lambda: (1 - value) * 100, unitName),
- "Inversed Modifier Percent": (lambda: (1 - value) * 100, unitName),
- "Modifier Percent": (
- lambda: ("%+.2f" if ((value - 1) * 100) % 1 else "%+d") % ((value - 1) * 100), unitName),
+ trans = {"Inverse Absolute Percent": (lambda: (1-value)*100, unitName),
+ "Inversed Modifier Percent": (lambda: (1-value) * 100, unitName),
+ "Modifier Percent": (lambda: ("%+.2f" if ((value - 1) * 100) % 1 else "%+d") % ((value - 1) * 100), unitName),
"Volume": (lambda: value, u"m\u00B3"),
"Sizeclass": (lambda: value, ""),
- "Absolute Percent": (lambda: (value * 100), unitName),
+ "Absolute Percent": (lambda: (value * 100) , unitName),
"Milliseconds": (lambda: value / 1000.0, unitName),
"typeID": (itemIDCallback, ""),
- "groupID": (groupIDCallback, ""),
+ "groupID": (groupIDCallback,""),
"attributeID": (attributeIDCallback, "")}
override = trans.get(unitDisplayName)
@@ -533,10 +527,9 @@ class ItemParams(wx.Panel):
fvalue = formatAmount(v, 3, 0, 0)
else:
fvalue = v
- return "%s %s" % (fvalue, override[1])
+ return "%s %s" % (fvalue , override[1])
else:
- return "%s %s" % (formatAmount(value, 3, 0), unitName)
-
+ return "%s %s" % (formatAmount(value, 3, 0),unitName)
class ItemCompare(wx.Panel):
def __init__(self, parent, stuff, item, items, context=None):
@@ -555,8 +548,7 @@ class ItemCompare(wx.Panel):
self.currentSort = None
self.sortReverse = False
self.item = item
- self.items = sorted(items,
- key=lambda x: x.attributes['metaLevel'].value if 'metaLevel' in x.attributes else None)
+ self.items = sorted(items, key=lambda x: x.attributes['metaLevel'].value if 'metaLevel' in x.attributes else None)
self.attrs = {}
# get a dict of attrName: attrInfo of all unique attributes across all items
@@ -635,7 +627,7 @@ class ItemCompare(wx.Panel):
def processPrices(self, prices):
for i, price in enumerate(prices):
- self.paramList.SetStringItem(i, len(self.attrs) + 1, formatAmount(price.price, 3, 3, 9, currency=True))
+ self.paramList.SetStringItem(i, len(self.attrs)+1, formatAmount(price.price, 3, 3, 9, currency=True))
def PopulateList(self, sort=None):
@@ -666,11 +658,11 @@ class ItemCompare(wx.Panel):
for i, attr in enumerate(self.attrs.keys()):
name = self.attrs[attr].displayName if self.attrs[attr].displayName else attr
- self.paramList.InsertColumn(i + 1, name)
- self.paramList.SetColumnWidth(i + 1, 120)
+ self.paramList.InsertColumn(i+1, name)
+ self.paramList.SetColumnWidth(i+1, 120)
- self.paramList.InsertColumn(len(self.attrs) + 1, "Price")
- self.paramList.SetColumnWidth(len(self.attrs) + 1, 60)
+ self.paramList.InsertColumn(len(self.attrs)+1, "Price")
+ self.paramList.SetColumnWidth(len(self.attrs)+1, 60)
sMkt = service.Market.getInstance()
sMkt.getPrices([x.ID for x in self.items], self.processPrices)
@@ -688,7 +680,7 @@ class ItemCompare(wx.Panel):
else:
valueUnit = formatAmount(value, 3, 0, 0)
- self.paramList.SetStringItem(i, x + 1, valueUnit)
+ self.paramList.SetStringItem(i, x+1, valueUnit)
self.paramList.RefreshRows()
self.Layout()
@@ -709,7 +701,7 @@ class ItemCompare(wx.Panel):
trans = {"Inverse Absolute Percent": (lambda: (1 - value) * 100, unitName),
"Inversed Modifier Percent": (lambda: (1 - value) * 100, unitName),
"Modifier Percent": (
- lambda: ("%+.2f" if ((value - 1) * 100) % 1 else "%+d") % ((value - 1) * 100), unitName),
+ lambda: ("%+.2f" if ((value - 1) * 100) % 1 else "%+d") % ((value - 1) * 100), unitName),
"Volume": (lambda: value, u"m\u00B3"),
"Sizeclass": (lambda: value, ""),
"Absolute Percent": (lambda: (value * 100), unitName),
@@ -738,18 +730,19 @@ class ItemCompare(wx.Panel):
## Class ItemRequirements
###########################################################################
-class ItemRequirements(wx.Panel):
+class ItemRequirements ( wx.Panel ):
+
def __init__(self, parent, stuff, item):
- wx.Panel.__init__(self, parent, style=wx.TAB_TRAVERSAL)
+ wx.Panel.__init__ (self, parent, style = wx.TAB_TRAVERSAL)
- # itemId is set by the parent.
- self.romanNb = ["0", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"]
- self.skillIdHistory = []
- mainSizer = wx.BoxSizer(wx.VERTICAL)
+ #itemId is set by the parent.
+ self.romanNb = ["0","I","II","III","IV","V","VI","VII","VIII","IX","X"]
+ self.skillIdHistory=[]
+ mainSizer = wx.BoxSizer( wx.VERTICAL )
- self.reqTree = wx.TreeCtrl(self, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.NO_BORDER)
+ self.reqTree = wx.TreeCtrl(self, style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.NO_BORDER)
- mainSizer.Add(self.reqTree, 1, wx.ALL | wx.EXPAND, 0)
+ mainSizer.Add(self.reqTree, 1, wx.ALL|wx.EXPAND, 0)
self.SetSizer(mainSizer)
self.root = self.reqTree.AddRoot("WINRARZOR")
@@ -759,17 +752,17 @@ class ItemRequirements(wx.Panel):
self.reqTree.SetImageList(self.imageList)
skillBookId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui"))
- self.getFullSkillTree(item, self.root, skillBookId)
+ self.getFullSkillTree(item,self.root,skillBookId)
self.reqTree.ExpandAll()
self.Layout()
- def getFullSkillTree(self, parentSkill, parent, sbIconId):
+ def getFullSkillTree(self,parentSkill,parent,sbIconId):
for skill, level in parentSkill.requiredSkills.iteritems():
- child = self.reqTree.AppendItem(parent, "%s %s" % (skill.name, self.romanNb[int(level)]), sbIconId)
+ child = self.reqTree.AppendItem(parent,"%s %s" %(skill.name,self.romanNb[int(level)]), sbIconId)
if skill.ID not in self.skillIdHistory:
- self.getFullSkillTree(skill, child, sbIconId)
+ self.getFullSkillTree(skill,child,sbIconId)
self.skillIdHistory.append(skill.ID)
@@ -777,7 +770,7 @@ class ItemRequirements(wx.Panel):
## Class ItemEffects
###########################################################################
-class ItemEffects(wx.Panel):
+class ItemEffects (wx.Panel):
def __init__(self, parent, stuff, item):
wx.Panel.__init__(self, parent)
self.item = item
@@ -800,17 +793,17 @@ class ItemEffects(wx.Panel):
def PopulateList(self):
- self.effectList.InsertColumn(0, "Name")
- self.effectList.InsertColumn(1, "Active")
+ self.effectList.InsertColumn(0,"Name")
+ self.effectList.InsertColumn(1,"Active")
self.effectList.InsertColumn(2, "Type")
if config.debug:
self.effectList.InsertColumn(3, "Run Time")
- self.effectList.InsertColumn(4, "ID")
+ self.effectList.InsertColumn(4,"ID")
- # self.effectList.SetColumnWidth(0,385)
+ #self.effectList.SetColumnWidth(0,385)
self.effectList.setResizeColumn(0)
- self.effectList.SetColumnWidth(1, 50)
+ self.effectList.SetColumnWidth(1,50)
self.effectList.SetColumnWidth(2, 80)
if config.debug:
self.effectList.SetColumnWidth(3, 65)
@@ -879,7 +872,7 @@ class ItemEffects(wx.Panel):
"""
import os
- file = config.getPyfaPath("eos\\effects\\%s.py" % event.GetText().lower())
+ file = os.path.join(config.pyfaPath, "eos", "effects", "%s.py"%event.GetText().lower())
if not os.path.isfile(file):
open(file, 'a').close()
@@ -887,7 +880,7 @@ class ItemEffects(wx.Panel):
if 'wxMSW' in wx.PlatformInfo:
os.startfile(file)
elif 'wxMac' in wx.PlatformInfo:
- os.system("open " + file)
+ os.system("open "+file)
else:
import subprocess
subprocess.call(["xdg-open", file])
@@ -901,15 +894,13 @@ class ItemEffects(wx.Panel):
self.Thaw()
event.Skip()
-
###########################################################################
## Class ItemAffectedBy
###########################################################################
-class ItemAffectedBy(wx.Panel):
+class ItemAffectedBy (wx.Panel):
ORDER = [Fit, Ship, Citadel, Mode, Module, Drone, Fighter, Implant, Booster, Skill]
-
def __init__(self, parent, stuff, item):
wx.Panel.__init__(self, parent)
self.stuff = stuff
@@ -925,33 +916,33 @@ class ItemAffectedBy(wx.Panel):
mainSizer = wx.BoxSizer(wx.VERTICAL)
- self.affectedBy = wx.TreeCtrl(self, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.NO_BORDER)
- mainSizer.Add(self.affectedBy, 1, wx.ALL | wx.EXPAND, 0)
+ self.affectedBy = wx.TreeCtrl(self, style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.NO_BORDER)
+ mainSizer.Add(self.affectedBy, 1, wx.ALL|wx.EXPAND, 0)
- self.m_staticline = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
+ self.m_staticline = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
- mainSizer.Add(self.m_staticline, 0, wx.EXPAND)
- bSizer = wx.BoxSizer(wx.HORIZONTAL)
+ mainSizer.Add( self.m_staticline, 0, wx.EXPAND)
+ bSizer = wx.BoxSizer( wx.HORIZONTAL )
- self.toggleExpandBtn = wx.ToggleButton(self, wx.ID_ANY, u"Expand All", wx.DefaultPosition, wx.DefaultSize, 0)
- bSizer.Add(self.toggleExpandBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.toggleExpandBtn = wx.ToggleButton( self, wx.ID_ANY, u"Expand All", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.toggleExpandBtn, 0, wx.ALIGN_CENTER_VERTICAL)
- self.toggleNameBtn = wx.ToggleButton(self, wx.ID_ANY, u"Toggle Names", wx.DefaultPosition, wx.DefaultSize, 0)
- bSizer.Add(self.toggleNameBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.toggleNameBtn = wx.ToggleButton( self, wx.ID_ANY, u"Toggle Names", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.toggleNameBtn, 0, wx.ALIGN_CENTER_VERTICAL)
- self.toggleViewBtn = wx.ToggleButton(self, wx.ID_ANY, u"Toggle View", wx.DefaultPosition, wx.DefaultSize, 0)
- bSizer.Add(self.toggleViewBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.toggleViewBtn = wx.ToggleButton( self, wx.ID_ANY, u"Toggle View", wx.DefaultPosition, wx.DefaultSize, 0 )
+ bSizer.Add( self.toggleViewBtn, 0, wx.ALIGN_CENTER_VERTICAL)
if stuff is not None:
- self.refreshBtn = wx.Button(self, wx.ID_ANY, u"Refresh", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT)
- bSizer.Add(self.refreshBtn, 0, wx.ALIGN_CENTER_VERTICAL)
- self.refreshBtn.Bind(wx.EVT_BUTTON, self.RefreshTree)
+ self.refreshBtn = wx.Button( self, wx.ID_ANY, u"Refresh", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
+ bSizer.Add( self.refreshBtn, 0, wx.ALIGN_CENTER_VERTICAL)
+ self.refreshBtn.Bind( wx.EVT_BUTTON, self.RefreshTree )
- self.toggleNameBtn.Bind(wx.EVT_TOGGLEBUTTON, self.ToggleNameMode)
- self.toggleExpandBtn.Bind(wx.EVT_TOGGLEBUTTON, self.ToggleExpand)
- self.toggleViewBtn.Bind(wx.EVT_TOGGLEBUTTON, self.ToggleViewMode)
+ self.toggleNameBtn.Bind(wx.EVT_TOGGLEBUTTON,self.ToggleNameMode)
+ self.toggleExpandBtn.Bind(wx.EVT_TOGGLEBUTTON,self.ToggleExpand)
+ self.toggleViewBtn.Bind(wx.EVT_TOGGLEBUTTON,self.ToggleViewMode)
- mainSizer.Add(bSizer, 0, wx.ALIGN_RIGHT)
+ mainSizer.Add( bSizer, 0, wx.ALIGN_RIGHT)
self.SetSizer(mainSizer)
self.PopulateTree()
self.Layout()
@@ -991,7 +982,7 @@ class ItemAffectedBy(wx.Panel):
self.Thaw()
- def ToggleExpand(self, event):
+ def ToggleExpand(self,event):
self.expand *= -1
self.ExpandCollapseTree()
@@ -1100,8 +1091,7 @@ class ItemAffectedBy(wx.Panel):
else:
item = afflictor.item
- items[attrName].append(
- (type(afflictor), afflictor, item, modifier, amount, getattr(afflictor, "projected", False)))
+ items[attrName].append((type(afflictor), afflictor, item, modifier, amount, getattr(afflictor, "projected", False)))
# Make sure projected fits are on top
rootOrder = container.keys()
@@ -1177,6 +1167,7 @@ class ItemAffectedBy(wx.Panel):
treeItem = self.affectedBy.AppendItem(child, display, itemIcon)
self.affectedBy.SetPyData(treeItem, afflictor)
+
def buildModuleView(self, root):
# We first build a usable dictionary of items. The key is either a fit
# if the afflictions stem from a projected fit, or self.stuff if they
@@ -1300,10 +1291,9 @@ class ItemAffectedBy(wx.Panel):
else:
penalized = ""
- attributes.append((attrName, (displayName if displayName != "" else attrName), attrModifier,
- attrAmount, penalized, attrIcon))
+ attributes.append((attrName, (displayName if displayName != "" else attrName), attrModifier, attrAmount, penalized, attrIcon))
- attrSorted = sorted(attributes, key=lambda attribName: attribName[0])
+ attrSorted = sorted(attributes, key = lambda attribName: attribName[0])
for attr in attrSorted:
attrName, displayName, attrModifier, attrAmount, penalized, attrIcon = attr
diff --git a/service/pycrest/eve.py b/service/pycrest/eve.py
index 8218f2bc5..c0f33becd 100644
--- a/service/pycrest/eve.py
+++ b/service/pycrest/eve.py
@@ -1,17 +1,14 @@
-import base64
-import logging
import os
-import re
+import base64
import time
import zlib
import requests
-from requests.adapters import HTTPAdapter
-import config
+from . import version
from compat import bytes_, text_
from errors import APIException
-from . import version
+from requests.adapters import HTTPAdapter
try:
from urllib.parse import urlparse, urlunparse, parse_qsl
@@ -27,7 +24,9 @@ try:
from urllib.parse import quote
except ImportError: # pragma: no cover
from urllib import quote
-
+import logging
+import re
+import config
logger = logging.getLogger("pycrest.eve")
cache_re = re.compile(r'max-age=([0-9]+)')
@@ -52,13 +51,7 @@ class FileCache(APICache):
os.mkdir(self.path, 0o700)
def _getpath(self, key):
- path = os.path.join(self.path, str(hash(key)) + '.cache')
- if type(path) == str: # leave unicode ones alone
- try:
- path = path.decode('utf8')
- except UnicodeDecodeError:
- path = path.decode('windows-1252')
- return path
+ return os.path.join(self.path, str(hash(key)) + '.cache')
def put(self, key, value):
with open(self._getpath(key), 'wb') as f:
@@ -118,7 +111,7 @@ class APIConnection(object):
})
session.headers.update(additional_headers)
session.mount('https://public-crest.eveonline.com',
- HTTPAdapter())
+ HTTPAdapter())
self._session = session
if cache:
if isinstance(cache, APICache):
@@ -256,18 +249,19 @@ class EVE(APIConnection):
def temptoken_authorize(self, access_token=None, expires_in=0, refresh_token=None):
self.set_auth_values({'access_token': access_token,
- 'refresh_token': refresh_token,
- 'expires_in': expires_in})
+ 'refresh_token': refresh_token,
+ 'expires_in': expires_in})
class AuthedConnection(EVE):
+
def __call__(self):
if not self._data:
self._data = APIObject(self.get(self._endpoint), self)
return self._data
def whoami(self):
- # if 'whoami' not in self._cache:
+ #if 'whoami' not in self._cache:
# print "Setting this whoami cache"
# self._cache['whoami'] = self.get("%s/verify" % self._oauth_endpoint)
return self.get("%s/verify" % self._oauth_endpoint)
@@ -287,7 +281,6 @@ class AuthedConnection(EVE):
self.refr_authorize(self.refresh_token)
return self._session.delete(resource, params=params)
-
class APIObject(object):
def __init__(self, parent, connection):
self._dict = {}
diff --git a/service/settings.py b/service/settings.py
index 71dbc9977..89f871973 100644
--- a/service/settings.py
+++ b/service/settings.py
@@ -1,4 +1,4 @@
-# ===============================================================================
+#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
@@ -15,41 +15,33 @@
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see .
-# ===============================================================================
+#===============================================================================
import cPickle
import os.path
+import config
import urllib2
-import config
-
-
class SettingsProvider():
- BASE_PATH = config.getSavePath("settings")
+ BASE_PATH = os.path.join(config.savePath, "settings")
settings = {}
_instance = None
-
@classmethod
def getInstance(cls):
- if cls._instance is None:
+ if cls._instance == None:
cls._instance = SettingsProvider()
return cls._instance
def __init__(self):
if not os.path.exists(self.BASE_PATH):
- os.mkdir(self.BASE_PATH)
+ os.mkdir(self.BASE_PATH);
def getSettings(self, area, defaults=None):
s = self.settings.get(area)
if s is None:
p = os.path.join(self.BASE_PATH, area)
- if type(p) == str: # leave unicode ones alone
- try:
- p = p.decode('utf8')
- except UnicodeDecodeError:
- p = p.decode('windows-1252')
if not os.path.exists(p):
info = {}
@@ -79,7 +71,6 @@ class SettingsProvider():
for settings in self.settings.itervalues():
settings.save()
-
class Settings():
def __init__(self, location, info):
self.location = location
@@ -124,13 +115,13 @@ class NetworkSettings():
_instance = None
# constants for serviceNetworkDefaultSettings["mode"] parameter
- PROXY_MODE_NONE = 0 # 0 - No proxy
+ PROXY_MODE_NONE = 0 # 0 - No proxy
PROXY_MODE_AUTODETECT = 1 # 1 - Auto-detected proxy settings
- PROXY_MODE_MANUAL = 2 # 2 - Manual proxy settings
+ PROXY_MODE_MANUAL = 2 # 2 - Manual proxy settings
@classmethod
def getInstance(cls):
- if cls._instance is None:
+ if cls._instance == None:
cls._instance = NetworkSettings()
return cls._instance
@@ -193,11 +184,12 @@ class NetworkSettings():
def setAccess(self, access):
self.serviceNetworkSettings["access"] = access
- @staticmethod
- def autodetect():
+ def autodetect(self):
proxy = None
+ proxAddr = proxPort = ""
proxydict = urllib2.ProxyHandler().proxies
+ txt = "Auto-detected: "
validPrefixes = ("http", "https")
@@ -245,57 +237,53 @@ class NetworkSettings():
self.serviceNetworkSettings["password"] = password
+
"""
Settings used by the HTML export feature.
"""
-
-
class HTMLExportSettings():
_instance = None
@classmethod
def getInstance(cls):
- if cls._instance is None:
+ if cls._instance == None:
cls._instance = HTMLExportSettings()
return cls._instance
def __init__(self):
- serviceHTMLExportDefaultSettings = {"enabled": False, "path": config.pyfaPath + os.sep + 'pyfaFits.html',
- "minimal": False}
- self.serviceHTMLExportSettings = SettingsProvider.getInstance().getSettings("pyfaServiceHTMLExportSettings",
- serviceHTMLExportDefaultSettings)
+ serviceHTMLExportDefaultSettings = {"enabled": False, "path": config.pyfaPath + os.sep + 'pyfaFits.html', "minimal": False }
+ self.serviceHTMLExportSettings = SettingsProvider.getInstance().getSettings("pyfaServiceHTMLExportSettings", serviceHTMLExportDefaultSettings)
def getEnabled(self):
return self.serviceHTMLExportSettings["enabled"]
def setEnabled(self, enabled):
self.serviceHTMLExportSettings["enabled"] = enabled
-
+
+
def getMinimalEnabled(self):
return self.serviceHTMLExportSettings["minimal"]
def setMinimalEnabled(self, minimal):
self.serviceHTMLExportSettings["minimal"] = minimal
+
def getPath(self):
return self.serviceHTMLExportSettings["path"]
def setPath(self, path):
self.serviceHTMLExportSettings["path"] = path
-
"""
Settings used by update notification
"""
-
-
class UpdateSettings():
_instance = None
@classmethod
def getInstance(cls):
- if cls._instance is None:
+ if cls._instance == None:
cls._instance = UpdateSettings()
return cls._instance
@@ -305,9 +293,8 @@ class UpdateSettings():
# Updates are completely suppressed via network settings
# prerelease - If True, suppress prerelease notifications
# version - Set to release tag that user does not want notifications for
- serviceUpdateDefaultSettings = {"prerelease": True, 'version': None}
- self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings",
- serviceUpdateDefaultSettings)
+ serviceUpdateDefaultSettings = {"prerelease": True, 'version': None }
+ self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings", serviceUpdateDefaultSettings)
def get(self, type):
return self.serviceUpdateSettings[type]
@@ -315,7 +302,6 @@ class UpdateSettings():
def set(self, type, value):
self.serviceUpdateSettings[type] = value
-
class CRESTSettings():
_instance = None
@@ -327,13 +313,13 @@ class CRESTSettings():
return cls._instance
def __init__(self):
+
# mode
# 0 - Implicit authentication
# 1 - User-supplied client details
serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60}
- self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings",
- serviceCRESTDefaultSettings)
+ self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings", serviceCRESTDefaultSettings)
def get(self, type):
return self.serviceCRESTSettings[type]
@@ -341,4 +327,5 @@ class CRESTSettings():
def set(self, type, value):
self.serviceCRESTSettings[type] = value
+
# @todo: migrate fit settings (from fit service) here?