Make it run again

This commit is contained in:
Ebag333
2016-12-02 03:13:54 -08:00
parent bb96b0af1a
commit d963327ed4
94 changed files with 631 additions and 583 deletions

View File

@@ -21,6 +21,7 @@ from sqlalchemy.orm import join, exc
from sqlalchemy.sql import and_, or_, select from sqlalchemy.sql import and_, or_, select
import eos.config import eos.config
from eos.gamedata import Item, Attribute
from eos.db import gamedata_session from eos.db import gamedata_session
from eos.db.gamedata.metaGroup import metatypes_table, items_table from eos.db.gamedata.metaGroup import metatypes_table, items_table
from eos.db.util import processEager, processWhere from eos.db.util import processEager, processWhere
@@ -280,9 +281,9 @@ def directAttributeRequest(itemIDs, attrIDs):
if not isinstance(itemID, int): if not isinstance(itemID, int):
raise TypeError("All itemIDs must be integer") raise TypeError("All itemIDs must be integer")
q = select((eos.types.Item.typeID, eos.types.Attribute.attributeID, eos.types.Attribute.value), q = select((Item.typeID, Attribute.attributeID, Attribute.value),
and_(eos.types.Attribute.attributeID.in_(attrIDs), eos.types.Item.typeID.in_(itemIDs)), and_(Attribute.attributeID.in_(attrIDs), Item.typeID.in_(itemIDs)),
from_obj=[join(eos.types.Attribute, eos.types.Item)]) from_obj=[join(Attribute, Item)])
result = gamedata_session.execute(q).fetchall() result = gamedata_session.execute(q).fetchall()
return result return result

View File

@@ -18,12 +18,12 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.display as d import gui.display as d
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.marketBrowser as mb import gui.marketBrowser as mb
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from service.fit import Fit
class BoosterViewDrop(wx.PyDropTarget): class BoosterViewDrop(wx.PyDropTarget):
def __init__(self, dropFn): def __init__(self, dropFn):
@@ -85,7 +85,7 @@ class BoosterView(d.Display):
event.Skip() event.Skip()
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -115,7 +115,7 @@ class BoosterView(d.Display):
event.Skip() event.Skip()
def addItem(self, event): def addItem(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -139,7 +139,7 @@ class BoosterView(d.Display):
def removeBooster(self, booster): def removeBooster(self, booster):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeBooster(fitID, self.origional.index(booster)) sFit.removeBooster(fitID, self.origional.index(booster))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -150,7 +150,7 @@ class BoosterView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleBooster(fitID, row) sFit.toggleBooster(fitID, row)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -163,7 +163,7 @@ class BoosterView(d.Display):
def spawnMenu(self): def spawnMenu(self):
sel = self.GetFirstSelected() sel = self.GetFirstSelected()
if sel != -1: if sel != -1:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
item = fit.boosters[sel] item = fit.boosters[sel]

View File

@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
import gui.globalEvents as GE import gui.globalEvents as GE
@@ -25,7 +24,7 @@ class AmmoPattern(ContextMenu):
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
item = selection[0] item = selection[0]
fit = self.mainFrame.getActiveFit() fit = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.setAsPattern(fit, item) sFit.setAsPattern(fit, item)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit))

View File

@@ -2,7 +2,6 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import eos.types import eos.types
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
@@ -46,7 +45,7 @@ class AmountChanger(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.change) self.button.Bind(wx.EVT_BUTTON, self.change)
def change(self, event): def change(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame = gui.mainFrame.MainFrame.getInstance()
fitID = mainFrame.getActiveFit() fitID = mainFrame.getActiveFit()

View File

@@ -2,16 +2,16 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import eos.types import eos.types
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
from service.fit import Fit
class Cargo(ContextMenu): class Cargo(ContextMenu):
def __init__(self): def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, srcContext, selection): def display(self, srcContext, selection):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -24,7 +24,7 @@ class Cargo(ContextMenu):
return "Add {0} to Cargo".format(itmContext) return "Add {0} to Cargo".format(itmContext)
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
typeID = int(selection[0].ID) typeID = int(selection[0].ID)

View File

@@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from eos.types import Skill from eos.types import Skill
import gui.globalEvents as GE import gui.globalEvents as GE
from service.fit import Fit
from service.character import Character
class ChangeAffectingSkills(ContextMenu): class ChangeAffectingSkills(ContextMenu):
def __init__(self): def __init__(self):
@@ -15,8 +16,8 @@ class ChangeAffectingSkills(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "fittingCharge", "fittingShip"): if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "fittingCharge", "fittingShip"):
return False return False
self.sChar = service.Character.getInstance() self.sChar = Character.getInstance()
self.sFit = service.Fit.getInstance() self.sFit = Fit.getInstance()
fit = self.sFit.getFit(self.mainFrame.getActiveFit()) fit = self.sFit.getFit(self.mainFrame.getActiveFit())
self.charID = fit.character.ID self.charID = fit.character.ID
@@ -26,7 +27,7 @@ class ChangeAffectingSkills(ContextMenu):
if srcContext == "fittingShip": if srcContext == "fittingShip":
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.stuff = sFit.getFit(fitID).ship self.stuff = sFit.getFit(fitID).ship
cont = sFit.getFit(fitID).ship.itemModifiedAttributes cont = sFit.getFit(fitID).ship.itemModifiedAttributes
elif srcContext == "fittingCharge": elif srcContext == "fittingCharge":

View File

@@ -1,9 +1,10 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from service.fit import Fit
from service.damagePattern import DamagePattern as import_DamagePattern
try: try:
from collections import OrderedDict from collections import OrderedDict
@@ -18,8 +19,8 @@ class DamagePattern(ContextMenu):
return srcContext == "resistancesViewFull" and self.mainFrame.getActiveFit() is not None return srcContext == "resistancesViewFull" and self.mainFrame.getActiveFit() is not None
def getText(self, itmContext, selection): def getText(self, itmContext, selection):
sDP = service.DamagePattern.getInstance() sDP = import_DamagePattern.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
self.fit = sFit.getFit(fitID) self.fit = sFit.getFit(fitID)
@@ -59,7 +60,7 @@ class DamagePattern(ContextMenu):
menuItem.pattern = pattern menuItem.pattern = pattern
# determine active pattern # determine active pattern
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID) f = sFit.getFit(fitID)
dp = f.damagePattern dp = f.damagePattern
@@ -98,7 +99,7 @@ class DamagePattern(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.setDamagePattern(fitID, pattern) sFit.setDamagePattern(fitID, pattern)
setattr(self.mainFrame,"_activeDmgPattern", pattern) setattr(self.mainFrame,"_activeDmgPattern", pattern)

View File

@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
import gui.globalEvents as GE import gui.globalEvents as GE
@@ -15,7 +14,7 @@ class ItemRemove(ContextMenu):
return "Remove {0} Stack".format(itmContext) return "Remove {0} Stack".format(itmContext)
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)

View File

@@ -2,7 +2,6 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import gui.mainFrame import gui.mainFrame
import gui.globalEvents as GE import gui.globalEvents as GE
import service
import wx import wx
class DroneSplit(ContextMenu): class DroneSplit(ContextMenu):
@@ -48,7 +47,7 @@ class DroneSpinner(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.split) self.button.Bind(wx.EVT_BUTTON, self.split)
def split(self, event): def split(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame = gui.mainFrame.MainFrame.getInstance()
fitID = mainFrame.getActiveFit() fitID = mainFrame.getActiveFit()
if self.context == "droneItem": if self.context == "droneItem":

View File

@@ -1,9 +1,9 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from service.fit import Fit
class FactorReload(ContextMenu): class FactorReload(ContextMenu):
def __init__(self): def __init__(self):
@@ -16,14 +16,14 @@ class FactorReload(ContextMenu):
return "Factor in Reload Time" return "Factor in Reload Time"
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.serviceFittingOptions["useGlobalForceReload"] = not sFit.serviceFittingOptions["useGlobalForceReload"] sFit.serviceFittingOptions["useGlobalForceReload"] = not sFit.serviceFittingOptions["useGlobalForceReload"]
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.refreshFit(fitID) sFit.refreshFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def getBitmap(self, context, selection): def getBitmap(self, context, selection):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
if fit.factorReload: if fit.factorReload:

View File

@@ -1,7 +1,6 @@
import wx import wx
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
class FighterAbility(ContextMenu): class FighterAbility(ContextMenu):
@@ -48,7 +47,7 @@ class FighterAbility(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.toggleFighterAbility(fitID, ability) sFit.toggleFighterAbility(fitID, ability)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
@@ -59,7 +58,7 @@ class ImplantSets(ContextMenu):
if self.context == "implantEditor": if self.context == "implantEditor":
# we are calling from character editor, the implant source is different # we are calling from character editor, the implant source is different
sChar = service.Character.getInstance() sChar = Character.getInstance()
charID = self.selection.getActiveCharacter() charID = self.selection.getActiveCharacter()
for implant in set.implants: for implant in set.implants:
@@ -67,7 +66,7 @@ class ImplantSets(ContextMenu):
wx.PostEvent(self.selection, GE.CharChanged()) wx.PostEvent(self.selection, GE.CharChanged())
else: else:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
for implant in set.implants: for implant in set.implants:
sFit.addImplant(fitID, implant.item.ID, recalc=implant == set.implants[-1]) sFit.addImplant(fitID, implant.item.ID, recalc=implant == set.implants[-1])

View File

@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
import gui.globalEvents as GE import gui.globalEvents as GE
@@ -21,7 +20,7 @@ class ItemRemove(ContextMenu):
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
srcContext = fullContext[0] srcContext = fullContext[0]
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)

View File

@@ -1,8 +1,8 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
from service.fit import Fit
class ItemStats(ContextMenu): class ItemStats(ContextMenu):
def __init__(self): def __init__(self):
@@ -27,7 +27,7 @@ class ItemStats(ContextMenu):
srcContext = fullContext[0] srcContext = fullContext[0]
if srcContext == "fittingShip": if srcContext == "fittingShip":
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
stuff = sFit.getFit(fitID).ship stuff = sFit.getFit(fitID).ship
else: else:
stuff = selection[0] stuff = selection[0]

View File

@@ -1,7 +1,7 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import gui.mainFrame import gui.mainFrame
import service from service.market import Market
class MarketJump(ContextMenu): class MarketJump(ContextMenu):
def __init__(self): def __init__(self):
@@ -19,7 +19,7 @@ class MarketJump(ContextMenu):
if not srcContext in validContexts or selection is None or len(selection) < 1: if not srcContext in validContexts or selection is None or len(selection) < 1:
return False return False
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
item = getattr(selection[0], "item", selection[0]) item = getattr(selection[0], "item", selection[0])
mktGrp = sMkt.getMarketGroupByItem(item) mktGrp = sMkt.getMarketGroupByItem(item)

View File

@@ -2,9 +2,10 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog from gui.itemStats import ItemStatsDialog
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
import gui.globalEvents as GE import gui.globalEvents as GE
from service.market import Market
from service.fit import Fit
class MetaSwap(ContextMenu): class MetaSwap(ContextMenu):
def __init__(self): def __init__(self):
@@ -17,7 +18,7 @@ class MetaSwap(ContextMenu):
# Check if list of variations is same for all of selection # Check if list of variations is same for all of selection
# If not - don't show the menu # If not - don't show the menu
mkt = service.Market.getInstance() mkt = Market.getInstance()
self.variations = None self.variations = None
for i in selection: for i in selection:
variations = mkt.getVariationsByItems([i.item]) variations = mkt.getVariationsByItems([i.item])
@@ -88,7 +89,7 @@ class MetaSwap(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)

View File

@@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from eos.types import Hardpoint from eos.types import Hardpoint
import gui.globalEvents as GE import gui.globalEvents as GE
from service.market import Market
from service.fit import Fit
class ModuleAmmoPicker(ContextMenu): class ModuleAmmoPicker(ContextMenu):
DAMAGE_TYPES = ("em", "explosive", "kinetic", "thermal") DAMAGE_TYPES = ("em", "explosive", "kinetic", "thermal")
@@ -40,7 +41,7 @@ class ModuleAmmoPicker(ContextMenu):
return False return False
self.modules = modules self.modules = modules
self.charges = list(filter(lambda charge: service.Market.getInstance().getPublicityByItem(charge), validCharges)) self.charges = list(filter(lambda charge: Market.getInstance().getPublicityByItem(charge), validCharges))
return len(self.charges) > 0 return len(self.charges) > 0
def getText(self, itmContext, selection): def getText(self, itmContext, selection):
@@ -214,7 +215,7 @@ class ModuleAmmoPicker(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules) sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules)

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from eos.types import Hardpoint from eos.types import Hardpoint
@@ -26,7 +25,7 @@ class ModuleGlobalAmmoPicker(ModuleAmmoPicker):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = eos.db.getFit(fitID) fit = eos.db.getFit(fitID)

View File

@@ -2,7 +2,7 @@ from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import wx import wx
import gui.globalEvents as GE import gui.globalEvents as GE
import service from service.market import Market
class PriceClear(ContextMenu): class PriceClear(ContextMenu):
def __init__(self): def __init__(self):
@@ -15,7 +15,7 @@ class PriceClear(ContextMenu):
return "Reset Price Cache" return "Reset Price Cache"
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sMkt.clearPriceCache() sMkt.clearPriceCache()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))

View File

@@ -1,9 +1,9 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
import eos.db import eos.db
from service.fit import Fit
class Project(ContextMenu): class Project(ContextMenu):
def __init__(self): def __init__(self):
@@ -13,7 +13,7 @@ class Project(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False return False
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -27,7 +27,7 @@ class Project(ContextMenu):
return "Project {0} onto Fit".format(itmContext) return "Project {0} onto Fit".format(itmContext)
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
trigger = sFit.project(fitID, selection[0]) trigger = sFit.project(fitID, selection[0])
if trigger: if trigger:

View File

@@ -1,8 +1,8 @@
import wx import wx
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
from gui.shipBrowser import Stage3Selected from gui.shipBrowser import Stage3Selected
from service.fit import Fit
class ShipJump(ContextMenu): class ShipJump(ContextMenu):
def __init__(self): def __init__(self):
@@ -16,7 +16,7 @@ class ShipJump(ContextMenu):
def activate(self, fullContext, selection, i): def activate(self, fullContext, selection, i):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
stuff = sFit.getFit(fitID).ship stuff = sFit.getFit(fitID).ship
groupID = stuff.item.group.ID groupID = stuff.item.group.ID

View File

@@ -1,8 +1,9 @@
import wx import wx
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
from service.fit import Fit
class TacticalMode(ContextMenu): class TacticalMode(ContextMenu):
def __init__(self): def __init__(self):
@@ -12,7 +13,7 @@ class TacticalMode(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext != "fittingShip": if self.mainFrame.getActiveFit() is None or srcContext != "fittingShip":
return False return False
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -52,7 +53,7 @@ class TacticalMode(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.setMode(fitID, self.modeIds[event.Id]) sFit.setMode(fitID, self.modeIds[event.Id])
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -1,9 +1,10 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from service import targetResists as svc_targetResists
from service.fit import Fit
try: try:
from collections import OrderedDict from collections import OrderedDict
@@ -18,7 +19,7 @@ class TargetResists(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull": if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull":
return False return False
sTR = service.TargetResists.getInstance() sTR = svc_targetResists.TargetResists.getInstance()
self.patterns = sTR.getTargetResistsList() self.patterns = sTR.getTargetResistsList()
self.patterns.sort(key=lambda p: (p.name in ["None"], p.name)) self.patterns.sort(key=lambda p: (p.name in ["None"], p.name))
@@ -33,7 +34,7 @@ class TargetResists(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.setTargetResists(fitID, pattern) sFit.setTargetResists(fitID, pattern)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -50,7 +51,7 @@ class TargetResists(ContextMenu):
item.pattern = pattern item.pattern = pattern
# determine active pattern # determine active pattern
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID) f = sFit.getFit(fitID)
tr = f.targetResists tr = f.targetResists

View File

@@ -1,8 +1,9 @@
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.mainFrame import gui.mainFrame
import gui.globalEvents as GE import gui.globalEvents as GE
import service
import wx import wx
from service.market import Market
from service.fit import Fit
class WhProjector(ContextMenu): class WhProjector(ContextMenu):
def __init__(self): def __init__(self):
@@ -16,7 +17,7 @@ class WhProjector(ContextMenu):
def getSubMenu(self, context, selection, rootMenu, i, pitem): def getSubMenu(self, context, selection, rootMenu, i, pitem):
msw = True if "wxMSW" in wx.PlatformInfo else False msw = True if "wxMSW" in wx.PlatformInfo else False
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
effdata = sMkt.getSystemWideEffects() effdata = sMkt.getSystemWideEffects()
self.idmap = {} self.idmap = {}
@@ -48,7 +49,7 @@ class WhProjector(ContextMenu):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.project(fitID, swObj) sFit.project(fitID, swObj)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -18,12 +18,11 @@
#=============================================================================== #===============================================================================
from gui.graph import Graph from gui.graph import Graph
import service
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from eos.graph.fitDps import FitDpsGraph as FitDps from eos.graph.fitDps import FitDpsGraph as FitDps
from eos.graph import Data from eos.graph import Data
import gui.mainFrame import gui.mainFrame
import service from service.attribute import Attribute
class FitDpsGraph(Graph): class FitDpsGraph(Graph):
propertyAttributeMap = {"angle": "maxVelocity", propertyAttributeMap = {"angle": "maxVelocity",
@@ -53,7 +52,7 @@ class FitDpsGraph(Graph):
def getIcons(self): def getIcons(self):
icons = {} icons = {}
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
for key, attrName in self.propertyAttributeMap.iteritems(): for key, attrName in self.propertyAttributeMap.iteritems():
iconFile = sAttr.getAttributeInfo(attrName).icon.iconFile iconFile = sAttr.getAttributeInfo(attrName).icon.iconFile
bitmap = BitmapLoader.getBitmap(iconFile, "icons") bitmap = BitmapLoader.getBitmap(iconFile, "icons")

View File

@@ -4,8 +4,9 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.mainFrame import gui.mainFrame
import service
from service.crest import CrestModes from service.crest import CrestModes
from service.crest import Crest
from service.settings import CRESTSettings
from wx.lib.intctrl import IntCtrl from wx.lib.intctrl import IntCtrl
@@ -15,7 +16,7 @@ class PFCrestPref ( PreferenceView):
def populatePanel( self, panel ): def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = service.settings.CRESTSettings.getInstance() self.settings = CRESTSettings.getInstance()
self.dirtySettings = False self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width dlgWidth = panel.GetParent().GetParent().ClientSize.width
mainSizer = wx.BoxSizer( wx.VERTICAL ) mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -107,16 +108,16 @@ class PFCrestPref ( PreferenceView):
def OnModeChange(self, event): def OnModeChange(self, event):
self.settings.set('mode', event.GetInt()) self.settings.set('mode', event.GetInt())
self.ToggleProxySettings(self.settings.get('mode')) self.ToggleProxySettings(self.settings.get('mode'))
service.Crest.restartService() Crest.restartService()
def OnServerChange(self, event): def OnServerChange(self, event):
self.settings.set('server', event.GetInt()) self.settings.set('server', event.GetInt())
service.Crest.restartService() Crest.restartService()
def OnBtnApply(self, event): def OnBtnApply(self, event):
self.settings.set('clientID', self.inputClientID.GetValue().strip()) self.settings.set('clientID', self.inputClientID.GetValue().strip())
self.settings.set('clientSecret', self.inputClientSecret.GetValue().strip()) self.settings.set('clientSecret', self.inputClientSecret.GetValue().strip())
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
sCrest.delAllCharacters() sCrest.delAllCharacters()
def ToggleProxySettings(self, mode): def ToggleProxySettings(self, mode):

View File

@@ -4,9 +4,9 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
from service.settings import SettingsProvider
from service.fit import Fit
class PFGeneralPref ( PreferenceView): class PFGeneralPref ( PreferenceView):
title = "General" title = "General"
@@ -14,7 +14,7 @@ class PFGeneralPref ( PreferenceView):
def populatePanel( self, panel ): def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.dirtySettings = False self.dirtySettings = False
self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) self.openFitsSettings = SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []})
mainSizer = wx.BoxSizer( wx.VERTICAL ) mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -70,7 +70,7 @@ class PFGeneralPref ( PreferenceView):
defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) defCharSizer = wx.BoxSizer( wx.HORIZONTAL )
self.sFit = service.Fit.getInstance() self.sFit = Fit.getInstance()
self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"]) self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"])
self.cbGlobalDmgPattern.SetValue(self.sFit.serviceFittingOptions["useGlobalDamagePattern"]) self.cbGlobalDmgPattern.SetValue(self.sFit.serviceFittingOptions["useGlobalDamagePattern"])

View File

@@ -5,9 +5,10 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.mainFrame import gui.mainFrame
import service
import gui.globalEvents as GE import gui.globalEvents as GE
from service.settings import HTMLExportSettings
class PFHTMLExportPref ( PreferenceView): class PFHTMLExportPref ( PreferenceView):
title = "HTML Export" title = "HTML Export"
@@ -22,7 +23,7 @@ class PFHTMLExportPref ( PreferenceView):
def populatePanel( self, panel ): def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.HTMLExportSettings = service.settings.HTMLExportSettings.getInstance() self.HTMLExportSettings = HTMLExportSettings.getInstance()
self.dirtySettings = False self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width dlgWidth = panel.GetParent().GetParent().ClientSize.width
mainSizer = wx.BoxSizer( wx.VERTICAL ) mainSizer = wx.BoxSizer( wx.VERTICAL )

