Merge remote-tracking branch 'ebag/SorryNotSorryBlitzmann' into SorryNotSorryBlitzmann
This commit is contained in:
@@ -38,7 +38,7 @@ class FitDpsGraph(Graph):
|
||||
fit = self.fit
|
||||
total = 0
|
||||
distance = data["distance"] * 1000
|
||||
abssort = lambda val: -abs(val - 1)
|
||||
abssort = lambda _val: -abs(_val - 1)
|
||||
|
||||
for mod in fit.modules:
|
||||
if not mod.isEmpty and mod.state >= State.ACTIVE:
|
||||
|
||||
@@ -212,11 +212,11 @@ class ModifiedAttributeDict(collections.MutableMapping):
|
||||
for penalizedMultipliers in penalizedMultiplierGroups.itervalues():
|
||||
# A quick explanation of how this works:
|
||||
# 1: Bonuses and penalties are calculated seperately, so we'll have to filter each of them
|
||||
l1 = filter(lambda val: val > 1, penalizedMultipliers)
|
||||
l2 = filter(lambda val: val < 1, penalizedMultipliers)
|
||||
l1 = filter(lambda _val: _val > 1, penalizedMultipliers)
|
||||
l2 = filter(lambda _val: _val < 1, penalizedMultipliers)
|
||||
# 2: The most significant bonuses take the smallest penalty,
|
||||
# This means we'll have to sort
|
||||
abssort = lambda val: -abs(val - 1)
|
||||
abssort = lambda _val: -abs(_val - 1)
|
||||
l1.sort(key=abssort)
|
||||
l2.sort(key=abssort)
|
||||
# 3: The first module doesn't get penalized at all
|
||||
|
||||
@@ -133,11 +133,11 @@ class Booster(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@validates("ID", "itemID", "ammoID", "active")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: isinstance(val, int),
|
||||
"ammoID": lambda val: isinstance(val, int),
|
||||
"active": lambda val: isinstance(val, bool),
|
||||
"slot": lambda val: isinstance(val, int) and 1 <= val <= 3}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: isinstance(_val, int),
|
||||
"ammoID": lambda _val: isinstance(_val, int),
|
||||
"active": lambda _val: isinstance(_val, bool),
|
||||
"slot": lambda _val: isinstance(_val, int) and 1 <= _val <= 3}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -71,9 +71,9 @@ class Cargo(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@validates("fitID", "itemID", "amount")
|
||||
def validator(self, key, val):
|
||||
map = {"fitID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: isinstance(val, int),
|
||||
"amount": lambda val: isinstance(val, int)}
|
||||
map = {"fitID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: isinstance(_val, int),
|
||||
"amount": lambda _val: isinstance(_val, int)}
|
||||
|
||||
if key == "amount" and val > sys.maxint:
|
||||
val = sys.maxint
|
||||
|
||||
@@ -256,10 +256,10 @@ class Character(object):
|
||||
|
||||
@validates("ID", "name", "apiKey", "ownerID")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"name": lambda val: True,
|
||||
"apiKey": lambda val: val is None or (isinstance(val, basestring) and len(val) > 0),
|
||||
"ownerID": lambda val: isinstance(val, int) or val is None}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"name": lambda _val: True,
|
||||
"apiKey": lambda _val: _val is None or (isinstance(_val, basestring) and len(_val) > 0),
|
||||
"ownerID": lambda _val: isinstance(_val, int) or _val is None}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
@@ -377,8 +377,8 @@ class Skill(HandledItem):
|
||||
if hasattr(self, "_Skill__ro") and self.__ro is True and key != "characterID":
|
||||
raise ReadOnlyException()
|
||||
|
||||
map = {"characterID": lambda val: isinstance(val, int),
|
||||
"skillID": lambda val: isinstance(val, int)}
|
||||
map = {"characterID": lambda _val: isinstance(_val, int),
|
||||
"skillID": lambda _val: isinstance(_val, int)}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -186,11 +186,11 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
|
||||
@validates("ID", "itemID", "chargeID", "amount", "amountActive")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: isinstance(val, int),
|
||||
"chargeID": lambda val: isinstance(val, int),
|
||||
"amount": lambda val: isinstance(val, int) and val >= 0,
|
||||
"amountActive": lambda val: isinstance(val, int) and self.amount >= val >= 0}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: isinstance(_val, int),
|
||||
"chargeID": lambda _val: isinstance(_val, int),
|
||||
"amount": lambda _val: isinstance(_val, int) and _val >= 0,
|
||||
"amountActive": lambda _val: isinstance(_val, int) and self.amount >= _val >= 0}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -219,10 +219,10 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
|
||||
@validates("ID", "itemID", "chargeID", "amount", "amountActive")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: isinstance(val, int),
|
||||
"chargeID": lambda val: isinstance(val, int),
|
||||
"amount": lambda val: isinstance(val, int) and val >= -1,
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: isinstance(_val, int),
|
||||
"chargeID": lambda _val: isinstance(_val, int),
|
||||
"amount": lambda _val: isinstance(_val, int) and _val >= -1,
|
||||
}
|
||||
|
||||
if not map[key](val):
|
||||
|
||||
@@ -364,9 +364,9 @@ class Fit(object):
|
||||
|
||||
@validates("ID", "ownerID", "shipID")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"ownerID": lambda val: isinstance(val, int) or val is None,
|
||||
"shipID": lambda val: isinstance(val, int) or val is None}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"ownerID": lambda _val: isinstance(_val, int) or _val is None,
|
||||
"shipID": lambda _val: isinstance(_val, int) or _val is None}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
@@ -1041,8 +1041,8 @@ class Fit(object):
|
||||
repairers.append(mod)
|
||||
|
||||
# Sort repairers by efficiency. We want to use the most efficient repairers first
|
||||
repairers.sort(key=lambda mod: mod.getModifiedItemAttr(
|
||||
groupAttrMap[mod.item.group.name]) / mod.getModifiedItemAttr("capacitorNeed"), reverse=True)
|
||||
repairers.sort(key=lambda _mod: _mod.getModifiedItemAttr(
|
||||
groupAttrMap[_mod.item.group.name]) / _mod.getModifiedItemAttr("capacitorNeed"), reverse=True)
|
||||
|
||||
# Loop through every module until we're above peak recharge
|
||||
# Most efficient first, as we sorted earlier.
|
||||
|
||||
@@ -99,9 +99,9 @@ class Implant(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@validates("fitID", "itemID", "active")
|
||||
def validator(self, key, val):
|
||||
map = {"fitID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: isinstance(val, int),
|
||||
"active": lambda val: isinstance(val, bool)}
|
||||
map = {"fitID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: isinstance(_val, int),
|
||||
"active": lambda _val: isinstance(_val, bool)}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -581,9 +581,9 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
|
||||
@validates("ID", "itemID", "ammoID")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"itemID": lambda val: val is None or isinstance(val, int),
|
||||
"ammoID": lambda val: isinstance(val, int)}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"itemID": lambda _val: _val is None or isinstance(_val, int),
|
||||
"ammoID": lambda _val: isinstance(_val, int)}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -49,10 +49,10 @@ class User(object):
|
||||
|
||||
@validates("ID", "username", "password", "admin")
|
||||
def validator(self, key, val):
|
||||
map = {"ID": lambda val: isinstance(val, int),
|
||||
"username": lambda val: isinstance(val, basestring),
|
||||
"password": lambda val: isinstance(val, basestring) and len(val) == 96,
|
||||
"admin": lambda val: isinstance(val, bool)}
|
||||
map = {"ID": lambda _val: isinstance(_val, int),
|
||||
"username": lambda _val: isinstance(_val, basestring),
|
||||
"password": lambda _val: isinstance(_val, basestring) and len(_val) == 96,
|
||||
"admin": lambda _val: isinstance(_val, bool)}
|
||||
|
||||
if not map[key](val):
|
||||
raise ValueError(str(val) + " is not a valid value for " + key)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import wx
|
||||
import gui.display as d
|
||||
import gui.globalEvents as GE
|
||||
import gui.marketBrowser as mb
|
||||
import gui.marketBrowser as marketBrowser
|
||||
from gui.builtinViewColumns.state import State
|
||||
from gui.contextMenu import ContextMenu
|
||||
from service.fit import Fit
|
||||
@@ -30,7 +30,6 @@ from service.fit import Fit
|
||||
class BoosterViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(BoosterViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
@@ -54,7 +53,7 @@ class BoosterView(d.Display):
|
||||
self.lastFitId = None
|
||||
|
||||
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
|
||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||
self.mainFrame.Bind(marketBrowser.ITEM_SELECTED, self.addItem)
|
||||
|
||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
||||
@@ -77,7 +76,7 @@ class BoosterView(d.Display):
|
||||
"""
|
||||
|
||||
if data[0] == "market":
|
||||
wx.PostEvent(self.mainFrame, mb.ItemSelected(itemID=int(data[1])))
|
||||
wx.PostEvent(self.mainFrame, marketBrowser.ItemSelected(itemID=int(data[1])))
|
||||
|
||||
def kbEvent(self, event):
|
||||
keycode = event.GetKeyCode()
|
||||
|
||||
@@ -23,7 +23,7 @@ from gui.statsView import StatsView
|
||||
from gui.bitmapLoader import BitmapLoader
|
||||
from gui.utils.numberFormatter import formatAmount
|
||||
import gui.mainFrame
|
||||
import gui.builtinStatsViews.resistancesViewFull as rvf
|
||||
from gui.builtinStatsViews.resistancesViewFull import EFFECTIVE_HP_TOGGLED
|
||||
from service.fit import Fit
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ class RechargeViewFull(StatsView):
|
||||
StatsView.__init__(self)
|
||||
self.parent = parent
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
self.mainFrame.Bind(rvf.EFFECTIVE_HP_TOGGLED, self.toggleEffective)
|
||||
self.mainFrame.Bind(EFFECTIVE_HP_TOGGLED, self.toggleEffective)
|
||||
self.effective = True
|
||||
|
||||
def getHeaderText(self, fit):
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import wx
|
||||
from gui.statsView import StatsView
|
||||
from gui.bitmapLoader import BitmapLoader
|
||||
from gui import pygauge as PG
|
||||
from gui.pygauge import PyGauge
|
||||
from gui.utils.numberFormatter import formatAmount
|
||||
import gui.mainFrame
|
||||
import gui.globalEvents as GE
|
||||
@@ -133,7 +133,7 @@ class ResistancesViewFull(StatsView):
|
||||
bc = pgColour[1]
|
||||
currGColour += 1
|
||||
|
||||
lbl = PG.PyGauge(contentPanel, wx.ID_ANY, 100)
|
||||
lbl = PyGauge(contentPanel, wx.ID_ANY, 100)
|
||||
lbl.SetMinSize((48, 16))
|
||||
lbl.SetBackgroundColour(wx.Colour(bc[0], bc[1], bc[2]))
|
||||
lbl.SetBarColour(wx.Colour(fc[0], fc[1], fc[2]))
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import wx
|
||||
from gui.statsView import StatsView
|
||||
from gui.bitmapLoader import BitmapLoader
|
||||
from gui import pygauge as PG
|
||||
from gui.pygauge import PyGauge
|
||||
import gui.mainFrame
|
||||
from gui.chromeTabs import EVT_NOTEBOOK_PAGE_CHANGED
|
||||
|
||||
@@ -176,7 +176,7 @@ class ResourcesViewFull(StatsView):
|
||||
|
||||
# Gauges modif. - Darriele
|
||||
|
||||
gauge = PG.PyGauge(parent, wx.ID_ANY, 1)
|
||||
gauge = PyGauge(parent, wx.ID_ANY, 1)
|
||||
gauge.SetValueRange(0, 0)
|
||||
gauge.SetMinSize((self.getTextExtentW("1.999M/1.99M MW"), 23))
|
||||
gauge.SetFractionDigits(2)
|
||||
|
||||
@@ -34,6 +34,7 @@ from gui.bitmapLoader import BitmapLoader
|
||||
import gui.builtinViews.emptyView
|
||||
from gui.utils.exportHtml import exportHtml
|
||||
from logging import getLogger
|
||||
from gui.chromeTabs import EVT_NOTEBOOK_PAGE_CHANGED
|
||||
|
||||
from service.fit import Fit
|
||||
from service.market import Market
|
||||
@@ -101,7 +102,6 @@ FitSpawner.register()
|
||||
class FittingViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(FittingViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
@@ -160,7 +160,7 @@ class FittingView(d.Display):
|
||||
self.Bind(wx.EVT_SHOW, self.OnShow)
|
||||
self.Bind(wx.EVT_MOTION, self.OnMouseMove)
|
||||
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
|
||||
self.parent.Bind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, self.pageChanged)
|
||||
self.parent.Bind(EVT_NOTEBOOK_PAGE_CHANGED, self.pageChanged)
|
||||
|
||||
def OnLeaveWindow(self, event):
|
||||
self.SetToolTip(None)
|
||||
@@ -209,7 +209,7 @@ class FittingView(d.Display):
|
||||
wx.PostEvent(self.mainFrame, gui.shipBrowser.FitSelected(fitID=fitID))
|
||||
|
||||
def Destroy(self):
|
||||
self.parent.Unbind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, handler=self.pageChanged)
|
||||
self.parent.Unbind(EVT_NOTEBOOK_PAGE_CHANGED, handler=self.pageChanged)
|
||||
self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.fitChanged)
|
||||
self.mainFrame.Unbind(gui.shipBrowser.EVT_FIT_RENAMED, handler=self.fitRenamed)
|
||||
self.mainFrame.Unbind(gui.shipBrowser.EVT_FIT_REMOVED, handler=self.fitRemoved)
|
||||
@@ -406,15 +406,15 @@ class FittingView(d.Display):
|
||||
if mod1.slot != mod2.slot:
|
||||
return
|
||||
|
||||
if not getattr(mod2, "modPosition"):
|
||||
self.mods.modPosition = mod2.modPosition = dstRow
|
||||
if getattr(mod2, "modPosition"):
|
||||
if clone and mod2.isEmpty:
|
||||
sFit.cloneModule(self.mainFrame.getActiveFit(), srcIdx, mod2.modPosition)
|
||||
else:
|
||||
sFit.swapModules(self.mainFrame.getActiveFit(), srcIdx, mod2.modPosition)
|
||||
|
||||
if clone and mod2.isEmpty:
|
||||
sFit.cloneModule(self.mainFrame.getActiveFit(), srcIdx, mod2.modPosition)
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
|
||||
else:
|
||||
sFit.swapModules(self.mainFrame.getActiveFit(), srcIdx, mod2.modPosition)
|
||||
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
|
||||
logger.error("Missing module position for: %s", str(getattr(mod2, "ID", "Unknown")))
|
||||
|
||||
def generateMods(self):
|
||||
"""
|
||||
@@ -431,7 +431,7 @@ class FittingView(d.Display):
|
||||
|
||||
if fit is not None:
|
||||
self.mods = fit.modules[:]
|
||||
self.mods.sort(key=lambda mod: (slotOrder.index(mod.slot), mod.position))
|
||||
self.mods.sort(key=lambda _mod: (slotOrder.index(_mod.slot), _mod.position))
|
||||
|
||||
# Blanks is a list of indexes that mark non-module positions (such
|
||||
# as Racks and tactical Modes. This allows us to skip over common
|
||||
|
||||
@@ -30,7 +30,6 @@ from service.market import Market
|
||||
class CargoViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(CargoViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
|
||||
@@ -1127,8 +1127,9 @@ class PFTabsContainer(wx.Panel):
|
||||
color = wx.Colour(0, 0, 0)
|
||||
brush = wx.Brush(color)
|
||||
|
||||
# noinspection PyPackageRequirements
|
||||
# noinspection PyPackageRequirements,PyUnresolvedReferences,PyUnresolvedReferences,PyUnresolvedReferences
|
||||
from Carbon.Appearance import kThemeBrushDialogBackgroundActive
|
||||
# noinspection PyUnresolvedReferences
|
||||
brush.MacSetTheme(kThemeBrushDialogBackgroundActive)
|
||||
else:
|
||||
color = wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)
|
||||
|
||||
@@ -43,7 +43,6 @@ class DummyEntry(object):
|
||||
class CommandViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(CommandViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
|
||||
@@ -32,7 +32,6 @@ from service.market import Market
|
||||
class DroneViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(DroneViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import wx
|
||||
|
||||
import gui.globalEvents as GE
|
||||
import gui.marketBrowser as mb
|
||||
import gui.marketBrowser as marketBrowser
|
||||
import gui.mainFrame
|
||||
import gui.display as d
|
||||
from gui.builtinViewColumns.state import State
|
||||
@@ -34,7 +34,6 @@ from service.market import Market
|
||||
class FighterViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(FighterViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
@@ -128,7 +127,7 @@ class FighterDisplay(d.Display):
|
||||
self.hoveredColumn = None
|
||||
|
||||
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
|
||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||
self.mainFrame.Bind(marketBrowser.ITEM_SELECTED, self.addItem)
|
||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
||||
self.Bind(wx.EVT_KEY_UP, self.kbEvent)
|
||||
@@ -205,7 +204,7 @@ class FighterDisplay(d.Display):
|
||||
if srcRow != -1 and dstRow != -1:
|
||||
self._merge(srcRow, dstRow)
|
||||
elif data[0] == "market":
|
||||
wx.PostEvent(self.mainFrame, mb.ItemSelected(itemID=int(data[1])))
|
||||
wx.PostEvent(self.mainFrame, marketBrowser.ItemSelected(itemID=int(data[1])))
|
||||
|
||||
@staticmethod
|
||||
def _merge(src, dst):
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
import gui.display as d
|
||||
import gui.marketBrowser as mb
|
||||
import gui.marketBrowser as marketBrowser
|
||||
import gui.mainFrame
|
||||
from gui.builtinViewColumns.state import State
|
||||
from gui.contextMenu import ContextMenu
|
||||
@@ -90,7 +90,7 @@ class ImplantDisplay(d.Display):
|
||||
self.lastFitId = None
|
||||
|
||||
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
|
||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||
self.mainFrame.Bind(marketBrowser.ITEM_SELECTED, self.addItem)
|
||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
||||
self.Bind(wx.EVT_KEY_UP, self.kbEvent)
|
||||
|
||||
@@ -629,17 +629,17 @@ class ItemCompare(wx.Panel):
|
||||
|
||||
if sort is not None:
|
||||
if sort == 0: # Name sort
|
||||
func = lambda x: x.name
|
||||
func = lambda _val: _val.name
|
||||
else:
|
||||
try:
|
||||
# Remember to reduce by 1, because the attrs array
|
||||
# starts at 0 while the list has the item name as column 0.
|
||||
attr = str(self.attrs.keys()[sort - 1])
|
||||
func = lambda x: x.attributes[attr].value if attr in x.attributes else None
|
||||
func = lambda _val: _val.attributes[attr].value if attr in _val.attributes else None
|
||||
except IndexError:
|
||||
# Clicked on a column that's not part of our array (price most likely)
|
||||
self.sortReverse = False
|
||||
func = lambda x: x.attributes['metaLevel'].value if 'metaLevel' in x.attributes else None
|
||||
func = lambda _val: _val.attributes['metaLevel'].value if 'metaLevel' in _val.attributes else None
|
||||
|
||||
self.items = sorted(self.items, key=func, reverse=self.sortReverse)
|
||||
|
||||
@@ -859,7 +859,7 @@ class ItemEffects(wx.Panel):
|
||||
elif 'wxMac' in wx.PlatformInfo:
|
||||
os.system("open " + file_)
|
||||
else:
|
||||
subprocess.call({"xdg-open": file_})
|
||||
subprocess.call(["xdg-open", file_])
|
||||
|
||||
def RefreshValues(self, event):
|
||||
self.Freeze()
|
||||
|
||||
@@ -45,7 +45,6 @@ class DummyEntry(object):
|
||||
class ProjectedViewDrop(wx.PyDropTarget):
|
||||
def __init__(self, dropFn, *args, **kwargs):
|
||||
super(ProjectedViewDrop, self).__init__(*args, **kwargs)
|
||||
wx.PyDropTarget.__init__(self)
|
||||
self.dropFn = dropFn
|
||||
# this is really transferring an EVE itemID
|
||||
self.dropData = wx.PyTextDataObject()
|
||||
|
||||
@@ -685,7 +685,7 @@ class ShipBrowser(wx.Panel):
|
||||
if len(self.categoryList) == 0:
|
||||
# set cache of category list
|
||||
self.categoryList = list(sMkt.getShipRoot())
|
||||
self.categoryList.sort(key=lambda ship: ship.name)
|
||||
self.categoryList.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
# set map & cache of fittings per category
|
||||
for cat in self.categoryList:
|
||||
@@ -928,7 +928,7 @@ class ShipBrowser(wx.Panel):
|
||||
fits = event.fits
|
||||
|
||||
# sort by ship name, then fit name
|
||||
fits.sort(key=lambda fit: (fit.ship.item.name, fit.name))
|
||||
fits.sort(key=lambda _fit: (_fit.ship.item.name, _fit.name))
|
||||
|
||||
self.lastdata = fits
|
||||
self.lpane.Freeze()
|
||||
|
||||
@@ -169,7 +169,7 @@ class exportHtmlThread(threading.Thread):
|
||||
""" % (time.time(), dnaUrl, localDate)
|
||||
HTML += ' <ul data-role="listview" class="ui-listview-outer" data-inset="true" data-filter="true">\n'
|
||||
categoryList = list(sMkt.getShipRoot())
|
||||
categoryList.sort(key=lambda ship: ship.name)
|
||||
categoryList.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
count = 0
|
||||
|
||||
@@ -178,7 +178,7 @@ class exportHtmlThread(threading.Thread):
|
||||
HTMLgroup = ''
|
||||
|
||||
ships = list(sMkt.getShipList(group.ID))
|
||||
ships.sort(key=lambda ship: ship.name)
|
||||
ships.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
# Keep track of how many ships per group
|
||||
groupFits = 0
|
||||
@@ -248,7 +248,7 @@ class exportHtmlThread(threading.Thread):
|
||||
def generateMinimalHTML(self, sMkt, sFit, dnaUrl):
|
||||
""" Generate a minimal HTML version of the fittings, without any javascript or styling"""
|
||||
categoryList = list(sMkt.getShipRoot())
|
||||
categoryList.sort(key=lambda ship: ship.name)
|
||||
categoryList.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
count = 0
|
||||
HTML = ''
|
||||
@@ -256,9 +256,9 @@ class exportHtmlThread(threading.Thread):
|
||||
# init market group string to give ships something to attach to
|
||||
|
||||
ships = list(sMkt.getShipList(group.ID))
|
||||
ships.sort(key=lambda ship: ship.name)
|
||||
ships.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
ships.sort(key=lambda ship: ship.name)
|
||||
ships.sort(key=lambda _ship: _ship.name)
|
||||
|
||||
for ship in ships:
|
||||
fits = sFit.getFitsWithShip(ship.ID)
|
||||
|
||||
3
pyfa.py
3
pyfa.py
@@ -59,6 +59,7 @@ if not hasattr(sys, 'frozen'):
|
||||
try:
|
||||
import wxversion
|
||||
except ImportError:
|
||||
wxversion = None
|
||||
print("Cannot find wxPython\nYou can download wxPython (2.8+) from http://www.wxpython.org/")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -89,6 +90,7 @@ if not hasattr(sys, 'frozen'):
|
||||
print("Unknown sqlalchemy version string format, skipping check")
|
||||
|
||||
except ImportError:
|
||||
sqlalchemy = None
|
||||
print("Cannot find sqlalchemy.\nYou can download sqlalchemy (0.6+) from http://www.sqlalchemy.org/")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -97,6 +99,7 @@ if not hasattr(sys, 'frozen'):
|
||||
# noinspection PyPackageRequirements
|
||||
import dateutil.parser # noqa - Copied import statement from service/update.py
|
||||
except ImportError:
|
||||
dateutil = None
|
||||
print("Cannot find python-dateutil.\nYou can download python-dateutil from https://pypi.python.org/pypi/python-dateutil")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@@ -346,6 +346,19 @@ class _Context(object):
|
||||
# perform arcane attribute majick trick
|
||||
return _Context(self._root, self._path + "/" + this, self.parameters)
|
||||
|
||||
def __call__(self, **kw):
|
||||
if kw:
|
||||
# specified keywords override contextual ones
|
||||
for k, v in self.parameters.iteritems():
|
||||
if k not in kw:
|
||||
kw[k] = v
|
||||
else:
|
||||
# no keywords provided, just update with contextual ones.
|
||||
kw.update(self.parameters)
|
||||
|
||||
# now let the root context handle it further
|
||||
return self._root(self._path, **kw)
|
||||
|
||||
|
||||
class _AuthContext(_Context):
|
||||
def character(self, characterID):
|
||||
|
||||
@@ -12,14 +12,12 @@ import config
|
||||
from service.pycrest.compat import bytes_, text_
|
||||
from service.pycrest.errors import APIException
|
||||
|
||||
try:
|
||||
from urllib.parse import urlparse, urlunparse, parse_qsl
|
||||
except ImportError: # pragma: no cover
|
||||
from urlparse import urlparse, urlunparse, parse_qsl
|
||||
from urlparse import urlparse, urlunparse, parse_qsl
|
||||
|
||||
try:
|
||||
import pickle
|
||||
except ImportError: # pragma: no cover
|
||||
# noinspection PyPep8Naming
|
||||
import cPickle as pickle
|
||||
|
||||
logger = logging.getLogger("pycrest.eve")
|
||||
|
||||
Reference in New Issue
Block a user