View File

@@ -4,7 +4,8 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.mainFrame import gui.mainFrame
import service from service.settings import NetworkSettings
from service.network import Network
class PFNetworkPref ( PreferenceView): class PFNetworkPref ( PreferenceView):
title = "Network" title = "Network"
@@ -12,8 +13,8 @@ class PFNetworkPref ( PreferenceView):
def populatePanel( self, panel ): def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = service.settings.NetworkSettings.getInstance() self.settings = NetworkSettings.getInstance()
self.network = service.Network.getInstance() self.network = Network.getInstance()
self.dirtySettings = False self.dirtySettings = False
mainSizer = wx.BoxSizer( wx.VERTICAL ) mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -164,7 +165,7 @@ class PFNetworkPref ( PreferenceView):
self.UpdateApplyButtonState() self.UpdateApplyButtonState()
if self.nMode is not service.settings.NetworkSettings.PROXY_MODE_MANUAL: # == 2 if self.nMode is not NetworkSettings.PROXY_MODE_MANUAL: # == 2
self.ToggleProxySettings(False) self.ToggleProxySettings(False)
else: else:
self.ToggleProxySettings(True) self.ToggleProxySettings(True)
@@ -236,7 +237,7 @@ class PFNetworkPref ( PreferenceView):
self.UpdateApplyButtonState() self.UpdateApplyButtonState()
if choice is not service.settings.NetworkSettings.PROXY_MODE_MANUAL: if choice is not NetworkSettings.PROXY_MODE_MANUAL:
self.ToggleProxySettings(False) self.ToggleProxySettings(False)
else: else:
self.ToggleProxySettings(True) self.ToggleProxySettings(True)

View File

@@ -1,11 +1,10 @@
import wx import wx
import service
import os import os
from gui.preferenceView import PreferenceView from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from service.settings import UpdateSettings
import service
import gui.globalEvents as GE import gui.globalEvents as GE
@@ -17,7 +16,7 @@ class PFUpdatePref (PreferenceView):
"suppressed release notifications, if any." "suppressed release notifications, if any."
def populatePanel( self, panel ): def populatePanel( self, panel ):
self.UpdateSettings = service.settings.UpdateSettings.getInstance() self.UpdateSettings = UpdateSettings.getInstance()
self.dirtySettings = False self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width dlgWidth = panel.GetParent().GetParent().ClientSize.width

View File

@@ -18,7 +18,6 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.mainFrame import gui.mainFrame
from gui.statsView import StatsView from gui.statsView import StatsView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
@@ -114,7 +113,7 @@ class FirepowerViewFull(StatsView):
def switchToMiningYieldView(self, event): def switchToMiningYieldView(self, event):
# Getting the active fit # Getting the active fit
mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame = gui.mainFrame.MainFrame.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(mainFrame.getActiveFit()) fit = sFit.getFit(mainFrame.getActiveFit())
# Remove ourselves from statsPane's view list # Remove ourselves from statsPane's view list
self.parent.views.remove(self) self.parent.views.remove(self)

View File

@@ -18,7 +18,6 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.mainFrame import gui.mainFrame
from gui.statsView import StatsView from gui.statsView import StatsView
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
@@ -103,7 +102,7 @@ class MiningYieldViewFull(StatsView):
def switchToFirepowerView(self, event): def switchToFirepowerView(self, event):
# Getting the active fit # Getting the active fit
mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame = gui.mainFrame.MainFrame.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(mainFrame.getActiveFit()) fit = sFit.getFit(mainFrame.getActiveFit())
# Remove ourselves from statsPane's view list # Remove ourselves from statsPane's view list
self.parent.views.remove(self) self.parent.views.remove(self)
@@ -124,9 +123,9 @@ class MiningYieldViewFull(StatsView):
def refreshPanel(self, fit): def refreshPanel(self, fit):
#If we did anything intresting, we'd update our labels to reflect the new fit's stats here #If we did anything intresting, we'd update our labels to reflect the new fit's stats here
stats = (("labelFullminingyieldMiner", lambda: fit.minerYield * 3600, 3, 0, 0, u"%s m\u00B3/h",None), stats = (("labelFullminingyieldMiner", lambda: fit.minerYield, 3, 0, 0, u"%s m\u00B3/s",None),
("labelFullminingyieldDrone", lambda: fit.droneYield * 3600, 3, 0, 0, u"%s m\u00B3/h", None), ("labelFullminingyieldDrone", lambda: fit.droneYield, 3, 0, 0, u"%s m\u00B3/s", None),
("labelFullminingyieldTotal", lambda: fit.totalYield * 3600, 3, 0, 0, u"%s m\u00B3/h", None)) ("labelFullminingyieldTotal", lambda: fit.totalYield, 3, 0, 0, u"%s m\u00B3/s", None))
counter = 0 counter = 0
for labelName, value, prec, lowest, highest, valueFormat, altFormat in stats: for labelName, value, prec, lowest, highest, valueFormat, altFormat in stats:

View File

@@ -22,7 +22,7 @@ from gui.statsView import StatsView
from gui import builtinStatsViews from gui import builtinStatsViews
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import service from service.market import Market
class PriceViewFull(StatsView): class PriceViewFull(StatsView):
name = "priceViewFull" name = "priceViewFull"
@@ -92,7 +92,7 @@ class PriceViewFull(StatsView):
for _ in xrange(cargo.amount): for _ in xrange(cargo.amount):
typeIDs.append(cargo.itemID) typeIDs.append(cargo.itemID)
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sMkt.getPrices(typeIDs, self.processPrices) sMkt.getPrices(typeIDs, self.processPrices)
self.labelEMStatus.SetLabel("Updating prices...") self.labelEMStatus.SetLabel("Updating prices...")
else: else:

View File

@@ -23,7 +23,7 @@ from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import gui.mainFrame import gui.mainFrame
import gui.builtinStatsViews.resistancesViewFull as rvf import gui.builtinStatsViews.resistancesViewFull as rvf
import service from service.fit import Fit
class RechargeViewFull(StatsView): class RechargeViewFull(StatsView):
name = "rechargeViewFull" name = "rechargeViewFull"
@@ -43,7 +43,7 @@ class RechargeViewFull(StatsView):
def toggleEffective(self, event): def toggleEffective(self, event):
self.effective = event.effective self.effective = event.effective
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit())) self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip() event.Skip()

View File

@@ -23,7 +23,6 @@ from gui import builtinStatsViews
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from gui import pygauge as PG from gui import pygauge as PG
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import service
import gui.mainFrame import gui.mainFrame
import gui.builtinViews.fittingView as fv import gui.builtinViews.fittingView as fv
import gui.globalEvents as GE import gui.globalEvents as GE

View File

@@ -22,14 +22,16 @@ from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import service from service.attribute import Attribute
from service.market import Market
import wx import wx
class AttributeDisplay(ViewColumn): class AttributeDisplay(ViewColumn):
name = "attr" name = "attr"
def __init__(self, fittingView, params): def __init__(self, fittingView, params):
ViewColumn.__init__(self, fittingView) ViewColumn.__init__(self, fittingView)
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo(params["attribute"]) info = sAttr.getAttributeInfo(params["attribute"])
self.info = info self.info = info
if params["showIcon"]: if params["showIcon"]:
@@ -57,7 +59,7 @@ class AttributeDisplay(ViewColumn):
self.direct = True self.direct = True
self.view = fittingView self.view = fittingView
originalRefresh = fittingView.refresh originalRefresh = fittingView.refresh
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
#Hack into our master view and add a callback for ourselves to know when to query #Hack into our master view and add a callback for ourselves to know when to query
def refresh(stuff): def refresh(stuff):
self.directInfo = sMkt.directAttrRequest(stuff, info) if stuff else None self.directInfo = sMkt.directAttrRequest(stuff, info) if stuff else None

View File

@@ -21,9 +21,10 @@
from gui.viewColumn import ViewColumn from gui.viewColumn import ViewColumn
import gui.mainFrame import gui.mainFrame
#from eos.saveddata.fit import Fit
from service.fit import Fit
import wx import wx
from eos.types import Drone, Cargo, Fit, Module, Slot, Rack, Implant, Fighter from eos.types import Drone, Cargo, Module, Slot, Rack, Implant, Fighter
import service
class BaseName(ViewColumn): class BaseName(ViewColumn):
name = "Base Name" name = "Base Name"
@@ -51,7 +52,7 @@ class BaseName(ViewColumn):
else: else:
return "%s (%s)" % (stuff.name, stuff.ship.item.name) return "%s (%s)" % (stuff.name, stuff.ship.item.name)
elif isinstance(stuff, Rack): elif isinstance(stuff, Rack):
if service.Fit.getInstance().serviceFittingOptions["rackLabels"]: if Fit.getInstance().serviceFittingOptions["rackLabels"]:
if stuff.slot == Slot.MODE: if stuff.slot == Slot.MODE:
return u'─ Tactical Mode ─' return u'─ Tactical Mode ─'
else: else:
@@ -68,7 +69,7 @@ class BaseName(ViewColumn):
else: else:
item = getattr(stuff, "item", stuff) item = getattr(stuff, "item", stuff)
if service.Fit.getInstance().serviceFittingOptions["showMarketShortcuts"]: if Fit.getInstance().serviceFittingOptions["showMarketShortcuts"]:
marketShortcut = getattr(item, "marketShortcut", None) marketShortcut = getattr(item, "marketShortcut", None)
if marketShortcut: if marketShortcut:

View File

@@ -18,12 +18,12 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
from gui.viewColumn import ViewColumn from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from eos.types import Mode from eos.types import Mode
from service.attribute import Attribute
class CapacitorUse(ViewColumn): class CapacitorUse(ViewColumn):
name = "Capacitor Usage" name = "Capacitor Usage"
@@ -32,7 +32,7 @@ class CapacitorUse(ViewColumn):
self.mask = wx.LIST_MASK_IMAGE self.mask = wx.LIST_MASK_IMAGE
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo("capacitorNeed") info = sAttr.getAttributeInfo("capacitorNeed")
self.imageId = fittingView.imageList.GetImageIndex("capacitorRecharge_small", "gui") self.imageId = fittingView.imageList.GetImageIndex("capacitorRecharge_small", "gui")
self.bitmap = BitmapLoader.getBitmap("capacitorRecharge_small", "gui") self.bitmap = BitmapLoader.getBitmap("capacitorRecharge_small", "gui")

View File

@@ -20,11 +20,12 @@
from gui import builtinViewColumns from gui import builtinViewColumns
from gui.viewColumn import ViewColumn from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import wx import wx
from eos.types import Mode from eos.types import Mode
from service.attribute import Attribute
class MaxRange(ViewColumn): class MaxRange(ViewColumn):
name = "Max Range" name = "Max Range"
def __init__(self, fittingView, params = None): def __init__(self, fittingView, params = None):
@@ -33,7 +34,7 @@ class MaxRange(ViewColumn):
"displayName": False} "displayName": False}
ViewColumn.__init__(self, fittingView) ViewColumn.__init__(self, fittingView)
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo("maxRange") info = sAttr.getAttributeInfo("maxRange")
self.info = info self.info = info
if params["showIcon"]: if params["showIcon"]:

View File

@@ -405,9 +405,9 @@ class Miscellanea(ViewColumn):
cycleTime = stuff.cycleTime cycleTime = stuff.cycleTime
if not miningAmount or not cycleTime: if not miningAmount or not cycleTime:
return "", None return "", None
minePerHour = (float(miningAmount) * 1000 / cycleTime) * 3600 minePerSec = float(miningAmount) * 1000 / cycleTime
text = "{0}/h".format(formatAmount(minePerHour, 3, 0, 3)) text = "{0}/s".format(formatAmount(minePerSec, 3, 0, 3))
tooltip = "Mining Yield per hour" tooltip = "Yield per second"
return text, tooltip return text, tooltip
elif itemGroup == "Logistic Drone": elif itemGroup == "Logistic Drone":
armorAmount = stuff.getModifiedItemAttr("armorDamageAmount") armorAmount = stuff.getModifiedItemAttr("armorDamageAmount")
@@ -442,9 +442,9 @@ class Miscellanea(ViewColumn):
cycleTime = stuff.getModifiedItemAttr("duration") cycleTime = stuff.getModifiedItemAttr("duration")
if not miningAmount or not cycleTime: if not miningAmount or not cycleTime:
return "", None return "", None
minePerHour = (float(miningAmount) * 1000 / cycleTime) * 3600 minePerSec = float(miningAmount) * 1000 / cycleTime
text = "{0}/h".format(formatAmount(minePerHour, 3, 0, 3)) text = "{0}/s".format(formatAmount(minePerSec, 3, 0, 3))
tooltip = "Mining Yield per hour" tooltip = "Yield per second"
return text, tooltip return text, tooltip
elif itemGroup == "Micro Jump Drive": elif itemGroup == "Micro Jump Drive":
cycleTime = stuff.getModifiedItemAttr("duration") / 1000 cycleTime = stuff.getModifiedItemAttr("duration") / 1000

View File

@@ -22,7 +22,7 @@ from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
from eos.types import Drone, Cargo from eos.types import Drone, Cargo
import wx import wx
import service from service.market import Market
class Price(ViewColumn): class Price(ViewColumn):
name = "Price" name = "Price"
@@ -36,7 +36,7 @@ class Price(ViewColumn):
if stuff.item is None or stuff.item.group.name == "Ship Modifiers": if stuff.item is None or stuff.item.group.name == "Ship Modifiers":
return "" return ""
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
price = sMkt.getPriceNow(stuff.item.ID) price = sMkt.getPriceNow(stuff.item.ID)
if not price or not price.price or not price.isValid: if not price or not price.price or not price.isValid:
@@ -50,7 +50,7 @@ class Price(ViewColumn):
return formatAmount(price, 3, 3, 9, currency=True) return formatAmount(price, 3, 3, 9, currency=True)
def delayedText(self, mod, display, colItem): def delayedText(self, mod, display, colItem):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
def callback(item): def callback(item):
price = sMkt.getPriceNow(item.ID) price = sMkt.getPriceNow(item.ID)
text = formatAmount(price.price, 3, 3, 9, currency=True) if price.price else "" text = formatAmount(price.price, 3, 3, 9, currency=True) if price.price else ""

View File

@@ -21,13 +21,12 @@ from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import wx import wx
import service
class PropertyDisplay(ViewColumn): class PropertyDisplay(ViewColumn):
name = "prop" name = "prop"
def __init__(self, fittingView, params): def __init__(self, fittingView, params):
ViewColumn.__init__(self, fittingView) ViewColumn.__init__(self, fittingView)
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
attributeSlave = params["attributeSlave"] or params["property"] attributeSlave = params["attributeSlave"] or params["property"]
# This function can throw an exception if the database isn't sane # This function can throw an exception if the database isn't sane
# We need to do a sanity check before this runs # We need to do a sanity check before this runs

View File

@@ -2,7 +2,6 @@ import wx
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.chromeTabs import gui.chromeTabs
import gui.mainFrame import gui.mainFrame
import service
class BlankPage(wx.Panel): class BlankPage(wx.Panel):
def __init__(self, parent): def __init__(self, parent):
@@ -23,7 +22,7 @@ class BlankPage(wx.Panel):
def pageChanged(self, event): def pageChanged(self, event):
if self.parent.IsActive(self): if self.parent.IsActive(self):
fitID = None fitID = None
# sFit = service.Fit.getInstance() # sFit = Fit.getInstance()
# sFit.switchFit(fitID) # sFit.switchFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -1,6 +1,5 @@
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
class BaseValidator(wx.PyValidator): class BaseValidator(wx.PyValidator):
def __init__(self): def __init__(self):

View File

@@ -19,7 +19,6 @@
import wx import wx
import wx.lib.newevent import wx.lib.newevent
import service
import gui.mainFrame import gui.mainFrame
import gui.marketBrowser import gui.marketBrowser
import gui.display as d import gui.display as d
@@ -32,6 +31,9 @@ from gui.bitmapLoader import BitmapLoader
import gui.builtinViews.emptyView import gui.builtinViews.emptyView
from gui.utils.exportHtml import exportHtml from gui.utils.exportHtml import exportHtml
from service.fit import Fit
from service.market import Market
import gui.globalEvents as GE import gui.globalEvents as GE
#Tab spawning handler #Tab spawning handler
@@ -55,7 +57,7 @@ class FitSpawner(gui.multiSwitch.TabSpawner):
pass pass
if count < 0: if count < 0:
startup = getattr(event, "startup", False) # see OpenFitsThread in gui.mainFrame startup = getattr(event, "startup", False) # see OpenFitsThread in gui.mainFrame
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
openFitInNew = sFit.serviceFittingOptions["openFitInNew"] openFitInNew = sFit.serviceFittingOptions["openFitInNew"]
mstate = wx.GetMouseState() mstate = wx.GetMouseState()
@@ -207,7 +209,7 @@ class FittingView(d.Display):
def pageChanged(self, event): def pageChanged(self, event):
if self.parent.IsActive(self): if self.parent.IsActive(self):
fitID = self.getActiveFit() fitID = self.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.switchFit(fitID) sFit.switchFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -262,7 +264,7 @@ class FittingView(d.Display):
try: try:
# Sometimes there is no active page after deletion, hence the try block # Sometimes there is no active page after deletion, hence the try block
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.refreshFit(self.getActiveFit()) sFit.refreshFit(self.getActiveFit())
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID))
except wx._core.PyDeadObjectError: except wx._core.PyDeadObjectError:
@@ -282,7 +284,7 @@ class FittingView(d.Display):
fitID = event.fitID fitID = event.fitID
startup = getattr(event, "startup", False) startup = getattr(event, "startup", False)
self.activeFitID = fitID self.activeFitID = fitID
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.updateTab() self.updateTab()
if not startup or startup == 2: # see OpenFitsThread in gui.mainFrame if not startup or startup == 2: # see OpenFitsThread in gui.mainFrame
self.Show(fitID is not None) self.Show(fitID is not None)
@@ -293,7 +295,7 @@ class FittingView(d.Display):
event.Skip() event.Skip()
def updateTab(self): def updateTab(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.getActiveFit(), basic=True) fit = sFit.getFit(self.getActiveFit(), basic=True)
bitmap = BitmapLoader.getImage("race_%s_small" % fit.ship.item.race, "gui") bitmap = BitmapLoader.getImage("race_%s_small" % fit.ship.item.race, "gui")
@@ -308,7 +310,7 @@ class FittingView(d.Display):
itemID = event.itemID itemID = event.itemID
fitID = self.activeFitID fitID = self.activeFitID
if fitID != None: if fitID != None:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
if sFit.isAmmo(itemID): if sFit.isAmmo(itemID):
modules = [] modules = []
sel = self.GetFirstSelected() sel = self.GetFirstSelected()
@@ -337,7 +339,7 @@ class FittingView(d.Display):
self.click(event) self.click(event)
def removeModule(self, module): def removeModule(self, module):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
populate = sFit.removeModule(self.activeFitID, fit.modules.index(module)) populate = sFit.removeModule(self.activeFitID, fit.modules.index(module))
@@ -351,7 +353,7 @@ class FittingView(d.Display):
dstRow, _ = self.HitTest((x, y)) dstRow, _ = self.HitTest((x, y))
if dstRow != -1 and dstRow not in self.blanks: if dstRow != -1 and dstRow not in self.blanks:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
moduleChanged = sFit.changeModule(fitID, self.mods[dstRow].position, srcIdx) moduleChanged = sFit.changeModule(fitID, self.mods[dstRow].position, srcIdx)
if moduleChanged is None: if moduleChanged is None:
@@ -367,7 +369,7 @@ class FittingView(d.Display):
if dstRow != -1 and dstRow not in self.blanks: if dstRow != -1 and dstRow not in self.blanks:
module = self.mods[dstRow] module = self.mods[dstRow]
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.moveCargoToModule(self.mainFrame.getActiveFit(), module.position, srcIdx, mstate.CmdDown() and module.isEmpty) sFit.moveCargoToModule(self.mainFrame.getActiveFit(), module.position, srcIdx, mstate.CmdDown() and module.isEmpty)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -375,7 +377,7 @@ class FittingView(d.Display):
def swapItems(self, x, y, srcIdx): def swapItems(self, x, y, srcIdx):
'''Swap two modules in fitting window''' '''Swap two modules in fitting window'''
mstate = wx.GetMouseState() mstate = wx.GetMouseState()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
if mstate.CmdDown(): if mstate.CmdDown():
@@ -408,7 +410,7 @@ class FittingView(d.Display):
known to the display, and not the backend, so it's safe. known to the display, and not the backend, so it's safe.
''' '''
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
slotOrder = [Slot.SUBSYSTEM, Slot.HIGH, Slot.MED, Slot.LOW, Slot.RIG, Slot.SERVICE] slotOrder = [Slot.SUBSYSTEM, Slot.HIGH, Slot.MED, Slot.LOW, Slot.RIG, Slot.SERVICE]
@@ -481,7 +483,7 @@ class FittingView(d.Display):
if self.activeFitID is None: if self.activeFitID is None:
return return
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
selection = [] selection = []
sel = self.GetFirstSelected() sel = self.GetFirstSelected()
contexts = [] contexts = []
@@ -505,7 +507,7 @@ class FittingView(d.Display):
sel = self.GetNextSelected(sel) sel = self.GetNextSelected(sel)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
contexts.append(("fittingShip", "Ship" if not fit.isStructure else "Citadel")) contexts.append(("fittingShip", "Ship" if not fit.isStructure else "Citadel"))
@@ -537,7 +539,7 @@ class FittingView(d.Display):
else: else:
mods = self.getSelectedMods() mods = self.getSelectedMods()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
ctrl = wx.GetMouseState().CmdDown() or wx.GetMouseState().MiddleDown() ctrl = wx.GetMouseState().CmdDown() or wx.GetMouseState().MiddleDown()
click = "ctrl" if ctrl is True else "right" if event.GetButton() == 3 else "left" click = "ctrl" if ctrl is True else "right" if event.GetButton() == 3 else "left"
@@ -571,7 +573,7 @@ class FittingView(d.Display):
self.Freeze() self.Freeze()
d.Display.refresh(self, stuff) d.Display.refresh(self, stuff)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
slotMap = {} slotMap = {}
@@ -637,7 +639,7 @@ class FittingView(d.Display):
for i in xrange(len(self.DEFAULT_COLS)): for i in xrange(len(self.DEFAULT_COLS)):
columnsWidths.append(0) columnsWidths.append(0)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
try: try:
fit = sFit.getFit(self.activeFitID) fit = sFit.getFit(self.activeFitID)
except: except:

View File

@@ -1,6 +1,5 @@
import wx.gizmos import wx.gizmos
import gui.fleetBrowser import gui.fleetBrowser
import service
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
#Tab spawning handler #Tab spawning handler

View File

@@ -1,10 +1,10 @@
import wx import wx
import service
import gui.display as d import gui.display as d
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.PFSearchBox as SBox import gui.PFSearchBox as SBox
from gui.marketBrowser import SearchBox from gui.marketBrowser import SearchBox
from wx.lib.buttons import GenBitmapButton from wx.lib.buttons import GenBitmapButton
from service.market import Market
class BaseImplantEditorView (wx.Panel): class BaseImplantEditorView (wx.Panel):
def addMarketViewImage(self, iconFile): def addMarketViewImage(self, iconFile):
@@ -71,7 +71,7 @@ class BaseImplantEditorView (wx.Panel):
# Populate the market tree # Populate the market tree
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
for mktGrp in sMkt.getImplantTree(): for mktGrp in sMkt.getImplantTree():
iconId = self.addMarketViewImage(sMkt.getIconByMarketGroup(mktGrp)) iconId = self.addMarketViewImage(sMkt.getIconByMarketGroup(mktGrp))
childId = self.availableImplantsTree.AppendItem(root, mktGrp.name, iconId, data=wx.TreeItemData(mktGrp.ID)) childId = self.availableImplantsTree.AppendItem(root, mktGrp.name, iconId, data=wx.TreeItemData(mktGrp.ID))
@@ -126,7 +126,7 @@ class BaseImplantEditorView (wx.Panel):
def expandLookup(self, event): def expandLookup(self, event):
tree = self.availableImplantsTree tree = self.availableImplantsTree
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
parent = event.Item parent = event.Item
child, _ = tree.GetFirstChild(parent) child, _ = tree.GetFirstChild(parent)
text = tree.GetItemText(child) text = tree.GetItemText(child)
@@ -235,7 +235,7 @@ class ItemView(d.Display):
self.update(self.items) self.update(self.items)
def scheduleSearch(self, event=None): def scheduleSearch(self, event=None):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
search = self.searchBox.GetLineText(0) search = self.searchBox.GetLineText(0)
# Make sure we do not count wildcard as search symbol # Make sure we do not count wildcard as search symbol

View File

@@ -18,12 +18,12 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.display as d import gui.display as d
import gui.marketBrowser as mb import gui.marketBrowser as mb
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import globalEvents as GE import globalEvents as GE
from service.fit import Fit
class CargoViewDrop(wx.PyDropTarget): class CargoViewDrop(wx.PyDropTarget):
def __init__(self, dropFn): def __init__(self, dropFn):
@@ -75,7 +75,7 @@ class CargoView(d.Display):
if data[0] == "fitting": if data[0] == "fitting":
self.swapModule(x, y, int(data[1])) self.swapModule(x, y, int(data[1]))
elif data[0] == "market": elif data[0] == "market":
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.addCargo(self.mainFrame.getActiveFit(), int(data[1]), 1) sFit.addCargo(self.mainFrame.getActiveFit(), int(data[1]), 1)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -94,7 +94,7 @@ class CargoView(d.Display):
keycode = event.GetKeyCode() keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
row = self.GetFirstSelected() row = self.GetFirstSelected()
if row != -1: if row != -1:
sFit.removeCargo(fitID, self.GetItemData(row)) sFit.removeCargo(fitID, self.GetItemData(row))
@@ -103,7 +103,7 @@ class CargoView(d.Display):
def swapModule(self, x, y, modIdx): def swapModule(self, x, y, modIdx):
'''Swap a module from fitting window with cargo''' '''Swap a module from fitting window with cargo'''
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
dstRow, _ = self.HitTest((x, y)) dstRow, _ = self.HitTest((x, y))
mstate = wx.GetMouseState() mstate = wx.GetMouseState()
@@ -125,7 +125,7 @@ class CargoView(d.Display):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -161,7 +161,7 @@ class CargoView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col != self.getColIndex(State): if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
cargo = self.cargo[self.GetItemData(row)] cargo = self.cargo[self.GetItemData(row)]
sFit.removeCargo(fitID, self.original.index(cargo)) sFit.removeCargo(fitID, self.original.index(cargo))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -174,11 +174,11 @@ class CargoView(d.Display):
def spawnMenu(self): def spawnMenu(self):
sel = self.GetFirstSelected() sel = self.GetFirstSelected()
if sel != -1: if sel != -1:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
cargo = fit.cargo[sel] cargo = fit.cargo[sel]
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sourceContext = "cargoItem" sourceContext = "cargoItem"
itemContext = sMkt.getCategoryByItem(cargo.item).name itemContext = sMkt.getCategoryByItem(cargo.item).name

View File

@@ -22,11 +22,14 @@ import wx
import wx.lib.newevent import wx.lib.newevent
import wx.gizmos import wx.gizmos
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.globalEvents as GE import gui.globalEvents as GE
from gui.builtinViews.implantEditor import BaseImplantEditorView from gui.builtinViews.implantEditor import BaseImplantEditorView
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
from service.fit import Fit
from service.character import Character
from service.network import AuthenticationError, TimeoutError
from service.market import Market
class CharacterTextValidor(BaseValidator): class CharacterTextValidor(BaseValidator):
@@ -60,7 +63,7 @@ class CharacterEntityEditor(EntityEditor):
self.SetEditorValidator(CharacterTextValidor) self.SetEditorValidator(CharacterTextValidor)
def getEntitiesFromContext(self): def getEntitiesFromContext(self):
sChar = service.Character.getInstance() sChar = Character.getInstance()
charList = sorted(sChar.getCharacterList(), key=lambda c: c.name) charList = sorted(sChar.getCharacterList(), key=lambda c: c.name)
# Do some processing to ensure that we have All 0 and All 5 at the top # Do some processing to ensure that we have All 0 and All 5 at the top
@@ -76,21 +79,21 @@ class CharacterEntityEditor(EntityEditor):
return charList return charList
def DoNew(self, name): def DoNew(self, name):
sChar = service.Character.getInstance() sChar = Character.getInstance()
return sChar.new(name) return sChar.new(name)
def DoRename(self, entity, name): def DoRename(self, entity, name):
sChar = service.Character.getInstance() sChar = Character.getInstance()
sChar.rename(entity, name) sChar.rename(entity, name)
def DoCopy(self, entity, name): def DoCopy(self, entity, name):
sChar = service.Character.getInstance() sChar = Character.getInstance()
copy = sChar.copy(entity) copy = sChar.copy(entity)
sChar.rename(copy, name) sChar.rename(copy, name)
return copy return copy
def DoDelete(self, entity): def DoDelete(self, entity):
sChar = service.Character.getInstance() sChar = Character.getInstance()
sChar.delete(entity) sChar.delete(entity)
@@ -104,7 +107,7 @@ class CharacterEditor(wx.Frame):
self.mainFrame = parent self.mainFrame = parent
#self.disableWin = wx.WindowDisabler(self) #self.disableWin = wx.WindowDisabler(self)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)) self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
@@ -181,7 +184,7 @@ class CharacterEditor(wx.Frame):
self.Destroy() self.Destroy()
def saveChar(self, event): def saveChar(self, event):
sChr = service.Character.getInstance() sChr = Character.getInstance()
char = self.entityEditor.getActiveEntity() char = self.entityEditor.getActiveEntity()
sChr.saveCharacter(char.ID) sChr.saveCharacter(char.ID)
wx.PostEvent(self, GE.CharListUpdated()) wx.PostEvent(self, GE.CharListUpdated())
@@ -192,7 +195,7 @@ class CharacterEditor(wx.Frame):
dlg.ShowModal() dlg.ShowModal()
def revertChar(self, event): def revertChar(self, event):
sChr = service.Character.getInstance() sChr = Character.getInstance()
char = self.entityEditor.getActiveEntity() char = self.entityEditor.getActiveEntity()
sChr.revertCharacter(char.ID) sChr.revertCharacter(char.ID)
wx.PostEvent(self, GE.CharListUpdated()) wx.PostEvent(self, GE.CharListUpdated())
@@ -223,7 +226,7 @@ class CharacterEditor(wx.Frame):
event.Skip() event.Skip()
def Destroy(self): def Destroy(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
if fitID is not None: if fitID is not None:
sFit.clearFit(fitID) sFit.clearFit(fitID)
@@ -296,7 +299,7 @@ class SkillTreeView (wx.Panel):
self.Layout() self.Layout()
def populateSkillTree(self, event=None): def populateSkillTree(self, event=None):
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity() char = self.charEditor.entityEditor.getActiveEntity()
dirtyGroups = set([skill.item.group.ID for skill in char.dirtySkills]) dirtyGroups = set([skill.item.group.ID for skill in char.dirtySkills])
@@ -326,7 +329,7 @@ class SkillTreeView (wx.Panel):
tree.Delete(child) tree.Delete(child)
#Get the real intrestin' stuff #Get the real intrestin' stuff
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity() char = self.charEditor.entityEditor.getActiveEntity()
for id, name in sChar.getSkills(tree.GetPyData(root)): for id, name in sChar.getSkills(tree.GetPyData(root)):
iconId = self.skillBookImageId iconId = self.skillBookImageId
@@ -348,7 +351,7 @@ class SkillTreeView (wx.Panel):
return return
char = self.charEditor.entityEditor.getActiveEntity() char = self.charEditor.entityEditor.getActiveEntity()
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
if char.name not in ("All 0", "All 5"): if char.name not in ("All 0", "All 5"):
self.levelChangeMenu.selection = sMkt.getItem(self.skillTreeListCtrl.GetPyData(item)) self.levelChangeMenu.selection = sMkt.getItem(self.skillTreeListCtrl.GetPyData(item))
self.PopupMenu(self.levelChangeMenu) self.PopupMenu(self.levelChangeMenu)
@@ -359,7 +362,7 @@ class SkillTreeView (wx.Panel):
def changeLevel(self, event): def changeLevel(self, event):
level = self.levelIds.get(event.Id) level = self.levelIds.get(event.Id)
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity() char = self.charEditor.entityEditor.getActiveEntity()
selection = self.skillTreeListCtrl.GetSelection() selection = self.skillTreeListCtrl.GetSelection()
skillID = self.skillTreeListCtrl.GetPyData(selection) skillID = self.skillTreeListCtrl.GetPyData(selection)
@@ -405,19 +408,19 @@ class ImplantEditorView(BaseImplantEditorView):
self.determineEnabled() self.determineEnabled()
def getImplantsFromContext(self): def getImplantsFromContext(self):
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity() char = self.Parent.Parent.entityEditor.getActiveEntity()
return sChar.getImplants(char.ID) return sChar.getImplants(char.ID)
def addImplantToContext(self, item): def addImplantToContext(self, item):
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity() char = self.Parent.Parent.entityEditor.getActiveEntity()
sChar.addImplant(char.ID, item.ID) sChar.addImplant(char.ID, item.ID)
def removeImplantFromContext(self, implant): def removeImplantFromContext(self, implant):
sChar = service.Character.getInstance() sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity() char = self.Parent.Parent.entityEditor.getActiveEntity()
sChar.removeImplant(char.ID, implant) sChar.removeImplant(char.ID, implant)
@@ -536,7 +539,7 @@ class APIView (wx.Panel):
self.charChanged(None) self.charChanged(None)
def charChanged(self, event): def charChanged(self, event):
sChar = service.Character.getInstance() sChar = Character.getInstance()
activeChar = self.charEditor.entityEditor.getActiveEntity() activeChar = self.charEditor.entityEditor.getActiveEntity()
ID, key, char, chars = sChar.getApiDetails(activeChar.ID) ID, key, char, chars = sChar.getApiDetails(activeChar.ID)
@@ -575,13 +578,13 @@ class APIView (wx.Panel):
self.stStatus.SetLabel("Invalid keyID or vCode!") self.stStatus.SetLabel("Invalid keyID or vCode!")
return return
sChar = service.Character.getInstance() sChar = Character.getInstance()
try: try:
activeChar = self.charEditor.entityEditor.getActiveEntity() activeChar = self.charEditor.entityEditor.getActiveEntity()
list = sChar.apiCharList(activeChar.ID, self.inputID.GetLineText(0), self.inputKey.GetLineText(0)) list = sChar.apiCharList(activeChar.ID, self.inputID.GetLineText(0), self.inputKey.GetLineText(0))
except service.network.AuthenticationError, e: except AuthenticationError, e:
self.stStatus.SetLabel("Authentication failure. Please check keyID and vCode combination.") self.stStatus.SetLabel("Authentication failure. Please check keyID and vCode combination.")
except service.network.TimeoutError, e: except TimeoutError, e:
self.stStatus.SetLabel("Request timed out. Please check network connectivity and/or proxy settings.") self.stStatus.SetLabel("Request timed out. Please check network connectivity and/or proxy settings.")
except Exception, e: except Exception, e:
self.stStatus.SetLabel("Error:\n%s"%e.message) self.stStatus.SetLabel("Error:\n%s"%e.message)
@@ -601,7 +604,7 @@ class APIView (wx.Panel):
charName = self.charChoice.GetString(self.charChoice.GetSelection()) charName = self.charChoice.GetString(self.charChoice.GetSelection())
if charName: if charName:
try: try:
sChar = service.Character.getInstance() sChar = Character.getInstance()
activeChar = self.charEditor.entityEditor.getActiveEntity() activeChar = self.charEditor.entityEditor.getActiveEntity()
sChar.apiFetch(activeChar.ID, charName) sChar.apiFetch(activeChar.ID, charName)
self.stStatus.SetLabel("Successfully fetched %s\'s skills from EVE API." % charName) self.stStatus.SetLabel("Successfully fetched %s\'s skills from EVE API." % charName)
@@ -614,7 +617,7 @@ class SaveCharacterAs(wx.Dialog):
wx.Dialog.__init__(self, parent, title="Save Character As...", size=wx.Size(300, 60)) wx.Dialog.__init__(self, parent, title="Save Character As...", size=wx.Size(300, 60))
self.charID = charID self.charID = charID
self.parent = parent self.parent = parent
sChar = service.Character.getInstance() sChar = Character.getInstance()
name = sChar.getCharName(charID) name = sChar.getCharName(charID)
bSizer1 = wx.BoxSizer(wx.HORIZONTAL) bSizer1 = wx.BoxSizer(wx.HORIZONTAL)
@@ -631,7 +634,7 @@ class SaveCharacterAs(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.change) self.button.Bind(wx.EVT_BUTTON, self.change)
def change(self, event): def change(self, event):
sChar = service.Character.getInstance() sChar = Character.getInstance()
sChar.saveCharacterAs(self.charID, self.input.GetLineText(0)) sChar.saveCharacterAs(self.charID, self.input.GetLineText(0))
wx.PostEvent(self.parent, GE.CharListUpdated()) wx.PostEvent(self.parent, GE.CharListUpdated())

View File

@@ -18,10 +18,11 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.mainFrame import gui.mainFrame
from service.character import Character
from service.fit import Fit
class CharacterSelection(wx.Panel): class CharacterSelection(wx.Panel):
def __init__(self, parent): def __init__(self, parent):
@@ -76,7 +77,7 @@ class CharacterSelection(wx.Panel):
def refreshCharacterList(self, event=None): def refreshCharacterList(self, event=None):
choice = self.charChoice choice = self.charChoice
sChar = service.Character.getInstance() sChar = Character.getInstance()
activeChar = self.getActiveCharacter() activeChar = self.getActiveCharacter()
choice.Clear() choice.Clear()
@@ -94,7 +95,7 @@ class CharacterSelection(wx.Panel):
charID = sChar.all5ID() charID = sChar.all5ID()
self.selectChar(charID) self.selectChar(charID)
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.changeChar(fitID, charID) sFit.changeChar(fitID, charID)
choice.Append(u"\u2015 Open Character Editor \u2015", -1) choice.Append(u"\u2015 Open Character Editor \u2015", -1)
@@ -104,7 +105,7 @@ class CharacterSelection(wx.Panel):
event.Skip() event.Skip()
def refreshApi(self, event): def refreshApi(self, event):
sChar = service.Character.getInstance() sChar = Character.getInstance()
ID, key, charName, chars = sChar.getApiDetails(self.getActiveCharacter()) ID, key, charName, chars = sChar.getApiDetails(self.getActiveCharacter())
if charName: if charName:
try: try:
@@ -117,7 +118,7 @@ class CharacterSelection(wx.Panel):
def charChanged(self, event): def charChanged(self, event):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
charID = self.getActiveCharacter() charID = self.getActiveCharacter()
sChar = service.Character.getInstance() sChar = Character.getInstance()
if charID == -1: if charID == -1:
# revert to previous character # revert to previous character
@@ -129,7 +130,7 @@ class CharacterSelection(wx.Panel):
else: else:
self.btnRefresh.Enable(False) self.btnRefresh.Enable(False)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.changeChar(fitID, charID) sFit.changeChar(fitID, charID)
self.charCache = self.charChoice.GetCurrentSelection() self.charCache = self.charChoice.GetCurrentSelection()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -148,7 +149,7 @@ class CharacterSelection(wx.Panel):
def fitChanged(self, event): def fitChanged(self, event):
self.charChoice.Enable(event.fitID != None) self.charChoice.Enable(event.fitID != None)
choice = self.charChoice choice = self.charChoice
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
currCharID = choice.GetClientData(choice.GetCurrentSelection()) currCharID = choice.GetClientData(choice.GetCurrentSelection())
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
newCharID = fit.character.ID if fit is not None else None newCharID = fit.character.ID if fit is not None else None
@@ -156,7 +157,7 @@ class CharacterSelection(wx.Panel):
self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills)
self.skillReqsStaticBitmap.SetToolTipString("No active fit") self.skillReqsStaticBitmap.SetToolTipString("No active fit")
else: else:
sCharacter = service.Character.getInstance() sCharacter = Character.getInstance()
reqs = sCharacter.checkRequirements(fit) reqs = sCharacter.checkRequirements(fit)
sCharacter.skillReqsDict = {'charname':fit.character.name, 'skills':[]} sCharacter.skillReqsDict = {'charname':fit.character.name, 'skills':[]}
if len(reqs) == 0: if len(reqs) == 0:
@@ -175,7 +176,7 @@ class CharacterSelection(wx.Panel):
self.skillReqsStaticBitmap.SetToolTipString(tip.strip()) self.skillReqsStaticBitmap.SetToolTipString(tip.strip())
if newCharID == None: if newCharID == None:
sChar = service.Character.getInstance() sChar = Character.getInstance()
self.selectChar(sChar.all5ID()) self.selectChar(sChar.all5ID())
elif currCharID != newCharID: elif currCharID != newCharID:
@@ -187,7 +188,7 @@ class CharacterSelection(wx.Panel):
def _buildSkillsTooltip(self, reqs, currItem = "", tabulationLevel = 0): def _buildSkillsTooltip(self, reqs, currItem = "", tabulationLevel = 0):
tip = "" tip = ""
sCharacter = service.Character.getInstance() sCharacter = Character.getInstance()
if tabulationLevel == 0: if tabulationLevel == 0:
for item, subReqs in reqs.iteritems(): for item, subReqs in reqs.iteritems():
@@ -210,7 +211,7 @@ class CharacterSelection(wx.Panel):
return tip return tip
def _buildSkillsTooltipCondensed(self, reqs, currItem = "", tabulationLevel = 0, skillsMap = {}): def _buildSkillsTooltipCondensed(self, reqs, currItem = "", tabulationLevel = 0, skillsMap = {}):
sCharacter = service.Character.getInstance() sCharacter = Character.getInstance()
if tabulationLevel == 0: if tabulationLevel == 0:
for item, subReqs in reqs.iteritems(): for item, subReqs in reqs.iteritems():

View File

@@ -25,7 +25,8 @@ import gui.utils.fonts as fonts
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import gui.utils.fonts as fonts import gui.utils.fonts as fonts
import service from service.fit import Fit
_PageChanging, EVT_NOTEBOOK_PAGE_CHANGING = wx.lib.newevent.NewEvent() _PageChanging, EVT_NOTEBOOK_PAGE_CHANGING = wx.lib.newevent.NewEvent()
_PageChanged, EVT_NOTEBOOK_PAGE_CHANGED = wx.lib.newevent.NewEvent() _PageChanged, EVT_NOTEBOOK_PAGE_CHANGED = wx.lib.newevent.NewEvent()
@@ -699,7 +700,7 @@ class PFTabsContainer(wx.Panel):
self.containerHeight = height self.containerHeight = height
self.startDrag = False self.startDrag = False
self.dragging = False self.dragging = False
self.sFit = service.Fit.getInstance() self.sFit = Fit.getInstance()
self.inclination = 7 self.inclination = 7
if canAdd: if canAdd:

View File

@@ -20,11 +20,13 @@
import wx import wx
import gui.display as d import gui.display as d
import gui.globalEvents as GE import gui.globalEvents as GE
import service
import gui.droneView import gui.droneView
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import eos.types import eos.types
from service.fit import Fit
from service.market import Market
class DummyItem: class DummyItem:
@@ -88,7 +90,7 @@ class CommandView(d.Display):
keycode = event.GetKeyCode() keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
row = self.GetFirstSelected() row = self.GetFirstSelected()
if row != -1: if row != -1:
sFit.removeCommand(fitID, self.get(row)) sFit.removeCommand(fitID, self.get(row))
@@ -99,7 +101,7 @@ class CommandView(d.Display):
if type == "fit": if type == "fit":
activeFit = self.mainFrame.getActiveFit() activeFit = self.mainFrame.getActiveFit()
if activeFit: if activeFit:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
draggedFit = sFit.getFit(fitID) draggedFit = sFit.getFit(fitID)
sFit.addCommandFit(activeFit, draggedFit) sFit.addCommandFit(activeFit, draggedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -118,7 +120,7 @@ class CommandView(d.Display):
return fit.name return fit.name
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -168,7 +170,7 @@ class CommandView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleCommandFit(fitID, item) sFit.toggleCommandFit(fitID, item)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -183,7 +185,7 @@ class CommandView(d.Display):
if sel != -1: if sel != -1:
item = self.get(sel) item = self.get(sel)
if item is None: return if item is None: return
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
fitSrcContext = "commandFit" fitSrcContext = "commandFit"
fitItemContext = item.name fitItemContext = item.name
context = ((fitSrcContext,fitItemContext),) context = ((fitSrcContext,fitItemContext),)
@@ -204,6 +206,6 @@ class CommandView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col != self.getColIndex(State): if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeCommand(fitID, self.get(row)) sFit.removeCommand(fitID, self.get(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -4,7 +4,6 @@ import json
import wx import wx
import requests import requests
import service
from service.crest import CrestModes from service.crest import CrestModes
from eos.types import Cargo from eos.types import Cargo
@@ -23,7 +22,7 @@ class CrestFittings(wx.Frame):
self.mainFrame = parent self.mainFrame = parent
mainSizer = wx.BoxSizer(wx.VERTICAL) mainSizer = wx.BoxSizer(wx.VERTICAL)
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
characterSelectSizer = wx.BoxSizer( wx.HORIZONTAL ) characterSelectSizer = wx.BoxSizer( wx.HORIZONTAL )
@@ -90,7 +89,7 @@ class CrestFittings(wx.Frame):
event.Skip() event.Skip()
def updateCharList(self): def updateCharList(self):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters() chars = sCrest.getCrestCharacters()
if len(chars) == 0: if len(chars) == 0:
@@ -123,7 +122,7 @@ class CrestFittings(wx.Frame):
event.Skip() event.Skip()
def getActiveCharacter(self): def getActiveCharacter(self):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT: if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID return sCrest.implicitCharacter.ID
@@ -132,7 +131,7 @@ class CrestFittings(wx.Frame):
return self.charChoice.GetClientData(selection) if selection is not None else None return self.charChoice.GetClientData(selection) if selection is not None else None
def fetchFittings(self, event): def fetchFittings(self, event):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
try: try:
waitDialog = wx.BusyInfo("Fetching fits, please wait...", parent=self) waitDialog = wx.BusyInfo("Fetching fits, please wait...", parent=self)
fittings = sCrest.getFittings(self.getActiveCharacter()) fittings = sCrest.getFittings(self.getActiveCharacter())
@@ -150,12 +149,12 @@ class CrestFittings(wx.Frame):
if not selection: if not selection:
return return
data = self.fitTree.fittingsTreeCtrl.GetPyData(selection) data = self.fitTree.fittingsTreeCtrl.GetPyData(selection)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fits = sFit.importFitFromBuffer(data) fits = sFit.importFitFromBuffer(data)
self.mainFrame._openAfterImport(fits) self.mainFrame._openAfterImport(fits)
def deleteFitting(self, event): def deleteFitting(self, event):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
selection = self.fitView.fitSelection selection = self.fitView.fitSelection
if not selection: if not selection:
return return
@@ -180,7 +179,7 @@ class ExportToEve(wx.Frame):
self.mainFrame = parent self.mainFrame = parent
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)) self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
mainSizer = wx.BoxSizer(wx.VERTICAL) mainSizer = wx.BoxSizer(wx.VERTICAL)
hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -217,7 +216,7 @@ class ExportToEve(wx.Frame):
self.Centre(wx.BOTH) self.Centre(wx.BOTH)
def updateCharList(self): def updateCharList(self):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters() chars = sCrest.getCrestCharacters()
if len(chars) == 0: if len(chars) == 0:
@@ -245,7 +244,7 @@ class ExportToEve(wx.Frame):
event.Skip() event.Skip()
def getActiveCharacter(self): def getActiveCharacter(self):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT: if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID return sCrest.implicitCharacter.ID
@@ -254,7 +253,7 @@ class ExportToEve(wx.Frame):
return self.charChoice.GetClientData(selection) if selection is not None else None return self.charChoice.GetClientData(selection) if selection is not None else None
def exportFitting(self, event): def exportFitting(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
self.statusbar.SetStatusText("", 0) self.statusbar.SetStatusText("", 0)
@@ -264,7 +263,7 @@ class ExportToEve(wx.Frame):
return return
self.statusbar.SetStatusText("Sending request and awaiting response", 1) self.statusbar.SetStatusText("Sending request and awaiting response", 1)
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
try: try:
data = sFit.exportCrest(fitID) data = sFit.exportCrest(fitID)
@@ -321,7 +320,7 @@ class CrestMgmt(wx.Dialog):
event.Skip() event.Skip()
def popCharList(self): def popCharList(self):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters() chars = sCrest.getCrestCharacters()
self.lcCharacters.DeleteAllItems() self.lcCharacters.DeleteAllItems()
@@ -335,7 +334,7 @@ class CrestMgmt(wx.Dialog):
self.lcCharacters.SetColumnWidth(1, wx.LIST_AUTOSIZE) self.lcCharacters.SetColumnWidth(1, wx.LIST_AUTOSIZE)
def addChar(self, event): def addChar(self, event):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
uri = sCrest.startServer() uri = sCrest.startServer()
webbrowser.open(uri) webbrowser.open(uri)
@@ -343,7 +342,7 @@ class CrestMgmt(wx.Dialog):
item = self.lcCharacters.GetFirstSelected() item = self.lcCharacters.GetFirstSelected()
if item > -1: if item > -1:
charID = self.lcCharacters.GetItemData(item) charID = self.lcCharacters.GetItemData(item)
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
sCrest.delCrestCharacter(charID) sCrest.delCrestCharacter(charID)
self.popCharList() self.popCharList()

View File

@@ -19,12 +19,13 @@
import wx import wx
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.marketBrowser as mb import gui.marketBrowser as mb
import gui.display as d import gui.display as d
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from service.fit import Fit
from service.market import Market
class DroneViewDrop(wx.PyDropTarget): class DroneViewDrop(wx.PyDropTarget):
def __init__(self, dropFn): def __init__(self, dropFn):
@@ -141,7 +142,7 @@ class DroneView(d.Display):
wx.PostEvent(self.mainFrame, mb.ItemSelected(itemID=int(data[1]))) wx.PostEvent(self.mainFrame, mb.ItemSelected(itemID=int(data[1])))
def _merge(self, src, dst): def _merge(self, src, dst):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
if sFit.mergeDrones(fitID, self.drones[src], self.drones[dst]): if sFit.mergeDrones(fitID, self.drones[src], self.drones[dst]):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -151,7 +152,7 @@ class DroneView(d.Display):
'Fighter Bombers', 'Combat Utility Drones', 'Fighter Bombers', 'Combat Utility Drones',
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones') 'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones')
def droneKey(self, drone): def droneKey(self, drone):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
groupName = sMkt.getMarketGroupByItem(drone.item).name groupName = sMkt.getMarketGroupByItem(drone.item).name
@@ -159,7 +160,7 @@ class DroneView(d.Display):
drone.item.name) drone.item.name)
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -193,7 +194,7 @@ class DroneView(d.Display):
def addItem(self, event): def addItem(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -218,7 +219,7 @@ class DroneView(d.Display):
def removeDrone(self, drone): def removeDrone(self, drone):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeDrone(fitID, self.original.index(drone)) sFit.removeDrone(fitID, self.original.index(drone))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -229,7 +230,7 @@ class DroneView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
drone = self.drones[row] drone = self.drones[row]
sFit.toggleDrone(fitID, self.original.index(drone)) sFit.toggleDrone(fitID, self.original.index(drone))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -244,7 +245,7 @@ class DroneView(d.Display):
if sel != -1: if sel != -1:
drone = self.drones[sel] drone = self.drones[sel]
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sourceContext = "droneItem" sourceContext = "droneItem"
itemContext = sMkt.getCategoryByItem(drone.item).name itemContext = sMkt.getCategoryByItem(drone.item).name
menu = ContextMenu.getMenu((drone,), (sourceContext, itemContext)) menu = ContextMenu.getMenu((drone,), (sourceContext, itemContext))

View File

@@ -19,7 +19,6 @@
import wx import wx
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.marketBrowser as mb import gui.marketBrowser as mb
import gui.mainFrame import gui.mainFrame
@@ -27,6 +26,7 @@ import gui.display as d
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from eos.types import Slot from eos.types import Slot
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from service.fit import Fit
class FighterViewDrop(wx.PyDropTarget): class FighterViewDrop(wx.PyDropTarget):
def __init__(self, dropFn): def __init__(self, dropFn):
@@ -81,7 +81,7 @@ class FighterView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID) fit = sFit.getFit(activeFitID)
@@ -215,7 +215,7 @@ class FighterDisplay(d.Display):
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones', 'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones',
'Light Fighters', 'Heavy Fighters', 'Support Fighters') 'Light Fighters', 'Heavy Fighters', 'Support Fighters')
def droneKey(self, drone): def droneKey(self, drone):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
groupName = sMkt.getMarketGroupByItem(drone.item).name groupName = sMkt.getMarketGroupByItem(drone.item).name
print groupName print groupName
@@ -224,7 +224,7 @@ class FighterDisplay(d.Display):
''' '''
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit) self.Parent.Parent.Parent.DisablePage(self.Parent, not fit)
@@ -259,7 +259,7 @@ class FighterDisplay(d.Display):
def addItem(self, event): def addItem(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
trigger = sFit.addFighter(fitID, event.itemID) trigger = sFit.addFighter(fitID, event.itemID)
if trigger: if trigger:
@@ -278,7 +278,7 @@ class FighterDisplay(d.Display):
def removeFighter(self, fighter): def removeFighter(self, fighter):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeFighter(fitID, self.original.index(fighter)) sFit.removeFighter(fitID, self.original.index(fighter))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -289,7 +289,7 @@ class FighterDisplay(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fighter = self.fighters[row] fighter = self.fighters[row]
sFit.toggleFighter(fitID, self.original.index(fighter)) sFit.toggleFighter(fitID, self.original.index(fighter))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -304,7 +304,7 @@ class FighterDisplay(d.Display):
if sel != -1: if sel != -1:
fighter = self.fighters[sel] fighter = self.fighters[sel]
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sourceContext = "fighterItem" sourceContext = "fighterItem"
itemContext = sMkt.getCategoryByItem(fighter.item).name itemContext = sMkt.getCategoryByItem(fighter.item).name
menu = ContextMenu.getMenu((fighter,), (sourceContext, itemContext)) menu = ContextMenu.getMenu((fighter,), (sourceContext, itemContext))

View File

@@ -19,11 +19,16 @@
import wx import wx
from wx.lib.scrolledpanel import ScrolledPanel from wx.lib.scrolledpanel import ScrolledPanel
import service
import gui.mainFrame import gui.mainFrame
import gui.shipBrowser import gui.shipBrowser
import gui.globalEvents as GE import gui.globalEvents as GE
from service.fit import Fit
from service.fleet import Fleet
from service.character import Character
from service.market import Market
from gui import characterEditor as CharEditor from gui import characterEditor as CharEditor
class GangView ( ScrolledPanel ): class GangView ( ScrolledPanel ):
@@ -157,14 +162,14 @@ class GangView ( ScrolledPanel ):
event.Skip() event.Skip()
return return
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fleetSrv = service.Fleet.getInstance() fleetSrv = Fleet.getInstance()
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID) fit = sFit.getFit(activeFitID)
sChar = service.Character.getInstance() sChar = Character.getInstance()
charList = sChar.getCharacterList() charList = sChar.getCharacterList()
if activeFitID: if activeFitID:
@@ -211,11 +216,11 @@ class GangView ( ScrolledPanel ):
for id in self.fleet: for id in self.fleet:
if location == self.fleet[id]['stText']: type = id if location == self.fleet[id]['stText']: type = id
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
boostee = sFit.getFit(activeFitID) boostee = sFit.getFit(activeFitID)
booster = None booster = None
fleetSrv = service.Fleet.getInstance() fleetSrv = Fleet.getInstance()
if type == 0: fleetSrv.setLinearFleetCom(boostee, booster) if type == 0: fleetSrv.setLinearFleetCom(boostee, booster)
if type == 1: fleetSrv.setLinearWingCom(boostee, booster) if type == 1: fleetSrv.setLinearWingCom(boostee, booster)
@@ -231,7 +236,7 @@ class GangView ( ScrolledPanel ):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID))
def fitRenamed(self, event): def fitRenamed(self, event):
fleetSrv = service.Fleet.getInstance() fleetSrv = Fleet.getInstance()
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
if activeFitID: if activeFitID:
@@ -241,10 +246,10 @@ class GangView ( ScrolledPanel ):
def fitSelected(self, event): def fitSelected(self, event):
''' Fires when active fit is selected and when booster is saved to fit. Update the UI to reflect changes ''' ''' Fires when active fit is selected and when booster is saved to fit. Update the UI to reflect changes '''
fleetSrv = service.Fleet.getInstance() fleetSrv = Fleet.getInstance()
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID or activeFitID) fit = sFit.getFit(event.fitID or activeFitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -291,12 +296,12 @@ class GangView ( ScrolledPanel ):
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
if activeFitID: if activeFitID:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
boostee = sFit.getFit(activeFitID) boostee = sFit.getFit(activeFitID)
booster = sFit.getFit(fitID) booster = sFit.getFit(fitID)
fleetSrv = service.Fleet.getInstance() fleetSrv = Fleet.getInstance()
if type == 0: fleetSrv.setLinearFleetCom(boostee, booster) if type == 0: fleetSrv.setLinearFleetCom(boostee, booster)
if type == 1: fleetSrv.setLinearWingCom(boostee, booster) if type == 1: fleetSrv.setLinearWingCom(boostee, booster)
@@ -306,8 +311,8 @@ class GangView ( ScrolledPanel ):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID))
def RefreshBoosterFits(self, event = None): def RefreshBoosterFits(self, event = None):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
fitList = sFit.getBoosterFits() fitList = sFit.getBoosterFits()
for id in self.fleet: for id in self.fleet:
@@ -336,7 +341,7 @@ class GangView ( ScrolledPanel ):
choice.SetSelection(0) choice.SetSelection(0)
def RefreshCharacterList(self, event = None): def RefreshCharacterList(self, event = None):
sChar = service.Character.getInstance() sChar = Character.getInstance()
charList = sChar.getCharacterList() charList = sChar.getCharacterList()
for id in self.fleet: for id in self.fleet:
choice = self.fleet[id]['chChar'] choice = self.fleet[id]['chChar']
@@ -365,7 +370,7 @@ class GangView ( ScrolledPanel ):
#Those are drags coming from pyfa sources, NOT builtin wx drags #Those are drags coming from pyfa sources, NOT builtin wx drags
self.draggedFitID = None self.draggedFitID = None
if type == "fit": if type == "fit":
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
if fit and not fit.isStructure: if fit and not fit.isStructure:
@@ -384,7 +389,7 @@ class GangView ( ScrolledPanel ):
type = self.options.index(menuItem.GetText()) type = self.options.index(menuItem.GetText())
if self.draggedFitID: if self.draggedFitID:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
draggedFit = sFit.getFit(self.draggedFitID) draggedFit = sFit.getFit(self.draggedFitID)
self.AddCommander(draggedFit.ID, type) self.AddCommander(draggedFit.ID, type)
@@ -392,7 +397,7 @@ class GangView ( ScrolledPanel ):
def OnFitChoiceSelected(self, event): def OnFitChoiceSelected(self, event):
''' Fired when booster choice is selected ''' ''' Fired when booster choice is selected '''
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
# set type via choice box used # set type via choice box used
chFit = event.GetEventObject() chFit = event.GetEventObject()

View File

@@ -24,8 +24,8 @@ import gui.display
import gui.globalEvents as GE import gui.globalEvents as GE
from gui.graph import Graph from gui.graph import Graph
import service
import gui.mainFrame import gui.mainFrame
from service.fit import Fit
enabled = True enabled = True
mplImported = False mplImported = False
@@ -78,7 +78,7 @@ class GraphFrame(wx.Frame):
self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.mainSizer) self.SetSizer(self.mainSizer)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
self.fits = [fit] if fit is not None else [] self.fits = [fit] if fit is not None else []
self.fitList = FitList(self) self.fitList = FitList(self)
@@ -242,7 +242,7 @@ class GraphFrame(wx.Frame):
self.draw() self.draw()
def AppendFitToList(self, fitID): def AppendFitToList(self, fitID):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
if fit not in self.fits: if fit not in self.fits:
self.fits.append(fit) self.fits.append(fit)

View File

@@ -18,7 +18,6 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.display as d import gui.display as d
import gui.marketBrowser as mb import gui.marketBrowser as mb
import gui.mainFrame import gui.mainFrame
@@ -26,6 +25,7 @@ from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import globalEvents as GE import globalEvents as GE
from eos.types import ImplantLocation from eos.types import ImplantLocation
from service.fit import Fit
class ImplantView(wx.Panel): class ImplantView(wx.Panel):
@@ -56,7 +56,7 @@ class ImplantView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
activeFitID = self.mainFrame.getActiveFit() activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID) fit = sFit.getFit(activeFitID)
if fit: if fit:
@@ -70,7 +70,7 @@ class ImplantView(wx.Panel):
def OnRadioSelect(self, event): def OnRadioSelect(self, event):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleImplantSource(fitID, ImplantLocation.FIT if self.rbFit.GetValue() else ImplantLocation.CHARACTER) sFit.toggleImplantSource(fitID, ImplantLocation.FIT if self.rbFit.GetValue() else ImplantLocation.CHARACTER)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -107,7 +107,7 @@ class ImplantDisplay(d.Display):
event.Skip() event.Skip()
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit or fit.isStructure) self.Parent.Parent.Parent.DisablePage(self.Parent, not fit or fit.isStructure)
@@ -137,7 +137,7 @@ class ImplantDisplay(d.Display):
event.Skip() event.Skip()
def addItem(self, event): def addItem(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID) fit = sFit.getFit(fitID)
@@ -161,7 +161,7 @@ class ImplantDisplay(d.Display):
def removeImplant(self, implant): def removeImplant(self, implant):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeImplant(fitID, self.original.index(implant)) sFit.removeImplant(fitID, self.original.index(implant))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -172,7 +172,7 @@ class ImplantDisplay(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleImplant(fitID, row) sFit.toggleImplant(fitID, row)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -185,7 +185,7 @@ class ImplantDisplay(d.Display):
sel = self.GetFirstSelected() sel = self.GetFirstSelected()
menu = None menu = None
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
if not fit: if not fit:
@@ -194,7 +194,7 @@ class ImplantDisplay(d.Display):
if sel != -1: if sel != -1:
implant = fit.appliedImplants[sel] implant = fit.appliedImplants[sel]
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sourceContext = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" sourceContext = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar"
itemContext = sMkt.getCategoryByItem(implant.item).name itemContext = sMkt.getCategoryByItem(implant.item).name

View File

@@ -26,11 +26,12 @@ import wx.lib.mixins.listctrl as listmix
import wx.html import wx.html
from eos.types import Fit, Ship, Citadel, Module, Skill, Booster, Implant, Drone, Mode, Fighter from eos.types import Fit, Ship, Citadel, Module, Skill, Booster, Implant, Drone, Mode, Fighter
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import service
import config import config
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
from gui.utils.numberFormatter import formatAmount from gui.utils.numberFormatter import formatAmount
import csv import csv
from service.market import Market
from service.attribute import Attribute
try: try:
from collections import OrderedDict from collections import OrderedDict
@@ -72,7 +73,7 @@ class ItemStatsDialog(wx.Dialog):
itmContext = None itmContext = None
item = getattr(victim, "item", None) if srcContext.lower() not in ("projectedcharge", "fittingcharge") else getattr(victim, "charge", None) item = getattr(victim, "item", None) if srcContext.lower() not in ("projectedcharge", "fittingcharge") else getattr(victim, "charge", None)
if item is None: if item is None:
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
item = sMkt.getItem(victim.ID) item = sMkt.getItem(victim.ID)
victim = None victim = None
self.context = itmContext self.context = itmContext
@@ -152,7 +153,7 @@ class ItemStatsContainer ( wx.Panel ):
def __init__( self, parent, stuff, item, context = None): def __init__( self, parent, stuff, item, context = None):
wx.Panel.__init__ ( self, parent ) wx.Panel.__init__ ( self, parent )
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
mainSizer = wx.BoxSizer( wx.VERTICAL ) mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -494,15 +495,15 @@ class ItemParams (wx.Panel):
def TranslateValueUnit(self, value, unitName, unitDisplayName): def TranslateValueUnit(self, value, unitName, unitDisplayName):
def itemIDCallback(): def itemIDCallback():
item = service.Market.getInstance().getItem(value) item = Market.getInstance().getItem(value)
return "%s (%d)" % (item.name, value) if item is not None else str(value) return "%s (%d)" % (item.name, value) if item is not None else str(value)
def groupIDCallback(): def groupIDCallback():
group = service.Market.getInstance().getGroup(value) group = Market.getInstance().getGroup(value)
return "%s (%d)" % (group.name, value) if group is not None else str(value) return "%s (%d)" % (group.name, value) if group is not None else str(value)
def attributeIDCallback(): def attributeIDCallback():
attribute = service.Attribute.getInstance().getAttributeInfo(value) attribute = Attribute.getInstance().getAttributeInfo(value)
return "%s (%d)" % (attribute.name.capitalize(), value) return "%s (%d)" % (attribute.name.capitalize(), value)
trans = {"Inverse Absolute Percent": (lambda: (1-value)*100, unitName), trans = {"Inverse Absolute Percent": (lambda: (1-value)*100, unitName),
@@ -664,7 +665,7 @@ class ItemCompare(wx.Panel):
self.paramList.InsertColumn(len(self.attrs)+1, "Price") self.paramList.InsertColumn(len(self.attrs)+1, "Price")
self.paramList.SetColumnWidth(len(self.attrs)+1, 60) self.paramList.SetColumnWidth(len(self.attrs)+1, 60)
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sMkt.getPrices([x.ID for x in self.items], self.processPrices) sMkt.getPrices([x.ID for x in self.items], self.processPrices)
for item in self.items: for item in self.items:
@@ -687,15 +688,15 @@ class ItemCompare(wx.Panel):
def TranslateValueUnit(self, value, unitName, unitDisplayName): def TranslateValueUnit(self, value, unitName, unitDisplayName):
def itemIDCallback(): def itemIDCallback():
item = service.Market.getInstance().getItem(value) item = Market.getInstance().getItem(value)
return "%s (%d)" % (item.name, value) if item is not None else str(value) return "%s (%d)" % (item.name, value) if item is not None else str(value)
def groupIDCallback(): def groupIDCallback():
group = service.Market.getInstance().getGroup(value) group = Market.getInstance().getGroup(value)
return "%s (%d)" % (group.name, value) if group is not None else str(value) return "%s (%d)" % (group.name, value) if group is not None else str(value)
def attributeIDCallback(): def attributeIDCallback():
attribute = service.Attribute.getInstance().getAttributeInfo(value) attribute = Attribute.getInstance().getAttributeInfo(value)
return "%s (%d)" % (attribute.name.capitalize(), value) return "%s (%d)" % (attribute.name.capitalize(), value)
trans = {"Inverse Absolute Percent": (lambda: (1 - value) * 100, unitName), trans = {"Inverse Absolute Percent": (lambda: (1 - value) * 100, unitName),

View File

@@ -29,7 +29,6 @@ from codecs import open
from wx._core import PyDeadObjectError from wx._core import PyDeadObjectError
from wx.lib.wordwrap import wordwrap from wx.lib.wordwrap import wordwrap
import service
import config import config
import threading import threading
import webbrowser import webbrowser
@@ -58,6 +57,13 @@ from gui.utils.clipboard import toClipboard, fromClipboard
from gui.fleetBrowser import FleetBrowser from gui.fleetBrowser import FleetBrowser
from gui.updateDialog import UpdateDialog from gui.updateDialog import UpdateDialog
from gui.builtinViews import * from gui.builtinViews import *
from gui import graphFrame
from service.settings import SettingsProvider
from service.fit import Fit
from service.character import Character
from service.crest import Crest
from service.update import Update
# import this to access override setting # import this to access override setting
from eos.modifiedAttributeDict import ModifiedAttributeDict from eos.modifiedAttributeDict import ModifiedAttributeDict
@@ -208,7 +214,7 @@ class MainFrame(wx.Frame):
self.LoadPreviousOpenFits() self.LoadPreviousOpenFits()
#Check for updates #Check for updates
self.sUpdate = service.Update.getInstance() self.sUpdate = Update.getInstance()
self.sUpdate.CheckUpdate(self.ShowUpdateBox) self.sUpdate.CheckUpdate(self.ShowUpdateBox)
if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)):
@@ -223,9 +229,9 @@ class MainFrame(wx.Frame):
dlg.ShowModal() dlg.ShowModal()
def LoadPreviousOpenFits(self): def LoadPreviousOpenFits(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.prevOpenFits = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) self.prevOpenFits = SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []})
fits = self.prevOpenFits['pyfaOpenFits'] fits = self.prevOpenFits['pyfaOpenFits']
# Remove any fits that cause exception when fetching (non-existent fits) # Remove any fits that cause exception when fetching (non-existent fits)
@@ -245,7 +251,7 @@ class MainFrame(wx.Frame):
def LoadMainFrameAttribs(self): def LoadMainFrameAttribs(self):
mainFrameDefaultAttribs = {"wnd_width": 1000, "wnd_height": 700, "wnd_maximized": False, "browser_width": 300, "market_height": 0, "fitting_height": -200} mainFrameDefaultAttribs = {"wnd_width": 1000, "wnd_height": 700, "wnd_maximized": False, "browser_width": 300, "market_height": 0, "fitting_height": -200}
self.mainFrameAttribs = service.SettingsProvider.getInstance().getSettings("pyfaMainWindowAttribs", mainFrameDefaultAttribs) self.mainFrameAttribs = SettingsProvider.getInstance().getSettings("pyfaMainWindowAttribs", mainFrameDefaultAttribs)
if self.mainFrameAttribs["wnd_maximized"]: if self.mainFrameAttribs["wnd_maximized"]:
width = mainFrameDefaultAttribs["wnd_width"] width = mainFrameDefaultAttribs["wnd_width"]
@@ -319,7 +325,7 @@ class MainFrame(wx.Frame):
self.prevOpenFits['pyfaOpenFits'].append(m()) self.prevOpenFits['pyfaOpenFits'].append(m())
# save all teh settingz # save all teh settingz
service.SettingsProvider.getInstance().saveAll() SettingsProvider.getInstance().saveAll()
event.Skip() event.Skip()
def ExitApp(self, event): def ExitApp(self, event):
@@ -372,7 +378,7 @@ class MainFrame(wx.Frame):
def showExportDialog(self, event): def showExportDialog(self, event):
""" Export active fit """ """ Export active fit """
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.getActiveFit()) fit = sFit.getFit(self.getActiveFit())
defaultFile = "%s - %s.xml"%(fit.ship.item.name, fit.name) if fit else None defaultFile = "%s - %s.xml"%(fit.ship.item.name, fit.name) if fit else None
@@ -540,7 +546,7 @@ class MainFrame(wx.Frame):
dlg.Show() dlg.Show()
def updateTitle(self, event): def updateTitle(self, event):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
char = sCrest.implicitCharacter char = sCrest.implicitCharacter
if char: if char:
t = time.gmtime(char.eve.expires-time.time()) t = time.gmtime(char.eve.expires-time.time())
@@ -575,7 +581,7 @@ class MainFrame(wx.Frame):
self.SetTitle(self.title) self.SetTitle(self.title)
menu = self.GetMenuBar() menu = self.GetMenuBar()
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
if type == CrestModes.IMPLICIT: if type == CrestModes.IMPLICIT:
menu.SetLabel(menu.ssoLoginId, "Login to EVE") menu.SetLabel(menu.ssoLoginId, "Login to EVE")
@@ -588,7 +594,7 @@ class MainFrame(wx.Frame):
menu.Enable(menu.exportToEveId, not enable) menu.Enable(menu.exportToEveId, not enable)
def ssoHandler(self, event): def ssoHandler(self, event):
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT: if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
if sCrest.implicitCharacter is not None: if sCrest.implicitCharacter is not None:
sCrest.logout() sCrest.logout()
@@ -610,7 +616,7 @@ class MainFrame(wx.Frame):
menu.SetLabel(menu.toggleOverridesId, "Turn Overrides Off" if ModifiedAttributeDict.OVERRIDES else "Turn Overrides On") menu.SetLabel(menu.toggleOverridesId, "Turn Overrides Off" if ModifiedAttributeDict.OVERRIDES else "Turn Overrides On")
def saveChar(self, event): def saveChar(self, event):
sChr = service.Character.getInstance() sChr = Character.getInstance()
charID = self.charSelection.getActiveCharacter() charID = self.charSelection.getActiveCharacter()
sChr.saveCharacter(charID) sChr.saveCharacter(charID)
wx.PostEvent(self, GE.CharListUpdated()) wx.PostEvent(self, GE.CharListUpdated())
@@ -621,7 +627,7 @@ class MainFrame(wx.Frame):
dlg.ShowModal() dlg.ShowModal()
def revertChar(self, event): def revertChar(self, event):
sChr = service.Character.getInstance() sChr = Character.getInstance()
charID = self.charSelection.getActiveCharacter() charID = self.charSelection.getActiveCharacter()
sChr.revertCharacter(charID) sChr.revertCharacter(charID)
wx.PostEvent(self, GE.CharListUpdated()) wx.PostEvent(self, GE.CharListUpdated())
@@ -659,31 +665,31 @@ class MainFrame(wx.Frame):
self.marketBrowser.search.Focus() self.marketBrowser.search.Focus()
def clipboardEft(self): def clipboardEft(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportFit(self.getActiveFit())) toClipboard(sFit.exportFit(self.getActiveFit()))
def clipboardEftImps(self): def clipboardEftImps(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportEftImps(self.getActiveFit())) toClipboard(sFit.exportEftImps(self.getActiveFit()))
def clipboardDna(self): def clipboardDna(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportDna(self.getActiveFit())) toClipboard(sFit.exportDna(self.getActiveFit()))
def clipboardCrest(self): def clipboardCrest(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportCrest(self.getActiveFit())) toClipboard(sFit.exportCrest(self.getActiveFit()))
def clipboardXml(self): def clipboardXml(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportXml(None, self.getActiveFit())) toClipboard(sFit.exportXml(None, self.getActiveFit()))
def clipboardMultiBuy(self): def clipboardMultiBuy(self):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
toClipboard(sFit.exportMultiBuy(self.getActiveFit())) toClipboard(sFit.exportMultiBuy(self.getActiveFit()))
def importFromClipboard(self, event): def importFromClipboard(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
try: try:
fits = sFit.importFitFromBuffer(fromClipboard(), self.getActiveFit()) fits = sFit.importFitFromBuffer(fromClipboard(), self.getActiveFit())
except: except:
@@ -709,7 +715,7 @@ class MainFrame(wx.Frame):
def exportSkillsNeeded(self, event): def exportSkillsNeeded(self, event):
""" Exports skills needed for active fit and active character """ """ Exports skills needed for active fit and active character """
sCharacter = service.Character.getInstance() sCharacter = Character.getInstance()
saveDialog = wx.FileDialog(self, "Export Skills Needed As...", saveDialog = wx.FileDialog(self, "Export Skills Needed As...",
wildcard = "EVEMon skills training file (*.emp)|*.emp|" \ wildcard = "EVEMon skills training file (*.emp)|*.emp|" \
"EVEMon skills training XML file (*.xml)|*.xml|" \ "EVEMon skills training XML file (*.xml)|*.xml|" \
@@ -737,7 +743,7 @@ class MainFrame(wx.Frame):
def fileImportDialog(self, event): def fileImportDialog(self, event):
"""Handles importing single/multiple EVE XML / EFT cfg fit files""" """Handles importing single/multiple EVE XML / EFT cfg fit files"""
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
dlg = wx.FileDialog(self, "Open One Or More Fitting Files", dlg = wx.FileDialog(self, "Open One Or More Fitting Files",
wildcard = "EVE XML fitting files (*.xml)|*.xml|" \ wildcard = "EVE XML fitting files (*.xml)|*.xml|" \
"EFT text fitting files (*.cfg)|*.cfg|" \ "EFT text fitting files (*.cfg)|*.cfg|" \
@@ -767,7 +773,7 @@ class MainFrame(wx.Frame):
if '.' not in os.path.basename(filePath): if '.' not in os.path.basename(filePath):
filePath += ".xml" filePath += ".xml"
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
max = sFit.countAllFits() max = sFit.countAllFits()
self.progressDialog = wx.ProgressDialog("Backup fits", self.progressDialog = wx.ProgressDialog("Backup fits",
@@ -779,7 +785,7 @@ class MainFrame(wx.Frame):
def exportHtml(self, event): def exportHtml(self, event):
from gui.utils.exportHtml import exportHtml from gui.utils.exportHtml import exportHtml
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
settings = service.settings.HTMLExportSettings.getInstance() settings = service.settings.HTMLExportSettings.getInstance()
max = sFit.countAllFits() max = sFit.countAllFits()
@@ -865,7 +871,7 @@ class MainFrame(wx.Frame):
if dlg.ShowModal() == wx.ID_OK: if dlg.ShowModal() == wx.ID_OK:
self.waitDialog = wx.BusyInfo("Importing Character...") self.waitDialog = wx.BusyInfo("Importing Character...")
sCharacter = service.Character.getInstance() sCharacter = Character.getInstance()
sCharacter.importCharacter(dlg.GetPaths(), self.importCharacterCallback) sCharacter.importCharacter(dlg.GetPaths(), self.importCharacterCallback)
def importCharacterCallback(self): def importCharacterCallback(self):
@@ -878,7 +884,8 @@ class MainFrame(wx.Frame):
def openGraphFrame(self, event): def openGraphFrame(self, event):
if not self.graphFrame: if not self.graphFrame:
self.graphFrame = GraphFrame(self) self.graphFrame = GraphFrame(self)
if gui.graphFrame.enabled:
if graphFrame.enabled:
self.graphFrame.Show() self.graphFrame.Show()
else: else:
self.graphFrame.SetFocus() self.graphFrame.SetFocus()

View File

@@ -23,7 +23,8 @@ from gui.bitmapLoader import BitmapLoader
import gui.mainFrame import gui.mainFrame
import gui.graphFrame import gui.graphFrame
import gui.globalEvents as GE import gui.globalEvents as GE
import service from service.crest import Crest
from service.character import Character
if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)):
from service.crest import CrestModes from service.crest import CrestModes
@@ -120,7 +121,7 @@ class MainMenuBar(wx.MenuBar):
windowMenu.AppendItem(preferencesItem) windowMenu.AppendItem(preferencesItem)
if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)):
self.sCrest = service.Crest.getInstance() self.sCrest = Crest.getInstance()
# CREST Menu # CREST Menu
crestMenu = wx.Menu() crestMenu = wx.Menu()
@@ -164,7 +165,7 @@ class MainMenuBar(wx.MenuBar):
self.Enable(wx.ID_COPY, enable) self.Enable(wx.ID_COPY, enable)
self.Enable(self.exportSkillsNeededId, enable) self.Enable(self.exportSkillsNeededId, enable)
sChar = service.Character.getInstance() sChar = Character.getInstance()
charID = self.mainFrame.charSelection.getActiveCharacter() charID = self.mainFrame.charSelection.getActiveCharacter()
char = sChar.getCharacter(charID) char = sChar.getCharacter(charID)

View File

@@ -18,11 +18,12 @@
#=============================================================================== #===============================================================================
import wx import wx
import service
import gui.display as d import gui.display as d
from gui.cachingImageList import CachingImageList from gui.cachingImageList import CachingImageList
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.PFSearchBox as SBox import gui.PFSearchBox as SBox
from service.market import Market
from service.attribute import Attribute
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
@@ -45,7 +46,7 @@ class MarketBrowser(wx.Panel):
vbox.Add(self.splitter, 1, wx.EXPAND) vbox.Add(self.splitter, 1, wx.EXPAND)
# Grab market service instance and create child objects # Grab market service instance and create child objects
self.sMkt = service.Market.getInstance() self.sMkt = Market.getInstance()
self.searchMode = False self.searchMode = False
self.marketView = MarketTree(self.splitter, self) self.marketView = MarketTree(self.splitter, self)
self.itemView = ItemView(self.splitter, self) self.itemView = ItemView(self.splitter, self)
@@ -416,7 +417,7 @@ class ItemView(d.Display):
def populate(self, items): def populate(self, items):
if len(items) > 0: if len(items) > 0:
# Get dictionary with meta level attribute # Get dictionary with meta level attribute
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel") attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMkt sMkt = self.sMkt
self.metalvls = sMkt.directAttrRequest(items, attrs) self.metalvls = sMkt.directAttrRequest(items, attrs)
@@ -432,7 +433,7 @@ class ItemView(d.Display):
def refresh(self, items): def refresh(self, items):
if len(items) > 1: if len(items) > 1:
# Get dictionary with meta level attribute # Get dictionary with meta level attribute
sAttr = service.Attribute.getInstance() sAttr = Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel") attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMkt sMkt = self.sMkt
self.metalvls = sMkt.directAttrRequest(items, attrs) self.metalvls = sMkt.directAttrRequest(items, attrs)

View File

@@ -1,8 +1,10 @@
import wx import wx
import service
import gui.globalEvents as GE import gui.globalEvents as GE
import gui.mainFrame import gui.mainFrame
from service.fit import Fit
class NotesView(wx.Panel): class NotesView(wx.Panel):
def __init__(self, parent): def __init__(self, parent):
@@ -19,7 +21,7 @@ class NotesView(wx.Panel):
self.Bind(wx.EVT_TIMER, self.delayedSave, self.saveTimer) self.Bind(wx.EVT_TIMER, self.delayedSave, self.saveTimer)
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -38,7 +40,7 @@ class NotesView(wx.Panel):
self.saveTimer.Start(1000, True) self.saveTimer.Start(1000, True)
def delayedSave(self, event): def delayedSave(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.lastFitId) fit = sFit.getFit(self.lastFitId)
newNotes = self.editNotes.GetValue() newNotes = self.editNotes.GetValue()
fit.notes = newNotes fit.notes = newNotes

View File

@@ -19,11 +19,11 @@
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
from wx.lib.intctrl import IntCtrl from wx.lib.intctrl import IntCtrl
from gui.utils.clipboard import toClipboard, fromClipboard from gui.utils.clipboard import toClipboard, fromClipboard
from service.damagePattern import ImportError from service.damagePattern import ImportError
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
from service.damagePattern import DamagePattern, ImportError
########################################################################### ###########################################################################
## Class DmgPatternEditorDlg ## Class DmgPatternEditorDlg
########################################################################### ###########################################################################
@@ -59,26 +59,26 @@ class DmgPatternEntityEditor(EntityEditor):
self.SetEditorValidator(DmgPatternTextValidor) self.SetEditorValidator(DmgPatternTextValidor)
def getEntitiesFromContext(self): def getEntitiesFromContext(self):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
choices = sorted(sDP.getDamagePatternList(), key=lambda p: p.name) choices = sorted(sDP.getDamagePatternList(), key=lambda p: p.name)
return [c for c in choices if c.name != "Selected Ammo"] return [c for c in choices if c.name != "Selected Ammo"]
def DoNew(self, name): def DoNew(self, name):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
return sDP.newPattern(name) return sDP.newPattern(name)
def DoRename(self, entity, name): def DoRename(self, entity, name):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
sDP.renamePattern(entity, name) sDP.renamePattern(entity, name)
def DoCopy(self, entity, name): def DoCopy(self, entity, name):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
copy = sDP.copyPattern(entity) copy = sDP.copyPattern(entity)
sDP.renamePattern(copy, name) sDP.renamePattern(copy, name)
return copy return copy
def DoDelete(self, entity): def DoDelete(self, entity):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
sDP.deletePattern(entity) sDP.deletePattern(entity)
class DmgPatternEditorDlg(wx.Dialog): class DmgPatternEditorDlg(wx.Dialog):
@@ -208,7 +208,7 @@ class DmgPatternEditorDlg(wx.Dialog):
if event is not None: if event is not None:
event.Skip() event.Skip()
service.DamagePattern.getInstance().saveChanges(p) DamagePattern.getInstance().saveChanges(p)
def restrict(self): def restrict(self):
for type in self.DAMAGE_TYPES: for type in self.DAMAGE_TYPES:
@@ -251,11 +251,11 @@ class DmgPatternEditorDlg(wx.Dialog):
def importPatterns(self, event): def importPatterns(self, event):
text = fromClipboard() text = fromClipboard()
if text: if text:
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
try: try:
sDP.importPatterns(text) sDP.importPatterns(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard") self.stNotice.SetLabel("Patterns successfully imported from clipboard")
except service.damagePattern.ImportError, e: except ImportError, e:
self.stNotice.SetLabel(str(e)) self.stNotice.SetLabel(str(e))
except Exception, e: except Exception, e:
self.stNotice.SetLabel("Could not import from clipboard: unknown errors") self.stNotice.SetLabel("Could not import from clipboard: unknown errors")
@@ -265,6 +265,6 @@ class DmgPatternEditorDlg(wx.Dialog):
self.stNotice.SetLabel("Could not import from clipboard") self.stNotice.SetLabel("Could not import from clipboard")
def exportPatterns(self, event): def exportPatterns(self, event):
sDP = service.DamagePattern.getInstance() sDP = DamagePattern.getInstance()
toClipboard( sDP.exportPatterns() ) toClipboard( sDP.exportPatterns() )
self.stNotice.SetLabel("Patterns exported to clipboard") self.stNotice.SetLabel("Patterns exported to clipboard")

View File

@@ -20,11 +20,11 @@
import wx import wx
import gui.display as d import gui.display as d
import gui.globalEvents as GE import gui.globalEvents as GE
import service
import gui.droneView import gui.droneView
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import eos.types import eos.types
from service.fit import Fit
class DummyItem: class DummyItem:
@@ -91,7 +91,7 @@ class ProjectedView(d.Display):
# if source is coming from projected, we are trying to combine drones. # if source is coming from projected, we are trying to combine drones.
self.mergeDrones(x, y, int(data[1])) self.mergeDrones(x, y, int(data[1]))
elif data[0] == "market": elif data[0] == "market":
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit.project(fitID, int(data[1])) sFit.project(fitID, int(data[1]))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -100,7 +100,7 @@ class ProjectedView(d.Display):
keycode = event.GetKeyCode() keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
row = self.GetFirstSelected() row = self.GetFirstSelected()
if row != -1: if row != -1:
sFit.removeProjected(fitID, self.get(row)) sFit.removeProjected(fitID, self.get(row))
@@ -111,7 +111,7 @@ class ProjectedView(d.Display):
if type == "fit": if type == "fit":
activeFit = self.mainFrame.getActiveFit() activeFit = self.mainFrame.getActiveFit()
if activeFit: if activeFit:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
draggedFit = sFit.getFit(fitID) draggedFit = sFit.getFit(fitID)
sFit.project(activeFit, draggedFit) sFit.project(activeFit, draggedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -135,7 +135,7 @@ class ProjectedView(d.Display):
def _merge(self, src, dst): def _merge(self, src, dst):
dstDrone = self.get(dst) dstDrone = self.get(dst)
if isinstance(dstDrone, eos.types.Drone): if isinstance(dstDrone, eos.types.Drone):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
if sFit.mergeDrones(fitID, self.get(src), dstDrone, True): if sFit.mergeDrones(fitID, self.get(src), dstDrone, True):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -159,7 +159,7 @@ class ProjectedView(d.Display):
return fit.name return fit.name
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -231,7 +231,7 @@ class ProjectedView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col == self.getColIndex(State): if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left") sFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left")
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -246,7 +246,7 @@ class ProjectedView(d.Display):
if sel != -1: if sel != -1:
item = self.get(sel) item = self.get(sel)
if item is None: return if item is None: return
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
if isinstance(item, eos.types.Drone): if isinstance(item, eos.types.Drone):
srcContext = "projectedDrone" srcContext = "projectedDrone"
itemContext = sMkt.getCategoryByItem(item.item).name itemContext = sMkt.getCategoryByItem(item.item).name
@@ -287,6 +287,6 @@ class ProjectedView(d.Display):
col = self.getColumn(event.Position) col = self.getColumn(event.Position)
if col != self.getColIndex(State): if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit() fitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.removeProjected(fitID, self.get(row)) sFit.removeProjected(fitID, self.get(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -13,12 +13,13 @@ from gui.marketBrowser import SearchBox
import gui.display as d import gui.display as d
import gui.globalEvents as GE import gui.globalEvents as GE
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
import csv import csv
import eos.db import eos.db
import logging import logging
from service.market import Market
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class AttributeEditor( wx.Frame ): class AttributeEditor( wx.Frame ):
@@ -108,7 +109,7 @@ class AttributeEditor( wx.Frame ):
self.itemView.updateItems(True) self.itemView.updateItems(True)
def OnExport(self, event): def OnExport(self, event):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
items = sMkt.getItemsWithOverrides() items = sMkt.getItemsWithOverrides()
defaultFile = "pyfa_overrides.csv" defaultFile = "pyfa_overrides.csv"
@@ -131,7 +132,7 @@ class AttributeEditor( wx.Frame ):
"Confirm Delete", wx.YES | wx.NO | wx.ICON_EXCLAMATION) "Confirm Delete", wx.YES | wx.NO | wx.ICON_EXCLAMATION)
if dlg.ShowModal() == wx.ID_YES: if dlg.ShowModal() == wx.ID_YES:
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
items = sMkt.getItemsWithOverrides() items = sMkt.getItemsWithOverrides()
# We can't just delete overrides, as loaded items will still have # We can't just delete overrides, as loaded items will still have
# them assigned. Deleting them from the database won't propagate # them assigned. Deleting them from the database won't propagate
@@ -152,7 +153,7 @@ class ItemView(d.Display):
def __init__(self, parent): def __init__(self, parent):
d.Display.__init__(self, parent) d.Display.__init__(self, parent)
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
self.things = sMkt.getItemsWithOverrides() self.things = sMkt.getItemsWithOverrides()
self.items = self.things self.items = self.things
@@ -173,14 +174,14 @@ class ItemView(d.Display):
self.update(self.items) self.update(self.items)
def updateItems(self, updateDisplay=False): def updateItems(self, updateDisplay=False):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
self.things = sMkt.getItemsWithOverrides() self.things = sMkt.getItemsWithOverrides()
self.items = self.things self.items = self.things
if updateDisplay: if updateDisplay:
self.update(self.things) self.update(self.things)
def scheduleSearch(self, event=None): def scheduleSearch(self, event=None):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
search = self.searchBox.GetLineText(0) search = self.searchBox.GetLineText(0)
# Make sure we do not count wildcard as search symbol # Make sure we do not count wildcard as search symbol

View File

@@ -19,10 +19,10 @@
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import service
from gui.utils.clipboard import toClipboard, fromClipboard from gui.utils.clipboard import toClipboard, fromClipboard
from service.targetResists import ImportError from service.targetResists import ImportError
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
from service.targetResists import TargetResists
class TargetResistsTextValidor(BaseValidator): class TargetResistsTextValidor(BaseValidator):
@@ -56,26 +56,26 @@ class TargetResistsEntityEditor(EntityEditor):
self.SetEditorValidator(TargetResistsTextValidor) self.SetEditorValidator(TargetResistsTextValidor)
def getEntitiesFromContext(self): def getEntitiesFromContext(self):
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
choices = sorted(sTR.getTargetResistsList(), key=lambda p: p.name) choices = sorted(sTR.getTargetResistsList(), key=lambda p: p.name)
return choices return choices
def DoNew(self, name): def DoNew(self, name):
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
return sTR.newPattern(name) return sTR.newPattern(name)
def DoRename(self, entity, name): def DoRename(self, entity, name):
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
sTR.renamePattern(entity, name) sTR.renamePattern(entity, name)
def DoCopy(self, entity, name): def DoCopy(self, entity, name):
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
copy = sTR.copyPattern(entity) copy = sTR.copyPattern(entity)
sTR.renamePattern(copy, name) sTR.renamePattern(copy, name)
return copy return copy
def DoDelete(self, entity): def DoDelete(self, entity):
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
sTR.deletePattern(entity) sTR.deletePattern(entity)
class ResistsEditorDlg(wx.Dialog): class ResistsEditorDlg(wx.Dialog):
@@ -224,7 +224,7 @@ class ResistsEditorDlg(wx.Dialog):
if event is not None: if event is not None:
event.Skip() event.Skip()
service.TargetResists.getInstance().saveChanges(p) TargetResists.getInstance().saveChanges(p)
except ValueError: except ValueError:
editObj.SetForegroundColour(wx.RED) editObj.SetForegroundColour(wx.RED)
@@ -264,7 +264,7 @@ class ResistsEditorDlg(wx.Dialog):
text = fromClipboard() text = fromClipboard()
if text: if text:
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
try: try:
sTR.importPatterns(text) sTR.importPatterns(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard") self.stNotice.SetLabel("Patterns successfully imported from clipboard")
@@ -279,6 +279,6 @@ class ResistsEditorDlg(wx.Dialog):
def exportPatterns(self, event): def exportPatterns(self, event):
"Event fired when export to clipboard button is clicked" "Event fired when export to clipboard button is clicked"
sTR = service.TargetResists.getInstance() sTR = TargetResists.getInstance()
toClipboard( sTR.exportPatterns() ) toClipboard( sTR.exportPatterns() )
self.stNotice.SetLabel("Patterns exported to clipboard") self.stNotice.SetLabel("Patterns exported to clipboard")

View File

@@ -20,11 +20,11 @@
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
from gui.builtinViews.implantEditor import BaseImplantEditorView from gui.builtinViews.implantEditor import BaseImplantEditorView
import service
from gui.utils.clipboard import toClipboard, fromClipboard from gui.utils.clipboard import toClipboard, fromClipboard
from service.implantSet import ImportError from service.implantSet import ImportError
import logging import logging
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
from service.implantSet import ImplantSets
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -59,25 +59,25 @@ class ImplantSetEntityEditor(EntityEditor):
self.SetEditorValidator(ImplantTextValidor) self.SetEditorValidator(ImplantTextValidor)
def getEntitiesFromContext(self): def getEntitiesFromContext(self):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
return sorted(sIS.getImplantSetList(), key=lambda c: c.name) return sorted(sIS.getImplantSetList(), key=lambda c: c.name)
def DoNew(self, name): def DoNew(self, name):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
return sIS.newSet(name) return sIS.newSet(name)
def DoRename(self, entity, name): def DoRename(self, entity, name):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
sIS.renameSet(entity, name) sIS.renameSet(entity, name)
def DoCopy(self, entity, name): def DoCopy(self, entity, name):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
copy = sIS.copySet(entity) copy = sIS.copySet(entity)
sIS.renameSet(copy, name) sIS.renameSet(copy, name)
return copy return copy
def DoDelete(self, entity): def DoDelete(self, entity):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
sIS.deleteSet(entity) sIS.deleteSet(entity)
@@ -91,20 +91,20 @@ class ImplantSetEditor(BaseImplantEditorView):
self.Parent.entityEditor.Bind(wx.EVT_CHOICE, self.contextChanged) self.Parent.entityEditor.Bind(wx.EVT_CHOICE, self.contextChanged)
def getImplantsFromContext(self): def getImplantsFromContext(self):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity() set = self.Parent.entityEditor.getActiveEntity()
if set: if set:
return sIS.getImplants(set.ID) return sIS.getImplants(set.ID)
return [] return []
def addImplantToContext(self, item): def addImplantToContext(self, item):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity() set = self.Parent.entityEditor.getActiveEntity()
sIS.addImplant(set.ID, item.ID) sIS.addImplant(set.ID, item.ID)
def removeImplantFromContext(self, implant): def removeImplantFromContext(self, implant):
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity() set = self.Parent.entityEditor.getActiveEntity()
sIS.removeImplant(set.ID, implant) sIS.removeImplant(set.ID, implant)
@@ -191,7 +191,7 @@ class ImplantSetEditorDlg(wx.Dialog):
text = fromClipboard() text = fromClipboard()
if text: if text:
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
try: try:
sIS.importSets(text) sIS.importSets(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard") self.stNotice.SetLabel("Patterns successfully imported from clipboard")
@@ -209,6 +209,6 @@ class ImplantSetEditorDlg(wx.Dialog):
def exportPatterns(self, event): def exportPatterns(self, event):
"Event fired when export to clipboard button is clicked" "Event fired when export to clipboard button is clicked"
sIS = service.ImplantSets.getInstance() sIS = ImplantSets.getInstance()
toClipboard(sIS.exportSets()) toClipboard(sIS.exportSets())
self.stNotice.SetLabel("Sets exported to clipboard") self.stNotice.SetLabel("Sets exported to clipboard")

View File

@@ -19,7 +19,8 @@ import gui.sfBrowserItem as SFItem
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.utils.fonts as fonts import gui.utils.fonts as fonts
import service from service.fit import Fit
from service.market import Market
import gui.utils.fonts as fonts import gui.utils.fonts as fonts
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
@@ -437,7 +438,7 @@ class NavigationPanel(SFItem.SFBrowserItem):
if stage == 3: if stage == 3:
shipID = self.Parent.GetStageData(stage) shipID = self.Parent.GetStageData(stage)
shipName = self.Parent.GetStage3ShipName() shipName = self.Parent.GetStage3ShipName()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = sFit.newFit(shipID, "%s fit" %shipName) fitID = sFit.newFit(shipID, "%s fit" %shipName)
self.shipBrowser.fitIDMustEditName = fitID self.shipBrowser.fitIDMustEditName = fitID
wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID))
@@ -671,8 +672,8 @@ class ShipBrowser(wx.Panel):
self.navpanel.ShowNewFitButton(False) self.navpanel.ShowNewFitButton(False)
self.navpanel.ShowSwitchEmptyGroupsButton(False) self.navpanel.ShowSwitchEmptyGroupsButton(False)
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.lpane.ShowLoading(False) self.lpane.ShowLoading(False)
self.lpane.Freeze() self.lpane.Freeze()
@@ -718,7 +719,7 @@ class ShipBrowser(wx.Panel):
categoryID = self._stage2Data categoryID = self._stage2Data
ships = list(data[1]) ships = list(data[1])
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
ships.sort(key=self.raceNameKey) ships.sort(key=self.raceNameKey)
racesList = [] racesList = []
@@ -789,7 +790,7 @@ class ShipBrowser(wx.Panel):
self.lpane.RemoveAllChildren() self.lpane.RemoveAllChildren()
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sMkt.getShipListDelayed(categoryID, self.stage2Callback) sMkt.getShipListDelayed(categoryID, self.stage2Callback)
self._stage2Data = categoryID self._stage2Data = categoryID
@@ -819,8 +820,8 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage self._lastStage = self._activeStage
self._activeStage = 3 self._activeStage = 3
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
ship = sMkt.getItem(shipID) ship = sMkt.getItem(shipID)
categoryID = ship.group.ID categoryID = ship.group.ID
@@ -875,8 +876,8 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage self._lastStage = self._activeStage
self._activeStage = 4 self._activeStage = 4
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
query = event.text query = event.text
self.lpane.Freeze() self.lpane.Freeze()
@@ -1162,7 +1163,7 @@ class ShipItem(SFItem.SFBrowserItem):
self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup) self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)
self.marketInstance = service.Market.getInstance() self.marketInstance = Market.getInstance()
self.baseItem = self.marketInstance.getItem(self.shipID) self.baseItem = self.marketInstance.getItem(self.shipID)
#=======================================================================\ #=======================================================================\
@@ -1249,7 +1250,7 @@ class ShipItem(SFItem.SFBrowserItem):
def createNewFit(self, event=None): def createNewFit(self, event=None):
self.tcFitName.Show(False) self.tcFitName.Show(False)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = sFit.newFit(self.shipID, self.tcFitName.GetValue()) fitID = sFit.newFit(self.shipID, self.tcFitName.GetValue())
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=False)) wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=False))
@@ -1538,7 +1539,7 @@ class FitItem(SFItem.SFBrowserItem):
self.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu) self.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu)
def OnToggleBooster(self, event): def OnToggleBooster(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
sFit.toggleBoostFit(self.fitID) sFit.toggleBoostFit(self.fitID)
self.fitBooster = not self.fitBooster self.fitBooster = not self.fitBooster
self.boosterBtn.Show(self.fitBooster) self.boosterBtn.Show(self.fitBooster)
@@ -1549,7 +1550,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnProjectToFit(self, event): def OnProjectToFit(self, event):
activeFit = self.mainFrame.getActiveFit() activeFit = self.mainFrame.getActiveFit()
if activeFit: if activeFit:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
projectedFit = sFit.getFit(self.fitID) projectedFit = sFit.getFit(self.fitID)
sFit.project(activeFit, projectedFit) sFit.project(activeFit, projectedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -1558,7 +1559,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnAddCommandFit(self, event): def OnAddCommandFit(self, event):
activeFit = self.mainFrame.getActiveFit() activeFit = self.mainFrame.getActiveFit()
if activeFit: if activeFit:
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
commandFit = sFit.getFit(self.fitID) commandFit = sFit.getFit(self.fitID)
sFit.addCommandFit(activeFit, commandFit) sFit.addCommandFit(activeFit, commandFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -1576,7 +1577,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnContextMenu(self, event): def OnContextMenu(self, event):
''' Handles context menu for fit. Dragging is handled by MouseLeftUp() ''' ''' Handles context menu for fit. Dragging is handled by MouseLeftUp() '''
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit()) fit = sFit.getFit(self.mainFrame.getActiveFit())
if not fit: if not fit:
@@ -1666,7 +1667,7 @@ class FitItem(SFItem.SFBrowserItem):
self.copyFit() self.copyFit()
def copyFit(self, event=None): def copyFit(self, event=None):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fitID = sFit.copyFit(self.fitID) fitID = sFit.copyFit(self.fitID)
self.shipBrowser.fitIDMustEditName = fitID self.shipBrowser.fitIDMustEditName = fitID
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID))
@@ -1686,7 +1687,7 @@ class FitItem(SFItem.SFBrowserItem):
self.Refresh() self.Refresh()
def renameFit(self, event=None): def renameFit(self, event=None):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
self.tcFitName.Show(False) self.tcFitName.Show(False)
self.editWasShown = 0 self.editWasShown = 0
fitName = self.tcFitName.GetValue() fitName = self.tcFitName.GetValue()
@@ -1720,7 +1721,7 @@ class FitItem(SFItem.SFBrowserItem):
else: else:
self.deleted = True self.deleted = True
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(self.fitID) fit = sFit.getFit(self.fitID)
sFit.deleteFit(self.fitID) sFit.deleteFit(self.fitID)

View File

@@ -19,7 +19,7 @@
import wx import wx
from gui.statsView import StatsView from gui.statsView import StatsView
import service from service.fit import Fit
from gui.pyfatogglepanel import TogglePanel from gui.pyfatogglepanel import TogglePanel
import gui.builtinStatsViews import gui.builtinStatsViews
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
@@ -33,7 +33,7 @@ class StatsPane(wx.Panel):
"priceViewFull",] "priceViewFull",]
def fitChanged(self, event): def fitChanged(self, event):
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID) fit = sFit.getFit(event.fitID)
for view in self.views: for view in self.views:
view.refreshPanel(fit) view.refreshPanel(fit)

View File

@@ -20,7 +20,6 @@
import wx import wx
from gui.bitmapLoader import BitmapLoader from gui.bitmapLoader import BitmapLoader
import config import config
import service
import dateutil.parser import dateutil.parser
class UpdateDialog(wx.Dialog): class UpdateDialog(wx.Dialog):

View File

@@ -1,7 +1,9 @@
import threading import threading
import time import time
import service
import wx import wx
from service.settings import HTMLExportSettings
from service.fit import Fit
from service.market import Market
class exportHtml(): class exportHtml():
_instance = None _instance = None
@@ -16,7 +18,7 @@ class exportHtml():
self.thread = exportHtmlThread() self.thread = exportHtmlThread()
def refreshFittingHtml(self, force=False, callback=False): def refreshFittingHtml(self, force=False, callback=False):
settings = service.settings.HTMLExportSettings.getInstance() settings = HTMLExportSettings.getInstance()
if force or settings.getEnabled(): if force or settings.getEnabled():
self.thread.stop() self.thread.stop()
@@ -39,9 +41,9 @@ class exportHtmlThread(threading.Thread):
if self.stopRunning: if self.stopRunning:
return return
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
settings = service.settings.HTMLExportSettings.getInstance() settings = HTMLExportSettings.getInstance()
timestamp = time.localtime(time.time()) timestamp = time.localtime(time.time())
localDate = "%d/%02d/%02d %02d:%02d" % (timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4]) localDate = "%d/%02d/%02d %02d:%02d" % (timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4])

View File

@@ -1,19 +0,0 @@
from service.market import Market
from service.fit import Fit
from service.attribute import Attribute
from service.character import Character
from service.damagePattern import DamagePattern
from service.targetResists import TargetResists
from service.settings import SettingsProvider
from service.fleet import Fleet
from service.update import Update
from service.price import Price
from service.network import Network
from service.eveapi import EVEAPIConnection, ParseXML
from service.implantSet import ImplantSets
import wx
if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)):
from service.pycrest import EVE
from service.server import StoppableHTTPServer, AuthHandler
from service.crest import Crest

View File

@@ -20,6 +20,7 @@
import copy import copy
import itertools import itertools
import json import json
import logging
import threading import threading
from codecs import open from codecs import open
from xml.etree import ElementTree from xml.etree import ElementTree
@@ -28,11 +29,10 @@ import gzip
import wx import wx
import config
import eos.db import eos.db
import eos.types import eos.types
import service from service.eveapi import EVEAPIConnection, ParseXML
import config
import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -49,7 +49,7 @@ class CharacterImportThread(threading.Thread):
try: try:
# we try to parse api XML data first # we try to parse api XML data first
with open(path, mode='r') as charFile: with open(path, mode='r') as charFile:
sheet = service.ParseXML(charFile) sheet = ParseXML(charFile)
char = sCharacter.new(sheet.name+" (imported)") char = sCharacter.new(sheet.name+" (imported)")
sCharacter.apiUpdateCharSheet(char.ID, sheet.skills) sCharacter.apiUpdateCharSheet(char.ID, sheet.skills)
except: except:
@@ -87,8 +87,6 @@ class SkillBackupThread(threading.Thread):
def run(self): def run(self):
path = self.path path = self.path
sCharacter = Character.getInstance() sCharacter = Character.getInstance()
sFit = service.Fit.getInstance()
fit = sFit.getFit(self.activeFit)
backupData = "" backupData = ""
if self.saveFmt == "xml" or self.saveFmt == "emp": if self.saveFmt == "xml" or self.saveFmt == "emp":
backupData = sCharacter.exportXml() backupData = sCharacter.exportXml()
@@ -284,7 +282,7 @@ class Character(object):
char.apiID = userID char.apiID = userID
char.apiKey = apiKey char.apiKey = apiKey
api = service.EVEAPIConnection() api = EVEAPIConnection()
auth = api.auth(keyID=userID, vCode=apiKey) auth = api.auth(keyID=userID, vCode=apiKey)
apiResult = auth.account.Characters() apiResult = auth.account.Characters()
charList = map(lambda c: unicode(c.name), apiResult.characters) charList = map(lambda c: unicode(c.name), apiResult.characters)
@@ -296,7 +294,7 @@ class Character(object):
dbChar = eos.db.getCharacter(charID) dbChar = eos.db.getCharacter(charID)
dbChar.defaultChar = charName dbChar.defaultChar = charName
api = service.EVEAPIConnection() api = EVEAPIConnection()
auth = api.auth(keyID=dbChar.apiID, vCode=dbChar.apiKey) auth = api.auth(keyID=dbChar.apiID, vCode=dbChar.apiKey)
apiResult = auth.account.Characters() apiResult = auth.account.Characters()
charID = None charID = None

View File

@@ -8,6 +8,7 @@ elsewhere (in which case can be accessed with packs[name])
""" """
import pkgutil import pkgutil
import importlib
# init parent dict # init parent dict
all = {} all = {}
@@ -15,10 +16,9 @@ all = {}
# init container to store the separate conversion packs in case we need them # init container to store the separate conversion packs in case we need them
packs = {} packs = {}
prefix = __name__ + "." prefix = __name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix): for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix):
conversionPack = __import__(modname, fromlist="dummy") conversionPack = importlib.import_module(modname)
all.update(conversionPack.CONVERSIONS) all.update(conversionPack.CONVERSIONS)
modname_tail = modname.rsplit('.', 1)[-1] modname_tail = modname.rsplit('.', 1)[-1]
packs[modname_tail] = conversionPack.CONVERSIONS packs[modname_tail] = conversionPack.CONVERSIONS

View File

@@ -9,10 +9,10 @@ import time
import eos.db import eos.db
from eos.enum import Enum from eos.enum import Enum
from eos.types import CrestChar from eos.types import CrestChar
import service
import gui.globalEvents as GE import gui.globalEvents as GE
from service.settings import CRESTSettings
from service.server import StoppableHTTPServer, AuthHandler
from service.pycrest.eve import EVE
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -64,7 +64,7 @@ class Crest():
characters still in the cache (if USER mode) characters still in the cache (if USER mode)
""" """
self.settings = service.settings.CRESTSettings.getInstance() self.settings = CRESTSettings.getInstance()
self.scopes = ['characterFittingsRead', 'characterFittingsWrite'] self.scopes = ['characterFittingsRead', 'characterFittingsWrite']
# these will be set when needed # these will be set when needed
@@ -73,7 +73,7 @@ class Crest():
self.ssoTimer = None self.ssoTimer = None
# Base EVE connection that is copied to all characters # Base EVE connection that is copied to all characters
self.eve = service.pycrest.EVE( self.eve = EVE(
client_id=self.settings.get('clientID') if self.settings.get('mode') == CrestModes.USER else self.clientIDs.get(self.settings.get('server')), client_id=self.settings.get('clientID') if self.settings.get('mode') == CrestModes.USER else self.clientIDs.get(self.settings.get('server')),
api_key=self.settings.get('clientSecret') if self.settings.get('mode') == CrestModes.USER else None, api_key=self.settings.get('clientSecret') if self.settings.get('mode') == CrestModes.USER else None,
redirect_uri=self.clientCallback, redirect_uri=self.clientCallback,
@@ -161,7 +161,7 @@ class Crest():
if self.httpd: if self.httpd:
self.stopServer() self.stopServer()
time.sleep(1) # we need this to ensure that the previous get_request finishes, and then the socket will close time.sleep(1) # we need this to ensure that the previous get_request finishes, and then the socket will close
self.httpd = service.StoppableHTTPServer(('', 6461), service.AuthHandler) self.httpd = StoppableHTTPServer(('', 6461), AuthHandler)
thread.start_new_thread(self.httpd.serve, (self.handleLogin,)) thread.start_new_thread(self.httpd.serve, (self.handleLogin,))
self.state = str(uuid.uuid4()) self.state = str(uuid.uuid4())

View File

@@ -17,15 +17,14 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
import eos.db
import eos.types
import copy import copy
from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues import eos.db
import eos.types
class ImportError(Exception): class ImportError(Exception):
pass pass
class DamagePattern(): class DamagePattern():
instance = None instance = None
@classmethod @classmethod

View File

@@ -166,7 +166,7 @@ from xml.parsers import expat
from time import strptime from time import strptime
from calendar import timegm from calendar import timegm
import service from service.network import Network
proxy = None proxy = None
proxySSL = False proxySSL = False
@@ -395,7 +395,7 @@ class _RootContext(_Context):
response = None response = None
if response is None: if response is None:
network = service.Network.getInstance() network = Network.getInstance()
req = self._scheme+'://'+self._host+path req = self._scheme+'://'+self._host+path
@@ -414,7 +414,7 @@ class _RootContext(_Context):
# implementor is handling fallbacks... # implementor is handling fallbacks...
try: try:
return _ParseXML(response, True, store and (lambda obj: cache.store(self._host, path, kw, response, obj))) return _ParseXML(response, True, store and (lambda obj: cache.store(self._host, path, kw, response, obj)))
except Error, e: except Error as e:
response = retrieve_fallback(self._host, path, kw, reason=e) response = retrieve_fallback(self._host, path, kw, reason=e)
if response is not None: if response is not None:
return response return response

View File

@@ -27,16 +27,18 @@ from codecs import open
import xml.parsers.expat import xml.parsers.expat
import eos.db import eos.db
import eos.types from eos.types import State, Slot, Module, Drone, Fighter
from eos.types import Fit as FitType
from eos.types import State, Slot
from service.market import Market from service.market import Market
from service.damagePattern import DamagePattern from service.damagePattern import DamagePattern
from service.character import Character from service.character import Character
from eos.saveddata.character import Character as saveddata_Character
from service.fleet import Fleet from service.fleet import Fleet
from service.settings import SettingsProvider from service.settings import SettingsProvider
from service.port import Port
# TODO: port this to port.py
#from service.port import Port
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -90,7 +92,7 @@ class Fit(object):
def __init__(self): def __init__(self):
self.pattern = DamagePattern.getInstance().getDamagePattern("Uniform") self.pattern = DamagePattern.getInstance().getDamagePattern("Uniform")
self.targetResists = None self.targetResists = None
self.character = Character.getInstance().all5() self.character = saveddata_Character.getAll5()
self.booster = False self.booster = False
self.dirtyFitIDs = set() self.dirtyFitIDs = set()
@@ -107,7 +109,7 @@ class Fit(object):
"showMarketShortcuts": False, "showMarketShortcuts": False,
"enableGaugeAnimation": True, "enableGaugeAnimation": True,
"exportCharges": True, "exportCharges": True,
"openFitInNew":False "openFitInNew": False
} }
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings( self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(
@@ -164,7 +166,7 @@ class Fit(object):
ship = eos.types.Ship(eos.db.getItem(shipID)) ship = eos.types.Ship(eos.db.getItem(shipID))
except ValueError: except ValueError:
ship = eos.types.Citadel(eos.db.getItem(shipID)) ship = eos.types.Citadel(eos.db.getItem(shipID))
fit = eos.types.Fit(ship) fit = FitType(ship)
fit.name = name if name is not None else "New %s" % fit.ship.item.name fit.name = name if name is not None else "New %s" % fit.ship.item.name
fit.damagePattern = self.pattern fit.damagePattern = self.pattern
fit.targetResists = self.targetResists fit.targetResists = self.targetResists
@@ -343,7 +345,7 @@ class Fit(object):
thing = eos.db.getItem(thing, thing = eos.db.getItem(thing,
eager=("attributes", "group.category")) eager=("attributes", "group.category"))
if isinstance(thing, eos.types.Fit): if isinstance(thing, FitType):
if thing in fit.projectedFits: if thing in fit.projectedFits:
return return
@@ -414,7 +416,7 @@ class Fit(object):
thing.state = self.__getProposedState(thing, click) thing.state = self.__getProposedState(thing, click)
if not thing.canHaveState(thing.state, fit): if not thing.canHaveState(thing.state, fit):
thing.state = State.OFFLINE thing.state = State.OFFLINE
elif isinstance(thing, eos.types.Fit): elif isinstance(thing, FitType):
projectionInfo = thing.getProjectionInfo(fitID) projectionInfo = thing.getProjectionInfo(fitID)
if projectionInfo: if projectionInfo:
projectionInfo.active = not projectionInfo.active projectionInfo.active = not projectionInfo.active
@@ -559,7 +561,7 @@ class Fit(object):
# Gather modules and convert Cargo item to Module, silently return if not a module # Gather modules and convert Cargo item to Module, silently return if not a module
try: try:
cargoP = eos.types.Module(cargo.item) cargoP = Module(cargo.item)
cargoP.owner = fit cargoP.owner = fit
if cargoP.isValidState(State.ACTIVE): if cargoP.isValidState(State.ACTIVE):
cargoP.state = State.ACTIVE cargoP.state = State.ACTIVE
@@ -692,10 +694,10 @@ class Fit(object):
break break
''' '''
if fighter is None: if fighter is None:
fighter = eos.types.Fighter(item) fighter = Fighter(item)
used = fit.getSlotsUsed(fighter.slot) used = fit.getSlotsUsed(fighter.slot)
total = fit.getNumSlots(fighter.slot) total = fit.getNumSlots(fighter.slot)
standardAttackActive = False; standardAttackActive = False
for ability in fighter.abilities: for ability in fighter.abilities:
if (ability.effect.isImplemented and ability.effect.handlerName == u'fighterabilityattackm'): if (ability.effect.isImplemented and ability.effect.handlerName == u'fighterabilityattackm'):
# Activate "standard attack" if available # Activate "standard attack" if available
@@ -704,7 +706,7 @@ class Fit(object):
else: else:
# Activate all other abilities (Neut, Web, etc) except propmods if no standard attack is active # Activate all other abilities (Neut, Web, etc) except propmods if no standard attack is active
if (ability.effect.isImplemented if (ability.effect.isImplemented
and standardAttackActive == False and standardAttackActive is False
and ability.effect.handlerName != u'fighterabilitymicrowarpdrive' and ability.effect.handlerName != u'fighterabilitymicrowarpdrive'
and ability.effect.handlerName != u'fighterabilityevasivemaneuvers'): and ability.effect.handlerName != u'fighterabilityevasivemaneuvers'):
ability.active = True ability.active = True
@@ -783,7 +785,7 @@ class Fit(object):
d.amount = amount d.amount = amount
d.amountActive = amount if active else 0 d.amountActive = amount if active else 0
newD = eos.types.Drone(d.item) newD = Drone(d.item)
newD.amount = total - amount newD.amount = total - amount
newD.amountActive = newD.amount if active else 0 newD.amountActive = newD.amount if active else 0
l.append(newD) l.append(newD)
@@ -958,6 +960,8 @@ class Fit(object):
fit.damagePattern = dp fit.damagePattern = dp
self.recalc(fit) self.recalc(fit)
# TODO: port this to port.py
'''
def exportFit(self, fitID): def exportFit(self, fitID):
fit = eos.db.getFit(fitID) fit = eos.db.getFit(fitID)
return Port.exportEft(fit) return Port.exportEft(fit)
@@ -981,6 +985,7 @@ class Fit(object):
def exportMultiBuy(self, fitID): def exportMultiBuy(self, fitID):
fit = eos.db.getFit(fitID) fit = eos.db.getFit(fitID)
return Port.exportMultiBuy(fit) return Port.exportMultiBuy(fit)
'''
def backupFits(self, path, callback): def backupFits(self, path, callback):
thread = FitBackupThread(path, callback) thread = FitBackupThread(path, callback)
@@ -1056,14 +1061,17 @@ class Fit(object):
if codec_found is None: if codec_found is None:
return False, "Proper codec could not be established for %s" % path return False, "Proper codec could not be established for %s" % path
# TODO: port this to port.py
'''
try: try:
_, fitsImport = Port.importAuto(srcString, path, callback=callback, encoding=codec_found) _, fitsImport = Port.importAuto(srcString, path, callback=callback, encoding=codec_found)
fits += fitsImport fits += fitsImport
except xml.parsers.expat.ExpatError, e: except xml.parsers.expat.ExpatError:
return False, "Malformed XML in %s" % path return False, "Malformed XML in %s" % path
except Exception, e: except Exception:
logger.exception("Unknown exception processing: %s", path) logger.exception("Unknown exception processing: %s", path)
return False, "Unknown Error while processing %s" % path return False, "Unknown Error while processing %s" % path
'''
IDs = [] IDs = []
numFits = len(fits) numFits = len(fits)
@@ -1083,6 +1091,8 @@ class Fit(object):
return True, fits return True, fits
# TODO: port this to port.py
'''
def importFitFromBuffer(self, bufferStr, activeFit=None): def importFitFromBuffer(self, bufferStr, activeFit=None):
_, fits = Port.importAuto(bufferStr, activeFit=activeFit) _, fits = Port.importAuto(bufferStr, activeFit=activeFit)
for fit in fits: for fit in fits:
@@ -1091,6 +1101,7 @@ class Fit(object):
fit.targetResists = self.targetResists fit.targetResists = self.targetResists
eos.db.save(fit) eos.db.save(fit)
return fits return fits
'''
def checkStates(self, fit, base): def checkStates(self, fit, base):
changed = False changed = False

View File

@@ -17,9 +17,11 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
import eos.db
from eos.types import Fleet as Fleet_, Wing, Squad
import copy import copy
import eos.db
from eos.saveddata.fleet import Fleet as Fleet_
from eos.saveddata.fleet import Fleet as Wing
from eos.saveddata.fleet import Fleet as Squad
class Fleet(object): class Fleet(object):
instance = None instance = None

View File

@@ -17,10 +17,11 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
import copy
import eos.db import eos.db
import eos.types import eos.types
import copy from service.market import Market
import service.market
class ImportError(Exception): class ImportError(Exception):
pass pass
@@ -75,9 +76,9 @@ class ImplantSets():
def saveChanges(self, s): def saveChanges(self, s):
eos.db.save(s) eos.db.save(s)
def importSets(self, text): def importSets(self, text):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
lines = text.splitlines() lines = text.splitlines()
newSets = [] newSets = []
errors = 0 errors = 0
@@ -117,9 +118,8 @@ class ImplantSets():
raise ImportError("No patterns found for import") raise ImportError("No patterns found for import")
if errors > 0: if errors > 0:
raise ImportError("%d sets imported from clipboard; %d errors"%(lenImports, errors)) raise ImportError("%d sets imported from clipboard; %d errors"%(lenImports, errors))
def exportSets(self): def exportSets(self):
patterns = self.getImplantSetList() patterns = self.getImplantSetList()
patterns.sort(key=lambda p: p.name) patterns.sort(key=lambda p: p.name)
return eos.types.ImplantSet.exportSets(*patterns) return eos.types.ImplantSet.exportSets(*patterns)

View File

@@ -19,18 +19,18 @@
import re import re
import threading import threading
import wx import logging
import Queue import Queue
import wx
from sqlalchemy.sql import or_
import config import config
import eos.db import eos.db
import eos.types import eos.types
from sqlalchemy.sql import and_, or_ from service import conversions
from service.settings import SettingsProvider, NetworkSettings from service.settings import SettingsProvider
import service from service.price import Price
import service.conversions as conversions
import logging
try: try:
from collections import OrderedDict from collections import OrderedDict
@@ -86,7 +86,7 @@ class PriceWorkerThread(threading.Thread):
# Grab prices, this is the time-consuming part # Grab prices, this is the time-consuming part
if len(requests) > 0: if len(requests) > 0:
service.Price.fetchPrices(requests) Price.fetchPrices(requests)
wx.CallAfter(callback) wx.CallAfter(callback)
queue.task_done() queue.task_done()
@@ -766,7 +766,7 @@ class Market():
def cb(): def cb():
try: try:
callback(requests) callback(requests)
except Exception, e: except Exception:
pass pass
eos.db.commit() eos.db.commit()

View File

@@ -17,12 +17,14 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
from service.settings import NetworkSettings
import urllib2 import urllib2
import urllib import urllib
import config
import socket import socket
import config
from service.settings import NetworkSettings
# network timeout, otherwise pyfa hangs for a long while if no internet connection # network timeout, otherwise pyfa hangs for a long while if no internet connection
timeout = 3 timeout = 3
socket.setdefaulttimeout(timeout) socket.setdefaulttimeout(timeout)
@@ -35,14 +37,13 @@ class RequestError(StandardError):
pass pass
class AuthenticationError(StandardError): class AuthenticationError(StandardError):
pass pass
class ServerError(StandardError): class ServerError(StandardError):
pass pass
class TimeoutError(StandardError): class TimeoutError(StandardError):
pass pass
class Network(): class Network():
# Request constants - every request must supply this, as it is checked if # Request constants - every request must supply this, as it is checked if
@@ -55,7 +56,7 @@ class Network():
_instance = None _instance = None
@classmethod @classmethod
def getInstance(cls): def getInstance(cls):
if cls._instance == None: if cls._instance is None:
cls._instance = Network() cls._instance = Network()
return cls._instance return cls._instance
@@ -101,14 +102,14 @@ class Network():
request = urllib2.Request(url, headers=headers, data=urllib.urlencode(data) if data else None) request = urllib2.Request(url, headers=headers, data=urllib.urlencode(data) if data else None)
try: try:
return urllib2.urlopen(request) return urllib2.urlopen(request)
except urllib2.HTTPError, error: except urllib2.HTTPError as error:
if error.code == 404: if error.code == 404:
raise RequestError() raise RequestError()
elif error.code == 403: elif error.code == 403:
raise AuthenticationError() raise AuthenticationError()
elif error.code >= 500: elif error.code >= 500:
raise ServerError() raise ServerError()
except urllib2.URLError, error: except urllib2.URLError as error:
if "timed out" in error.reason: if "timed out" in error.reason:
raise TimeoutError() raise TimeoutError()
else: else:

View File

@@ -20,15 +20,30 @@
import re import re
import os import os
import xml.dom import xml.dom
from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Booster, Citadel
import service
import wx
import logging import logging
import config
import collections import collections
import json import json
import wx
from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Booster, Citadel
from service.crest import Crest
from service.market import Market
import wx
from eos.types import State, Slot, Module, Cargo, Ship, Drone, Implant, Booster, Citadel
from service.crest import Crest
from service.market import Market
from service.fit import Fit
import wx
from eos.types import State, Slot, Module, Cargo, Ship, Drone, Implant, Booster, Citadel
from service.crest import Crest
from service.market import Market
from service.fit import Fit
logger = logging.getLogger("pyfa.service.port") logger = logging.getLogger("pyfa.service.port")
try: try:
@@ -57,8 +72,8 @@ class Port(object):
nested_dict = lambda: collections.defaultdict(nested_dict) nested_dict = lambda: collections.defaultdict(nested_dict)
fit = nested_dict() fit = nested_dict()
sCrest = service.Crest.getInstance() sCrest = Crest.getInstance()
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
eve = sCrest.eve eve = sCrest.eve
@@ -69,7 +84,7 @@ class Port(object):
fit['ship']['id'] = ofit.ship.item.ID fit['ship']['id'] = ofit.ship.item.ID
fit['ship']['name'] = '' fit['ship']['name'] = ''
fit['description'] = "<pyfa:%d />"%ofit.ID fit['description'] = "<pyfa:%d />" % ofit.ID
fit['items'] = [] fit['items'] = []
slotNum = {} slotNum = {}
@@ -86,7 +101,7 @@ class Port(object):
slot = int(module.getModifiedItemAttr("subSystemSlot")) slot = int(module.getModifiedItemAttr("subSystemSlot"))
item['flag'] = slot item['flag'] = slot
else: else:
if not slot in slotNum: if slot not in slotNum:
slotNum[slot] = INV_FLAGS[slot] slotNum[slot] = INV_FLAGS[slot]
item['flag'] = slotNum[slot] item['flag'] = slotNum[slot]
@@ -99,7 +114,7 @@ class Port(object):
fit['items'].append(item) fit['items'].append(item)
if module.charge and sFit.serviceFittingOptions["exportCharges"]: if module.charge and sFit.serviceFittingOptions["exportCharges"]:
if not module.chargeID in charges: if module.chargeID not in charges:
charges[module.chargeID] = 0 charges[module.chargeID] = 0
# `or 1` because some charges (ie scripts) are without qty # `or 1` because some charges (ie scripts) are without qty
charges[module.chargeID] += module.numCharges or 1 charges[module.chargeID] += module.numCharges or 1
@@ -168,7 +183,7 @@ class Port(object):
@staticmethod @staticmethod
def importCrest(str): def importCrest(str):
fit = json.loads(str) fit = json.loads(str)
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
f = Fit() f = Fit()
f.name = fit['name'] f.name = fit['name']
@@ -216,7 +231,7 @@ class Port(object):
continue continue
# Recalc to get slot numbers correct for T3 cruisers # Recalc to get slot numbers correct for T3 cruisers
service.Fit.getInstance().recalc(f) Fit.getInstance().recalc(f)
for module in moduleList: for module in moduleList:
if module.fits(f): if module.fits(f):
@@ -226,7 +241,7 @@ class Port(object):
@staticmethod @staticmethod
def importDna(string): def importDna(string):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
ids = map(int, re.findall(r'\d+', string)) ids = map(int, re.findall(r'\d+', string))
for id in ids: for id in ids:
@@ -291,7 +306,7 @@ class Port(object):
moduleList.append(m) moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers # Recalc to get slot numbers correct for T3 cruisers
service.Fit.getInstance().recalc(f) Fit.getInstance().recalc(f)
for module in moduleList: for module in moduleList:
if module.fits(f): if module.fits(f):
@@ -304,7 +319,7 @@ class Port(object):
@staticmethod @staticmethod
def importEft(eftString): def importEft(eftString):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
offineSuffix = " /OFFLINE" offineSuffix = " /OFFLINE"
fit = Fit() fit = Fit()
@@ -371,12 +386,12 @@ class Port(object):
if item.category.name == "Drone": if item.category.name == "Drone":
extraAmount = int(extraAmount) if extraAmount is not None else 1 extraAmount = int(extraAmount) if extraAmount is not None else 1
if not modName in droneMap: if modName not in droneMap:
droneMap[modName] = 0 droneMap[modName] = 0
droneMap[modName] += extraAmount droneMap[modName] += extraAmount
if len(modExtra) == 2 and item.category.name != "Drone": if len(modExtra) == 2 and item.category.name != "Drone":
extraAmount = int(extraAmount) if extraAmount is not None else 1 extraAmount = int(extraAmount) if extraAmount is not None else 1
if not modName in cargoMap: if modName not in cargoMap:
cargoMap[modName] = 0 cargoMap[modName] = 0
cargoMap[modName] += extraAmount cargoMap[modName] += extraAmount
elif item.category.name == "Implant": elif item.category.name == "Implant":
@@ -415,13 +430,13 @@ class Port(object):
moduleList.append(m) moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers # Recalc to get slot numbers correct for T3 cruisers
service.Fit.getInstance().recalc(fit) Fit.getInstance().recalc(fit)
for m in moduleList: for m in moduleList:
if m.fits(fit): if m.fits(fit):
m.owner = fit m.owner = fit
if not m.isValidState(m.state): if not m.isValidState(m.state):
print "Error: Module", m, "cannot have state", m.state print("Error: Module", m, "cannot have state", m.state)
fit.modules.append(m) fit.modules.append(m)
@@ -442,7 +457,7 @@ class Port(object):
"""Handle import from EFT config store file""" """Handle import from EFT config store file"""
# Check if we have such ship in database, bail if we don't # Check if we have such ship in database, bail if we don't
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
try: try:
sMkt.getItem(shipname) sMkt.getItem(shipname)
except: except:
@@ -596,7 +611,7 @@ class Port(object):
moduleList.append(m) moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers # Recalc to get slot numbers correct for T3 cruisers
service.Fit.getInstance().recalc(f) Fit.getInstance().recalc(f)
for module in moduleList: for module in moduleList:
if module.fits(f): if module.fits(f):
@@ -615,7 +630,7 @@ class Port(object):
@staticmethod @staticmethod
def importXml(text, callback=None, encoding="utf-8"): def importXml(text, callback=None, encoding="utf-8"):
sMkt = service.Market.getInstance() sMkt = Market.getInstance()
doc = xml.dom.minidom.parseString(text.encode(encoding)) doc = xml.dom.minidom.parseString(text.encode(encoding))
fittings = doc.getElementsByTagName("fittings").item(0) fittings = doc.getElementsByTagName("fittings").item(0)
@@ -676,7 +691,7 @@ class Port(object):
continue continue
# Recalc to get slot numbers correct for T3 cruisers # Recalc to get slot numbers correct for T3 cruisers
service.Fit.getInstance().recalc(f) Fit.getInstance().recalc(f)
for module in moduleList: for module in moduleList:
if module.fits(f): if module.fits(f):
@@ -694,10 +709,10 @@ class Port(object):
offineSuffix = " /OFFLINE" offineSuffix = " /OFFLINE"
export = "[%s, %s]\n" % (fit.ship.item.name, fit.name) export = "[%s, %s]\n" % (fit.ship.item.name, fit.name)
stuff = {} stuff = {}
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
for module in fit.modules: for module in fit.modules:
slot = module.slot slot = module.slot
if not slot in stuff: if slot not in stuff:
stuff[slot] = [] stuff[slot] = []
curr = module.item.name if module.item else ("[Empty %s slot]" % Slot.getName(slot).capitalize() if slot is not None else "") curr = module.item.name if module.item else ("[Empty %s slot]" % Slot.getName(slot).capitalize() if slot is not None else "")
if module.charge and sFit.serviceFittingOptions["exportCharges"]: if module.charge and sFit.serviceFittingOptions["exportCharges"]:
@@ -776,12 +791,12 @@ class Port(object):
if mod.slot == Slot.SUBSYSTEM: if mod.slot == Slot.SUBSYSTEM:
subsystems.append(mod) subsystems.append(mod)
continue continue
if not mod.itemID in mods: if mod.itemID not in mods:
mods[mod.itemID] = 0 mods[mod.itemID] = 0
mods[mod.itemID] += 1 mods[mod.itemID] += 1
if mod.charge: if mod.charge:
if not mod.chargeID in charges: if mod.chargeID not in charges:
charges[mod.chargeID] = 0 charges[mod.chargeID] = 0
# `or 1` because some charges (ie scripts) are without qty # `or 1` because some charges (ie scripts) are without qty
charges[mod.chargeID] += mod.numCharges or 1 charges[mod.chargeID] += mod.numCharges or 1
@@ -792,13 +807,8 @@ class Port(object):
for mod in mods: for mod in mods:
dna += ":{0};{1}".format(mod, mods[mod]) dna += ":{0};{1}".format(mod, mods[mod])
# drones are known to be in split stacks
groupedDrones = OrderedDict()
for drone in fit.drones: for drone in fit.drones:
groupedDrones[drone.itemID] = groupedDrones.get(drone.itemID, 0) + drone.amount dna += ":{0};{1}".format(drone.itemID, drone.amount)
for droneItemID in groupedDrones:
dna += ":{0};{1}".format(droneItemID, groupedDrones[droneItemID])
for cargo in fit.cargo: for cargo in fit.cargo:
# DNA format is a simple/dumb format. As CCP uses the slot information of the item itself # DNA format is a simple/dumb format. As CCP uses the slot information of the item itself
@@ -807,7 +817,7 @@ class Port(object):
# as being "Fitted" to whatever slot they are for, and it causes an corruption error in the # as being "Fitted" to whatever slot they are for, and it causes an corruption error in the
# client when trying to save the fit # client when trying to save the fit
if cargo.item.category.name == "Charge": if cargo.item.category.name == "Charge":
if not cargo.item.ID in charges: if cargo.item.ID not in charges:
charges[cargo.item.ID] = 0 charges[cargo.item.ID] = 0
charges[cargo.item.ID] += cargo.amount charges[cargo.item.ID] += cargo.amount
@@ -821,7 +831,7 @@ class Port(object):
doc = xml.dom.minidom.Document() doc = xml.dom.minidom.Document()
fittings = doc.createElement("fittings") fittings = doc.createElement("fittings")
doc.appendChild(fittings) doc.appendChild(fittings)
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
for i, fit in enumerate(fits): for i, fit in enumerate(fits):
try: try:
@@ -847,7 +857,7 @@ class Port(object):
# Order of subsystem matters based on this attr. See GH issue #130 # Order of subsystem matters based on this attr. See GH issue #130
slotId = module.getModifiedItemAttr("subSystemSlot") - 125 slotId = module.getModifiedItemAttr("subSystemSlot") - 125
else: else:
if not slot in slotNum: if slot not in slotNum:
slotNum[slot] = 0 slotNum[slot] = 0
slotId = slotNum[slot] slotId = slotNum[slot]
@@ -861,7 +871,7 @@ class Port(object):
fitting.appendChild(hardware) fitting.appendChild(hardware)
if module.charge and sFit.serviceFittingOptions["exportCharges"]: if module.charge and sFit.serviceFittingOptions["exportCharges"]:
if not module.charge.name in charges: if module.charge.name not in charges:
charges[module.charge.name] = 0 charges[module.charge.name] = 0
# `or 1` because some charges (ie scripts) are without qty # `or 1` because some charges (ie scripts) are without qty
charges[module.charge.name] += module.numCharges or 1 charges[module.charge.name] += module.numCharges or 1
@@ -874,7 +884,7 @@ class Port(object):
fitting.appendChild(hardware) fitting.appendChild(hardware)
for cargo in fit.cargo: for cargo in fit.cargo:
if not cargo.item.name in charges: if cargo.item.name not in charges:
charges[cargo.item.name] = 0 charges[cargo.item.name] = 0
charges[cargo.item.name] += cargo.amount charges[cargo.item.name] += cargo.amount
@@ -885,7 +895,7 @@ class Port(object):
hardware.setAttribute("type", name) hardware.setAttribute("type", name)
fitting.appendChild(hardware) fitting.appendChild(hardware)
except: except:
print "Failed on fitID: %d"%fit.ID print("Failed on fitID: %d" % fit.ID)
continue continue
finally: finally:
if callback: if callback:
@@ -897,13 +907,12 @@ class Port(object):
def exportMultiBuy(fit): def exportMultiBuy(fit):
export = "%s\n" % (fit.ship.item.name) export = "%s\n" % (fit.ship.item.name)
stuff = {} stuff = {}
sFit = service.Fit.getInstance() sFit = Fit.getInstance()
for module in fit.modules: for module in fit.modules:
slot = module.slot slot = module.slot
if not slot in stuff: if slot not in stuff:
stuff[slot] = [] stuff[slot] = []
curr = "%s\n" % module.item.name if module.item else ( curr = "%s\n" % module.item.name if module.item else ""
"")
if module.charge and sFit.serviceFittingOptions["exportCharges"]: if module.charge and sFit.serviceFittingOptions["exportCharges"]:
curr += "%s x%s\n" % (module.charge.name, module.numCharges) curr += "%s x%s\n" % (module.charge.name, module.numCharges)
stuff[slot].append(curr) stuff[slot].append(curr)

View File

@@ -18,10 +18,11 @@
#=============================================================================== #===============================================================================
import threading import threading
import config
import os import os
import config
import eos.types import eos.types
import eos.db.migration as migration from eos.db import migration
from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues
class PrefetchThread(threading.Thread): class PrefetchThread(threading.Thread):
@@ -44,27 +45,26 @@ prefetch.start()
# @ todo: move this to pyfa.py # @ todo: move this to pyfa.py
######## ########
#Make sure the saveddata db exists # Make sure the saveddata db exists
if not os.path.exists(config.savePath): if config.savePath and not os.path.exists(config.savePath):
os.mkdir(config.savePath) os.mkdir(config.savePath)
if os.path.isfile(config.saveDB): if config.saveDB and os.path.isfile(config.saveDB):
# If database exists, run migration after init'd database # If database exists, run migration after init'd database
eos.db.saveddata_meta.create_all() eos.db.saveddata_meta.create_all()
migration.update(eos.db.saveddata_engine) migration.update(eos.db.saveddata_engine)
# Import default database values # Import default database values
# Import values that must exist otherwise Pyfa breaks # Import values that must exist otherwise Pyfa breaks
DefaultDatabaseValues.importRequiredDefaults() DefaultDatabaseValues.importRequiredDefaults()
else: elif config.saveDB:
# If database does not exist, do not worry about migration. Simply # If database does not exist, do not worry about migration. Simply
# create and set version # create and set version
eos.db.saveddata_meta.create_all() eos.db.saveddata_meta.create_all()
eos.db.saveddata_engine.execute('PRAGMA user_version = {}'.format(migration.getAppVersion())) eos.db.saveddata_engine.execute('PRAGMA user_version = {}'.format(migration.getAppVersion()))
#Import default database values # Import default database values
# Import values that must exist otherwise Pyfa breaks # Import values that must exist otherwise Pyfa breaks
DefaultDatabaseValues.importRequiredDefaults() DefaultDatabaseValues.importRequiredDefaults()
# Import default values for damage profiles # Import default values for damage profiles
DefaultDatabaseValues.importDamageProfileDefaults() DefaultDatabaseValues.importDamageProfileDefaults()
# Import default values for target resist profiles # Import default values for target resist profiles
DefaultDatabaseValues.importResistProfileDefaults() DefaultDatabaseValues.importResistProfileDefaults()

View File

@@ -17,12 +17,13 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
import service
import eos.db
import eos.types
import time import time
from xml.dom import minidom from xml.dom import minidom
import eos
from service.network import Network, TimeoutError
VALIDITY = 24*60*60 # Price validity period, 24 hours VALIDITY = 24*60*60 # Price validity period, 24 hours
REREQUEST = 4*60*60 # Re-request delay for failed fetches, 4 hours REREQUEST = 4*60*60 # Re-request delay for failed fetches, 4 hours
TIMEOUT = 15*60 # Network timeout delay for connection issues, 15 minutes TIMEOUT = 15*60 # Network timeout delay for connection issues, 15 minutes
@@ -71,15 +72,15 @@ class Price():
# Attempt to send request and process it # Attempt to send request and process it
try: try:
network = service.Network.getInstance() network = Network.getInstance()
data = network.request(baseurl, network.PRICES, data) data = network.request(baseurl, network.PRICES, data)
xml = minidom.parse(data) xml = minidom.parse(data)
types = xml.getElementsByTagName("marketstat").item(0).getElementsByTagName("type") types = xml.getElementsByTagName("marketstat").item(0).getElementsByTagName("type")
# Cycle through all types we've got from request # Cycle through all types we've got from request
for type in types: for type_ in types:
# Get data out of each typeID details tree # Get data out of each typeID details tree
typeID = int(type.getAttribute("id")) typeID = int(type_.getAttribute("id"))
sell = type.getElementsByTagName("sell").item(0) sell = type_.getElementsByTagName("sell").item(0)
# If price data wasn't there, set price to zero # If price data wasn't there, set price to zero
try: try:
percprice = float(sell.getElementsByTagName("percentile").item(0).firstChild.data) percprice = float(sell.getElementsByTagName("percentile").item(0).firstChild.data)
@@ -96,7 +97,7 @@ class Price():
del priceMap[typeID] del priceMap[typeID]
# If getting or processing data returned any errors # If getting or processing data returned any errors
except service.network.TimeoutError, e: except TimeoutError:
# Timeout error deserves special treatment # Timeout error deserves special treatment
for typeID in priceMap.keys(): for typeID in priceMap.keys():
priceobj = priceMap[typeID] priceobj = priceMap[typeID]

View File

@@ -9,5 +9,3 @@ logger = logging.getLogger('pycrest')
logger.addHandler(NullHandler()) logger.addHandler(NullHandler())
version = "0.0.1" version = "0.0.1"
from .eve import EVE

View File

@@ -1,15 +1,17 @@
import logging
import re
import os import os
import base64 import base64
import time import time
import zlib import zlib
import requests import requests
from . import version
from compat import bytes_, text_
from errors import APIException
from requests.adapters import HTTPAdapter from requests.adapters import HTTPAdapter
import config
from service.pycrest.compat import bytes_, text_
from service.pycrest.errors import APIException
try: try:
from urllib.parse import urlparse, urlunparse, parse_qsl from urllib.parse import urlparse, urlunparse, parse_qsl
except ImportError: # pragma: no cover except ImportError: # pragma: no cover
@@ -20,13 +22,6 @@ try:
except ImportError: # pragma: no cover except ImportError: # pragma: no cover
import cPickle as pickle import cPickle as pickle
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") logger = logging.getLogger("pycrest.eve")
cache_re = re.compile(r'max-age=([0-9]+)') cache_re = re.compile(r'max-age=([0-9]+)')
@@ -110,8 +105,7 @@ class APIConnection(object):
"Accept": "application/json", "Accept": "application/json",
}) })
session.headers.update(additional_headers) session.headers.update(additional_headers)
session.mount('https://public-crest.eveonline.com', session.mount('https://public-crest.eveonline.com', HTTPAdapter())
HTTPAdapter())
self._session = session self._session = session
if cache: if cache:
if isinstance(cache, APICache): if isinstance(cache, APICache):

View File

@@ -1,32 +1,23 @@
import datetime import datetime
import ssl import ssl
import sys
import warnings import warnings
from requests.adapters import HTTPAdapter from requests.adapters import HTTPAdapter
try: try:
from requests.packages import urllib3 from requests.packages import urllib3
from requests.packages.urllib3.util import ssl_ from requests.packages.urllib3.util import ssl_
from requests.packages.urllib3.exceptions import (
from requests.packages.urllib3.exceptions import ( SystemTimeWarning,
SystemTimeWarning, SecurityWarning,
SecurityWarning, )
) from requests.packages.urllib3.packages.ssl_match_hostname import \
from requests.packages.urllib3.packages.ssl_match_hostname import \ match_hostname
match_hostname
except: except:
import urllib3 import urllib3
from urllib3.util import ssl_ from urllib3.util import ssl_
from urllib3.exceptions import SystemTimeWarning, SecurityWarning
from urllib3.exceptions import ( from urllib3.packages.ssl_match_hostname import match_hostname
SystemTimeWarning,
SecurityWarning,
)
from urllib3.packages.ssl_match_hostname import \
match_hostname
class WeakCiphersHTTPSConnection( class WeakCiphersHTTPSConnection(

View File

@@ -2,11 +2,12 @@ import BaseHTTPServer
import urlparse import urlparse
import socket import socket
import thread import thread
import wx
from service.settings import CRESTSettings
import logging import logging
import wx
from service.settings import CRESTSettings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
HTML = ''' HTML = '''
@@ -121,4 +122,3 @@ if __name__ == "__main__":
thread.start_new_thread(httpd.serve, ()) thread.start_new_thread(httpd.serve, ())
raw_input("Press <RETURN> to stop server\n") raw_input("Press <RETURN> to stop server\n")
httpd.stop() httpd.stop()

View File

@@ -19,11 +19,12 @@
import cPickle import cPickle
import os.path import os.path
import config
import urllib2 import urllib2
import config
class SettingsProvider(): class SettingsProvider():
BASE_PATH = os.path.join(config.savePath, "settings") BASE_PATH = os.path.join(config.savePath or ".", "settings")
settings = {} settings = {}
_instance = None _instance = None
@classmethod @classmethod
@@ -260,8 +261,8 @@ class HTMLExportSettings():
def setEnabled(self, enabled): def setEnabled(self, enabled):
self.serviceHTMLExportSettings["enabled"] = enabled self.serviceHTMLExportSettings["enabled"] = enabled
def getMinimalEnabled(self): def getMinimalEnabled(self):
return self.serviceHTMLExportSettings["minimal"] return self.serviceHTMLExportSettings["minimal"]

View File

@@ -17,14 +17,16 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>. # along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#=============================================================================== #===============================================================================
import eos.db
import eos.types
import copy import copy
class ImportError(Exception): import eos
pass from eos.saveddata import targetResists as db_targetResists
class TargetResists():
class ImportError(Exception):
pass
class TargetResists(object):
instance = None instance = None
@classmethod @classmethod
def getInstance(cls): def getInstance(cls):
@@ -84,5 +86,4 @@ class TargetResists():
def exportPatterns(self): def exportPatterns(self):
patterns = self.getTargetResistsList() patterns = self.getTargetResistsList()
patterns.sort(key=lambda p: p.name) patterns.sort(key=lambda p: p.name)
return eos.types.TargetResists.exportPatterns(*patterns) return db_targetResists.TargetResists.exportPatterns(*patterns)

View File

@@ -18,23 +18,25 @@
#=============================================================================== #===============================================================================
import threading import threading
import wx
import urllib2
import json import json
import config
import service
import dateutil.parser
import calendar import calendar
import wx
import dateutil.parser
import config
from service.network import Network
from service.settings import UpdateSettings
class CheckUpdateThread(threading.Thread): class CheckUpdateThread(threading.Thread):
def __init__(self, callback): def __init__(self, callback):
threading.Thread.__init__(self) threading.Thread.__init__(self)
self.callback = callback self.callback = callback
self.settings = service.settings.UpdateSettings.getInstance() self.settings = UpdateSettings.getInstance()
self.network = service.Network.getInstance() self.network = Network.getInstance()
def run(self): def run(self):
network = service.Network.getInstance() network = Network.getInstance()
try: try:
response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE) response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE)
@@ -91,5 +93,3 @@ class Update():
if cls.instance == None: if cls.instance == None:
cls.instance = Update() cls.instance = Update()
return cls.instance return cls.instance

34
tests/test_package.py Normal file
View File

@@ -0,0 +1,34 @@
"""import tests."""
import os
import importlib
import pytest
import service
import gui
import eos
import utils
def test_packages():
assert service
assert gui
assert eos
assert utils
def service_modules():
for root, folders, files in os.walk("service"):
for file_ in files:
if file_.endswith(".py") and not file_.startswith("_"):
mod_name = "{}.{}".format(
root.replace("/", "."),
file_.split(".py")[0],
)
yield mod_name
@pytest.mark.parametrize("mod_name", service_modules())
def test_service_imports(mod_name):
assert importlib.import_module(mod_name)