diff --git a/eos/db/gamedata/queries.py b/eos/db/gamedata/queries.py
index b2db92437..66c5ac9b4 100644
--- a/eos/db/gamedata/queries.py
+++ b/eos/db/gamedata/queries.py
@@ -21,6 +21,7 @@ from sqlalchemy.orm import join, exc
from sqlalchemy.sql import and_, or_, select
import eos.config
+from eos.gamedata import Item, Attribute
from eos.db import gamedata_session
from eos.db.gamedata.metaGroup import metatypes_table, items_table
from eos.db.util import processEager, processWhere
@@ -280,9 +281,9 @@ def directAttributeRequest(itemIDs, attrIDs):
if not isinstance(itemID, int):
raise TypeError("All itemIDs must be integer")
- q = select((eos.types.Item.typeID, eos.types.Attribute.attributeID, eos.types.Attribute.value),
- and_(eos.types.Attribute.attributeID.in_(attrIDs), eos.types.Item.typeID.in_(itemIDs)),
- from_obj=[join(eos.types.Attribute, eos.types.Item)])
+ q = select((Item.typeID, Attribute.attributeID, Attribute.value),
+ and_(Attribute.attributeID.in_(attrIDs), Item.typeID.in_(itemIDs)),
+ from_obj=[join(Attribute, Item)])
result = gamedata_session.execute(q).fetchall()
return result
diff --git a/gui/boosterView.py b/gui/boosterView.py
index 5c8dca993..d7e52a4ac 100644
--- a/gui/boosterView.py
+++ b/gui/boosterView.py
@@ -18,12 +18,12 @@
#===============================================================================
import wx
-import service
import gui.display as d
import gui.globalEvents as GE
import gui.marketBrowser as mb
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
+from service.fit import Fit
class BoosterViewDrop(wx.PyDropTarget):
def __init__(self, dropFn):
@@ -85,7 +85,7 @@ class BoosterView(d.Display):
event.Skip()
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -115,7 +115,7 @@ class BoosterView(d.Display):
event.Skip()
def addItem(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -139,7 +139,7 @@ class BoosterView(d.Display):
def removeBooster(self, booster):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeBooster(fitID, self.origional.index(booster))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -150,7 +150,7 @@ class BoosterView(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleBooster(fitID, row)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -163,7 +163,7 @@ class BoosterView(d.Display):
def spawnMenu(self):
sel = self.GetFirstSelected()
if sel != -1:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
item = fit.boosters[sel]
diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py
index d8d789b68..5e38ec66c 100644
--- a/gui/builtinContextMenus/ammoPattern.py
+++ b/gui/builtinContextMenus/ammoPattern.py
@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
import gui.globalEvents as GE
@@ -25,7 +24,7 @@ class AmmoPattern(ContextMenu):
def activate(self, fullContext, selection, i):
item = selection[0]
fit = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.setAsPattern(fit, item)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit))
diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py
index 99acdf247..8b8a2ae26 100644
--- a/gui/builtinContextMenus/amount.py
+++ b/gui/builtinContextMenus/amount.py
@@ -2,7 +2,6 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import eos.types
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
@@ -46,7 +45,7 @@ class AmountChanger(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.change)
def change(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
mainFrame = gui.mainFrame.MainFrame.getInstance()
fitID = mainFrame.getActiveFit()
diff --git a/gui/builtinContextMenus/cargo.py b/gui/builtinContextMenus/cargo.py
index 0b4c031b4..3de85804d 100644
--- a/gui/builtinContextMenus/cargo.py
+++ b/gui/builtinContextMenus/cargo.py
@@ -2,16 +2,16 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import eos.types
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
+from service.fit import Fit
class Cargo(ContextMenu):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, srcContext, selection):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -24,7 +24,7 @@ class Cargo(ContextMenu):
return "Add {0} to Cargo".format(itmContext)
def activate(self, fullContext, selection, i):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
typeID = int(selection[0].ID)
diff --git a/gui/builtinContextMenus/changeAffectingSkills.py b/gui/builtinContextMenus/changeAffectingSkills.py
index 5111a8d27..df7d896b0 100644
--- a/gui/builtinContextMenus/changeAffectingSkills.py
+++ b/gui/builtinContextMenus/changeAffectingSkills.py
@@ -1,11 +1,12 @@
# -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
from gui.bitmapLoader import BitmapLoader
from eos.types import Skill
import gui.globalEvents as GE
+from service.fit import Fit
+from service.character import Character
class ChangeAffectingSkills(ContextMenu):
def __init__(self):
@@ -15,8 +16,8 @@ class ChangeAffectingSkills(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "fittingCharge", "fittingShip"):
return False
- self.sChar = service.Character.getInstance()
- self.sFit = service.Fit.getInstance()
+ self.sChar = Character.getInstance()
+ self.sFit = Fit.getInstance()
fit = self.sFit.getFit(self.mainFrame.getActiveFit())
self.charID = fit.character.ID
@@ -26,7 +27,7 @@ class ChangeAffectingSkills(ContextMenu):
if srcContext == "fittingShip":
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
self.stuff = sFit.getFit(fitID).ship
cont = sFit.getFit(fitID).ship.itemModifiedAttributes
elif srcContext == "fittingCharge":
diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py
index 8d9b6be32..df14e0c9b 100644
--- a/gui/builtinContextMenus/damagePattern.py
+++ b/gui/builtinContextMenus/damagePattern.py
@@ -1,9 +1,10 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
from gui.bitmapLoader import BitmapLoader
+from service.fit import Fit
+from service.damagePattern import DamagePattern as import_DamagePattern
try:
from collections import OrderedDict
@@ -18,8 +19,8 @@ class DamagePattern(ContextMenu):
return srcContext == "resistancesViewFull" and self.mainFrame.getActiveFit() is not None
def getText(self, itmContext, selection):
- sDP = service.DamagePattern.getInstance()
- sFit = service.Fit.getInstance()
+ sDP = import_DamagePattern.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
self.fit = sFit.getFit(fitID)
@@ -59,7 +60,7 @@ class DamagePattern(ContextMenu):
menuItem.pattern = pattern
# determine active pattern
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID)
dp = f.damagePattern
@@ -98,7 +99,7 @@ class DamagePattern(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setDamagePattern(fitID, pattern)
setattr(self.mainFrame,"_activeDmgPattern", pattern)
diff --git a/gui/builtinContextMenus/droneRemoveStack.py b/gui/builtinContextMenus/droneRemoveStack.py
index f5c94853b..bc608ea1e 100644
--- a/gui/builtinContextMenus/droneRemoveStack.py
+++ b/gui/builtinContextMenus/droneRemoveStack.py
@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
import gui.globalEvents as GE
@@ -15,7 +14,7 @@ class ItemRemove(ContextMenu):
return "Remove {0} Stack".format(itmContext)
def activate(self, fullContext, selection, i):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py
index f4d2b5a44..20cdf0caa 100644
--- a/gui/builtinContextMenus/droneSplit.py
+++ b/gui/builtinContextMenus/droneSplit.py
@@ -2,7 +2,6 @@ from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import gui.mainFrame
import gui.globalEvents as GE
-import service
import wx
class DroneSplit(ContextMenu):
@@ -48,7 +47,7 @@ class DroneSpinner(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.split)
def split(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
mainFrame = gui.mainFrame.MainFrame.getInstance()
fitID = mainFrame.getActiveFit()
if self.context == "droneItem":
diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py
index c258240ea..ec7c1acdb 100644
--- a/gui/builtinContextMenus/factorReload.py
+++ b/gui/builtinContextMenus/factorReload.py
@@ -1,9 +1,9 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
from gui.bitmapLoader import BitmapLoader
+from service.fit import Fit
class FactorReload(ContextMenu):
def __init__(self):
@@ -16,14 +16,14 @@ class FactorReload(ContextMenu):
return "Factor in Reload Time"
def activate(self, fullContext, selection, i):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.serviceFittingOptions["useGlobalForceReload"] = not sFit.serviceFittingOptions["useGlobalForceReload"]
fitID = self.mainFrame.getActiveFit()
sFit.refreshFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def getBitmap(self, context, selection):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
if fit.factorReload:
diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py
index 9a86c23b1..3a659c905 100644
--- a/gui/builtinContextMenus/fighterAbilities.py
+++ b/gui/builtinContextMenus/fighterAbilities.py
@@ -1,7 +1,6 @@
import wx
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
class FighterAbility(ContextMenu):
@@ -48,7 +47,7 @@ class FighterAbility(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.toggleFighterAbility(fitID, ability)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/builtinContextMenus/implantSets.py b/gui/builtinContextMenus/implantSets.py
index 8dcf6dd1f..0cbfef508 100644
--- a/gui/builtinContextMenus/implantSets.py
+++ b/gui/builtinContextMenus/implantSets.py
@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
@@ -59,7 +58,7 @@ class ImplantSets(ContextMenu):
if self.context == "implantEditor":
# we are calling from character editor, the implant source is different
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
charID = self.selection.getActiveCharacter()
for implant in set.implants:
@@ -67,7 +66,7 @@ class ImplantSets(ContextMenu):
wx.PostEvent(self.selection, GE.CharChanged())
else:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
for implant in set.implants:
sFit.addImplant(fitID, implant.item.ID, recalc=implant == set.implants[-1])
diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py
index c355d98b5..5fbac825f 100644
--- a/gui/builtinContextMenus/itemRemove.py
+++ b/gui/builtinContextMenus/itemRemove.py
@@ -1,6 +1,5 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
import gui.globalEvents as GE
@@ -21,7 +20,7 @@ class ItemRemove(ContextMenu):
def activate(self, fullContext, selection, i):
srcContext = fullContext[0]
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
diff --git a/gui/builtinContextMenus/itemStats.py b/gui/builtinContextMenus/itemStats.py
index d8d7e04ac..8c5bc0cd6 100644
--- a/gui/builtinContextMenus/itemStats.py
+++ b/gui/builtinContextMenus/itemStats.py
@@ -1,8 +1,8 @@
from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import gui.mainFrame
-import service
import wx
+from service.fit import Fit
class ItemStats(ContextMenu):
def __init__(self):
@@ -27,7 +27,7 @@ class ItemStats(ContextMenu):
srcContext = fullContext[0]
if srcContext == "fittingShip":
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
stuff = sFit.getFit(fitID).ship
else:
stuff = selection[0]
diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py
index 75884576d..d5804eada 100644
--- a/gui/builtinContextMenus/marketJump.py
+++ b/gui/builtinContextMenus/marketJump.py
@@ -1,7 +1,7 @@
from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import gui.mainFrame
-import service
+from service.market import Market
class MarketJump(ContextMenu):
def __init__(self):
@@ -19,7 +19,7 @@ class MarketJump(ContextMenu):
if not srcContext in validContexts or selection is None or len(selection) < 1:
return False
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
item = getattr(selection[0], "item", selection[0])
mktGrp = sMkt.getMarketGroupByItem(item)
diff --git a/gui/builtinContextMenus/metaSwap.py b/gui/builtinContextMenus/metaSwap.py
index 0b2d847ac..38e339074 100644
--- a/gui/builtinContextMenus/metaSwap.py
+++ b/gui/builtinContextMenus/metaSwap.py
@@ -2,9 +2,10 @@
from gui.contextMenu import ContextMenu
from gui.itemStats import ItemStatsDialog
import gui.mainFrame
-import service
import wx
import gui.globalEvents as GE
+from service.market import Market
+from service.fit import Fit
class MetaSwap(ContextMenu):
def __init__(self):
@@ -17,7 +18,7 @@ class MetaSwap(ContextMenu):
# Check if list of variations is same for all of selection
# If not - don't show the menu
- mkt = service.Market.getInstance()
+ mkt = Market.getInstance()
self.variations = None
for i in selection:
variations = mkt.getVariationsByItems([i.item])
@@ -88,7 +89,7 @@ class MetaSwap(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py
index 3e7ee02cd..6edcf6deb 100644
--- a/gui/builtinContextMenus/moduleAmmoPicker.py
+++ b/gui/builtinContextMenus/moduleAmmoPicker.py
@@ -1,11 +1,12 @@
# -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
from gui.bitmapLoader import BitmapLoader
from eos.types import Hardpoint
import gui.globalEvents as GE
+from service.market import Market
+from service.fit import Fit
class ModuleAmmoPicker(ContextMenu):
DAMAGE_TYPES = ("em", "explosive", "kinetic", "thermal")
@@ -40,7 +41,7 @@ class ModuleAmmoPicker(ContextMenu):
return False
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
def getText(self, itmContext, selection):
@@ -214,7 +215,7 @@ class ModuleAmmoPicker(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules)
diff --git a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py
index 41f969b35..29eedf521 100644
--- a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py
+++ b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import wx
from gui.bitmapLoader import BitmapLoader
from eos.types import Hardpoint
@@ -26,7 +25,7 @@ class ModuleGlobalAmmoPicker(ModuleAmmoPicker):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = eos.db.getFit(fitID)
diff --git a/gui/builtinContextMenus/priceClear.py b/gui/builtinContextMenus/priceClear.py
index da33bfc21..14e4d23b4 100644
--- a/gui/builtinContextMenus/priceClear.py
+++ b/gui/builtinContextMenus/priceClear.py
@@ -2,7 +2,7 @@ from gui.contextMenu import ContextMenu
import gui.mainFrame
import wx
import gui.globalEvents as GE
-import service
+from service.market import Market
class PriceClear(ContextMenu):
def __init__(self):
@@ -15,7 +15,7 @@ class PriceClear(ContextMenu):
return "Reset Price Cache"
def activate(self, fullContext, selection, i):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sMkt.clearPriceCache()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
diff --git a/gui/builtinContextMenus/project.py b/gui/builtinContextMenus/project.py
index 4299f67b6..b40058a79 100644
--- a/gui/builtinContextMenus/project.py
+++ b/gui/builtinContextMenus/project.py
@@ -1,9 +1,9 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
import eos.db
+from service.fit import Fit
class Project(ContextMenu):
def __init__(self):
@@ -13,7 +13,7 @@ class Project(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -27,7 +27,7 @@ class Project(ContextMenu):
return "Project {0} onto Fit".format(itmContext)
def activate(self, fullContext, selection, i):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
trigger = sFit.project(fitID, selection[0])
if trigger:
diff --git a/gui/builtinContextMenus/shipJump.py b/gui/builtinContextMenus/shipJump.py
index bc332e4a4..3cf6b1f12 100644
--- a/gui/builtinContextMenus/shipJump.py
+++ b/gui/builtinContextMenus/shipJump.py
@@ -1,8 +1,8 @@
import wx
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
from gui.shipBrowser import Stage3Selected
+from service.fit import Fit
class ShipJump(ContextMenu):
def __init__(self):
@@ -16,7 +16,7 @@ class ShipJump(ContextMenu):
def activate(self, fullContext, selection, i):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
stuff = sFit.getFit(fitID).ship
groupID = stuff.item.group.ID
diff --git a/gui/builtinContextMenus/tacticalMode.py b/gui/builtinContextMenus/tacticalMode.py
index 3b5cc5043..07dda7bc4 100644
--- a/gui/builtinContextMenus/tacticalMode.py
+++ b/gui/builtinContextMenus/tacticalMode.py
@@ -1,8 +1,9 @@
import wx
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
+
import gui.globalEvents as GE
+from service.fit import Fit
class TacticalMode(ContextMenu):
def __init__(self):
@@ -12,7 +13,7 @@ class TacticalMode(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext != "fittingShip":
return False
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -52,7 +53,7 @@ class TacticalMode(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setMode(fitID, self.modeIds[event.Id])
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/builtinContextMenus/targetResists.py b/gui/builtinContextMenus/targetResists.py
index c0f9bf00c..557a7f276 100644
--- a/gui/builtinContextMenus/targetResists.py
+++ b/gui/builtinContextMenus/targetResists.py
@@ -1,9 +1,10 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
-import service
import gui.globalEvents as GE
import wx
from gui.bitmapLoader import BitmapLoader
+from service import targetResists as svc_targetResists
+from service.fit import Fit
try:
from collections import OrderedDict
@@ -18,7 +19,7 @@ class TargetResists(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull":
return False
- sTR = service.TargetResists.getInstance()
+ sTR = svc_targetResists.TargetResists.getInstance()
self.patterns = sTR.getTargetResistsList()
self.patterns.sort(key=lambda p: (p.name in ["None"], p.name))
@@ -33,7 +34,7 @@ class TargetResists(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setTargetResists(fitID, pattern)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -50,7 +51,7 @@ class TargetResists(ContextMenu):
item.pattern = pattern
# determine active pattern
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID)
tr = f.targetResists
diff --git a/gui/builtinContextMenus/whProjector.py b/gui/builtinContextMenus/whProjector.py
index ba0677e20..b47ded3da 100644
--- a/gui/builtinContextMenus/whProjector.py
+++ b/gui/builtinContextMenus/whProjector.py
@@ -1,8 +1,9 @@
from gui.contextMenu import ContextMenu
import gui.mainFrame
import gui.globalEvents as GE
-import service
import wx
+from service.market import Market
+from service.fit import Fit
class WhProjector(ContextMenu):
def __init__(self):
@@ -16,7 +17,7 @@ class WhProjector(ContextMenu):
def getSubMenu(self, context, selection, rootMenu, i, pitem):
msw = True if "wxMSW" in wx.PlatformInfo else False
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
effdata = sMkt.getSystemWideEffects()
self.idmap = {}
@@ -48,7 +49,7 @@ class WhProjector(ContextMenu):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.project(fitID, swObj)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/builtinGraphs/fitDps.py b/gui/builtinGraphs/fitDps.py
index ef2782674..0e0c4f12e 100644
--- a/gui/builtinGraphs/fitDps.py
+++ b/gui/builtinGraphs/fitDps.py
@@ -18,12 +18,11 @@
#===============================================================================
from gui.graph import Graph
-import service
from gui.bitmapLoader import BitmapLoader
from eos.graph.fitDps import FitDpsGraph as FitDps
from eos.graph import Data
import gui.mainFrame
-import service
+from service.attribute import Attribute
class FitDpsGraph(Graph):
propertyAttributeMap = {"angle": "maxVelocity",
@@ -53,7 +52,7 @@ class FitDpsGraph(Graph):
def getIcons(self):
icons = {}
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
for key, attrName in self.propertyAttributeMap.iteritems():
iconFile = sAttr.getAttributeInfo(attrName).icon.iconFile
bitmap = BitmapLoader.getBitmap(iconFile, "icons")
diff --git a/gui/builtinPreferenceViews/pyfaCrestPreferences.py b/gui/builtinPreferenceViews/pyfaCrestPreferences.py
index 081ccf871..56f559068 100644
--- a/gui/builtinPreferenceViews/pyfaCrestPreferences.py
+++ b/gui/builtinPreferenceViews/pyfaCrestPreferences.py
@@ -4,8 +4,9 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
-import service
from service.crest import CrestModes
+from service.crest import Crest
+from service.settings import CRESTSettings
from wx.lib.intctrl import IntCtrl
@@ -15,7 +16,7 @@ class PFCrestPref ( PreferenceView):
def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
- self.settings = service.settings.CRESTSettings.getInstance()
+ self.settings = CRESTSettings.getInstance()
self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width
mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -107,16 +108,16 @@ class PFCrestPref ( PreferenceView):
def OnModeChange(self, event):
self.settings.set('mode', event.GetInt())
self.ToggleProxySettings(self.settings.get('mode'))
- service.Crest.restartService()
+ Crest.restartService()
def OnServerChange(self, event):
self.settings.set('server', event.GetInt())
- service.Crest.restartService()
+ Crest.restartService()
def OnBtnApply(self, event):
self.settings.set('clientID', self.inputClientID.GetValue().strip())
self.settings.set('clientSecret', self.inputClientSecret.GetValue().strip())
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
sCrest.delAllCharacters()
def ToggleProxySettings(self, mode):
diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py
index 2d8104bdd..4ea5924bc 100644
--- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py
+++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py
@@ -4,9 +4,9 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
-import service
import gui.globalEvents as GE
-
+from service.settings import SettingsProvider
+from service.fit import Fit
class PFGeneralPref ( PreferenceView):
title = "General"
@@ -14,7 +14,7 @@ class PFGeneralPref ( PreferenceView):
def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
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 )
@@ -70,7 +70,7 @@ class PFGeneralPref ( PreferenceView):
defCharSizer = wx.BoxSizer( wx.HORIZONTAL )
- self.sFit = service.Fit.getInstance()
+ self.sFit = Fit.getInstance()
self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"])
self.cbGlobalDmgPattern.SetValue(self.sFit.serviceFittingOptions["useGlobalDamagePattern"])
diff --git a/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py b/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py
index c80a7a33e..f018efe8f 100644
--- a/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py
+++ b/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py
@@ -5,9 +5,10 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
-import service
import gui.globalEvents as GE
+from service.settings import HTMLExportSettings
+
class PFHTMLExportPref ( PreferenceView):
title = "HTML Export"
@@ -22,7 +23,7 @@ class PFHTMLExportPref ( PreferenceView):
def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
- self.HTMLExportSettings = service.settings.HTMLExportSettings.getInstance()
+ self.HTMLExportSettings = HTMLExportSettings.getInstance()
self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width
mainSizer = wx.BoxSizer( wx.VERTICAL )
diff --git a/gui/builtinPreferenceViews/pyfaNetworkPreferences.py b/gui/builtinPreferenceViews/pyfaNetworkPreferences.py
index bd79dd88c..cda14dd3b 100644
--- a/gui/builtinPreferenceViews/pyfaNetworkPreferences.py
+++ b/gui/builtinPreferenceViews/pyfaNetworkPreferences.py
@@ -4,7 +4,8 @@ from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
-import service
+from service.settings import NetworkSettings
+from service.network import Network
class PFNetworkPref ( PreferenceView):
title = "Network"
@@ -12,8 +13,8 @@ class PFNetworkPref ( PreferenceView):
def populatePanel( self, panel ):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
- self.settings = service.settings.NetworkSettings.getInstance()
- self.network = service.Network.getInstance()
+ self.settings = NetworkSettings.getInstance()
+ self.network = Network.getInstance()
self.dirtySettings = False
mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -164,7 +165,7 @@ class PFNetworkPref ( PreferenceView):
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)
else:
self.ToggleProxySettings(True)
@@ -236,7 +237,7 @@ class PFNetworkPref ( PreferenceView):
self.UpdateApplyButtonState()
- if choice is not service.settings.NetworkSettings.PROXY_MODE_MANUAL:
+ if choice is not NetworkSettings.PROXY_MODE_MANUAL:
self.ToggleProxySettings(False)
else:
self.ToggleProxySettings(True)
diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py
index c49bd0c94..c4ec70039 100644
--- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py
+++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py
@@ -1,11 +1,10 @@
import wx
-import service
import os
from gui.preferenceView import PreferenceView
from gui.bitmapLoader import BitmapLoader
+from service.settings import UpdateSettings
-import service
import gui.globalEvents as GE
@@ -17,7 +16,7 @@ class PFUpdatePref (PreferenceView):
"suppressed release notifications, if any."
def populatePanel( self, panel ):
- self.UpdateSettings = service.settings.UpdateSettings.getInstance()
+ self.UpdateSettings = UpdateSettings.getInstance()
self.dirtySettings = False
dlgWidth = panel.GetParent().GetParent().ClientSize.width
diff --git a/gui/builtinStatsViews/firepowerViewFull.py b/gui/builtinStatsViews/firepowerViewFull.py
index 0e8d1c070..26789a0df 100644
--- a/gui/builtinStatsViews/firepowerViewFull.py
+++ b/gui/builtinStatsViews/firepowerViewFull.py
@@ -18,7 +18,6 @@
#===============================================================================
import wx
-import service
import gui.mainFrame
from gui.statsView import StatsView
from gui.bitmapLoader import BitmapLoader
@@ -114,7 +113,7 @@ class FirepowerViewFull(StatsView):
def switchToMiningYieldView(self, event):
# Getting the active fit
mainFrame = gui.mainFrame.MainFrame.getInstance()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(mainFrame.getActiveFit())
# Remove ourselves from statsPane's view list
self.parent.views.remove(self)
diff --git a/gui/builtinStatsViews/miningyieldViewFull.py b/gui/builtinStatsViews/miningyieldViewFull.py
index 65ce9ae96..f96def013 100644
--- a/gui/builtinStatsViews/miningyieldViewFull.py
+++ b/gui/builtinStatsViews/miningyieldViewFull.py
@@ -18,7 +18,6 @@
#===============================================================================
import wx
-import service
import gui.mainFrame
from gui.statsView import StatsView
from gui.bitmapLoader import BitmapLoader
@@ -103,7 +102,7 @@ class MiningYieldViewFull(StatsView):
def switchToFirepowerView(self, event):
# Getting the active fit
mainFrame = gui.mainFrame.MainFrame.getInstance()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(mainFrame.getActiveFit())
# Remove ourselves from statsPane's view list
self.parent.views.remove(self)
@@ -124,9 +123,9 @@ class MiningYieldViewFull(StatsView):
def refreshPanel(self, fit):
#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),
- ("labelFullminingyieldDrone", lambda: fit.droneYield * 3600, 3, 0, 0, u"%s m\u00B3/h", None),
- ("labelFullminingyieldTotal", lambda: fit.totalYield * 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, 3, 0, 0, u"%s m\u00B3/s", None),
+ ("labelFullminingyieldTotal", lambda: fit.totalYield, 3, 0, 0, u"%s m\u00B3/s", None))
counter = 0
for labelName, value, prec, lowest, highest, valueFormat, altFormat in stats:
diff --git a/gui/builtinStatsViews/priceViewFull.py b/gui/builtinStatsViews/priceViewFull.py
index 16935a136..2829a3fa2 100644
--- a/gui/builtinStatsViews/priceViewFull.py
+++ b/gui/builtinStatsViews/priceViewFull.py
@@ -22,7 +22,7 @@ from gui.statsView import StatsView
from gui import builtinStatsViews
from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
-import service
+from service.market import Market
class PriceViewFull(StatsView):
name = "priceViewFull"
@@ -92,7 +92,7 @@ class PriceViewFull(StatsView):
for _ in xrange(cargo.amount):
typeIDs.append(cargo.itemID)
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sMkt.getPrices(typeIDs, self.processPrices)
self.labelEMStatus.SetLabel("Updating prices...")
else:
diff --git a/gui/builtinStatsViews/rechargeViewFull.py b/gui/builtinStatsViews/rechargeViewFull.py
index c73aaf0b4..5d8c1424a 100644
--- a/gui/builtinStatsViews/rechargeViewFull.py
+++ b/gui/builtinStatsViews/rechargeViewFull.py
@@ -23,7 +23,7 @@ from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
import gui.mainFrame
import gui.builtinStatsViews.resistancesViewFull as rvf
-import service
+from service.fit import Fit
class RechargeViewFull(StatsView):
name = "rechargeViewFull"
@@ -43,7 +43,7 @@ class RechargeViewFull(StatsView):
def toggleEffective(self, event):
self.effective = event.effective
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
self.refreshPanel(sFit.getFit(self.mainFrame.getActiveFit()))
event.Skip()
diff --git a/gui/builtinStatsViews/resistancesViewFull.py b/gui/builtinStatsViews/resistancesViewFull.py
index 55daa813d..f12860a85 100644
--- a/gui/builtinStatsViews/resistancesViewFull.py
+++ b/gui/builtinStatsViews/resistancesViewFull.py
@@ -23,7 +23,6 @@ from gui import builtinStatsViews
from gui.bitmapLoader import BitmapLoader
from gui import pygauge as PG
from gui.utils.numberFormatter import formatAmount
-import service
import gui.mainFrame
import gui.builtinViews.fittingView as fv
import gui.globalEvents as GE
diff --git a/gui/builtinViewColumns/attributeDisplay.py b/gui/builtinViewColumns/attributeDisplay.py
index 47d9aa043..c8bda870c 100644
--- a/gui/builtinViewColumns/attributeDisplay.py
+++ b/gui/builtinViewColumns/attributeDisplay.py
@@ -22,14 +22,16 @@ from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
-import service
+from service.attribute import Attribute
+from service.market import Market
+
import wx
class AttributeDisplay(ViewColumn):
name = "attr"
def __init__(self, fittingView, params):
ViewColumn.__init__(self, fittingView)
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo(params["attribute"])
self.info = info
if params["showIcon"]:
@@ -57,7 +59,7 @@ class AttributeDisplay(ViewColumn):
self.direct = True
self.view = fittingView
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
def refresh(stuff):
self.directInfo = sMkt.directAttrRequest(stuff, info) if stuff else None
diff --git a/gui/builtinViewColumns/baseName.py b/gui/builtinViewColumns/baseName.py
index 77b4698bd..9381509a0 100644
--- a/gui/builtinViewColumns/baseName.py
+++ b/gui/builtinViewColumns/baseName.py
@@ -21,9 +21,10 @@
from gui.viewColumn import ViewColumn
import gui.mainFrame
+#from eos.saveddata.fit import Fit
+from service.fit import Fit
import wx
-from eos.types import Drone, Cargo, Fit, Module, Slot, Rack, Implant, Fighter
-import service
+from eos.types import Drone, Cargo, Module, Slot, Rack, Implant, Fighter
class BaseName(ViewColumn):
name = "Base Name"
@@ -51,7 +52,7 @@ class BaseName(ViewColumn):
else:
return "%s (%s)" % (stuff.name, stuff.ship.item.name)
elif isinstance(stuff, Rack):
- if service.Fit.getInstance().serviceFittingOptions["rackLabels"]:
+ if Fit.getInstance().serviceFittingOptions["rackLabels"]:
if stuff.slot == Slot.MODE:
return u'─ Tactical Mode ─'
else:
@@ -68,7 +69,7 @@ class BaseName(ViewColumn):
else:
item = getattr(stuff, "item", stuff)
- if service.Fit.getInstance().serviceFittingOptions["showMarketShortcuts"]:
+ if Fit.getInstance().serviceFittingOptions["showMarketShortcuts"]:
marketShortcut = getattr(item, "marketShortcut", None)
if marketShortcut:
diff --git a/gui/builtinViewColumns/capacitorUse.py b/gui/builtinViewColumns/capacitorUse.py
index 4a3407ab9..9648d4fde 100644
--- a/gui/builtinViewColumns/capacitorUse.py
+++ b/gui/builtinViewColumns/capacitorUse.py
@@ -18,12 +18,12 @@
#===============================================================================
import wx
-import service
from gui.utils.numberFormatter import formatAmount
from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader
from eos.types import Mode
+from service.attribute import Attribute
class CapacitorUse(ViewColumn):
name = "Capacitor Usage"
@@ -32,7 +32,7 @@ class CapacitorUse(ViewColumn):
self.mask = wx.LIST_MASK_IMAGE
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo("capacitorNeed")
self.imageId = fittingView.imageList.GetImageIndex("capacitorRecharge_small", "gui")
self.bitmap = BitmapLoader.getBitmap("capacitorRecharge_small", "gui")
diff --git a/gui/builtinViewColumns/maxRange.py b/gui/builtinViewColumns/maxRange.py
index eb8f8d693..8f3b4f4eb 100644
--- a/gui/builtinViewColumns/maxRange.py
+++ b/gui/builtinViewColumns/maxRange.py
@@ -20,11 +20,12 @@
from gui import builtinViewColumns
from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader
-import service
from gui.utils.numberFormatter import formatAmount
import wx
from eos.types import Mode
+from service.attribute import Attribute
+
class MaxRange(ViewColumn):
name = "Max Range"
def __init__(self, fittingView, params = None):
@@ -33,7 +34,7 @@ class MaxRange(ViewColumn):
"displayName": False}
ViewColumn.__init__(self, fittingView)
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
info = sAttr.getAttributeInfo("maxRange")
self.info = info
if params["showIcon"]:
diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py
index bea5c945c..0c7f9ef8f 100644
--- a/gui/builtinViewColumns/misc.py
+++ b/gui/builtinViewColumns/misc.py
@@ -405,9 +405,9 @@ class Miscellanea(ViewColumn):
cycleTime = stuff.cycleTime
if not miningAmount or not cycleTime:
return "", None
- minePerHour = (float(miningAmount) * 1000 / cycleTime) * 3600
- text = "{0}/h".format(formatAmount(minePerHour, 3, 0, 3))
- tooltip = "Mining Yield per hour"
+ minePerSec = float(miningAmount) * 1000 / cycleTime
+ text = "{0}/s".format(formatAmount(minePerSec, 3, 0, 3))
+ tooltip = "Yield per second"
return text, tooltip
elif itemGroup == "Logistic Drone":
armorAmount = stuff.getModifiedItemAttr("armorDamageAmount")
@@ -442,9 +442,9 @@ class Miscellanea(ViewColumn):
cycleTime = stuff.getModifiedItemAttr("duration")
if not miningAmount or not cycleTime:
return "", None
- minePerHour = (float(miningAmount) * 1000 / cycleTime) * 3600
- text = "{0}/h".format(formatAmount(minePerHour, 3, 0, 3))
- tooltip = "Mining Yield per hour"
+ minePerSec = float(miningAmount) * 1000 / cycleTime
+ text = "{0}/s".format(formatAmount(minePerSec, 3, 0, 3))
+ tooltip = "Yield per second"
return text, tooltip
elif itemGroup == "Micro Jump Drive":
cycleTime = stuff.getModifiedItemAttr("duration") / 1000
diff --git a/gui/builtinViewColumns/price.py b/gui/builtinViewColumns/price.py
index 74d2fc890..6f1f95eb2 100644
--- a/gui/builtinViewColumns/price.py
+++ b/gui/builtinViewColumns/price.py
@@ -22,7 +22,7 @@ from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
from eos.types import Drone, Cargo
import wx
-import service
+from service.market import Market
class Price(ViewColumn):
name = "Price"
@@ -36,7 +36,7 @@ class Price(ViewColumn):
if stuff.item is None or stuff.item.group.name == "Ship Modifiers":
return ""
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
price = sMkt.getPriceNow(stuff.item.ID)
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)
def delayedText(self, mod, display, colItem):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
def callback(item):
price = sMkt.getPriceNow(item.ID)
text = formatAmount(price.price, 3, 3, 9, currency=True) if price.price else ""
diff --git a/gui/builtinViewColumns/propertyDisplay.py b/gui/builtinViewColumns/propertyDisplay.py
index 0bfee5899..cb1008fb1 100644
--- a/gui/builtinViewColumns/propertyDisplay.py
+++ b/gui/builtinViewColumns/propertyDisplay.py
@@ -21,13 +21,12 @@ from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
import wx
-import service
class PropertyDisplay(ViewColumn):
name = "prop"
def __init__(self, fittingView, params):
ViewColumn.__init__(self, fittingView)
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
attributeSlave = params["attributeSlave"] or params["property"]
# This function can throw an exception if the database isn't sane
# We need to do a sanity check before this runs
diff --git a/gui/builtinViews/emptyView.py b/gui/builtinViews/emptyView.py
index 2ea3dbeb1..3088c65a1 100644
--- a/gui/builtinViews/emptyView.py
+++ b/gui/builtinViews/emptyView.py
@@ -2,7 +2,6 @@ import wx
import gui.globalEvents as GE
import gui.chromeTabs
import gui.mainFrame
-import service
class BlankPage(wx.Panel):
def __init__(self, parent):
@@ -23,7 +22,7 @@ class BlankPage(wx.Panel):
def pageChanged(self, event):
if self.parent.IsActive(self):
fitID = None
-# sFit = service.Fit.getInstance()
+# sFit = Fit.getInstance()
# sFit.switchFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/builtinViews/entityEditor.py b/gui/builtinViews/entityEditor.py
index b62060357..c9bffe951 100644
--- a/gui/builtinViews/entityEditor.py
+++ b/gui/builtinViews/entityEditor.py
@@ -1,6 +1,5 @@
import wx
from gui.bitmapLoader import BitmapLoader
-import service
class BaseValidator(wx.PyValidator):
def __init__(self):
diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py
index 348562e24..f4cac9753 100644
--- a/gui/builtinViews/fittingView.py
+++ b/gui/builtinViews/fittingView.py
@@ -19,7 +19,6 @@
import wx
import wx.lib.newevent
-import service
import gui.mainFrame
import gui.marketBrowser
import gui.display as d
@@ -32,6 +31,9 @@ from gui.bitmapLoader import BitmapLoader
import gui.builtinViews.emptyView
from gui.utils.exportHtml import exportHtml
+from service.fit import Fit
+from service.market import Market
+
import gui.globalEvents as GE
#Tab spawning handler
@@ -55,7 +57,7 @@ class FitSpawner(gui.multiSwitch.TabSpawner):
pass
if count < 0:
startup = getattr(event, "startup", False) # see OpenFitsThread in gui.mainFrame
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
openFitInNew = sFit.serviceFittingOptions["openFitInNew"]
mstate = wx.GetMouseState()
@@ -207,7 +209,7 @@ class FittingView(d.Display):
def pageChanged(self, event):
if self.parent.IsActive(self):
fitID = self.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.switchFit(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -262,7 +264,7 @@ class FittingView(d.Display):
try:
# Sometimes there is no active page after deletion, hence the try block
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.refreshFit(self.getActiveFit())
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID))
except wx._core.PyDeadObjectError:
@@ -282,7 +284,7 @@ class FittingView(d.Display):
fitID = event.fitID
startup = getattr(event, "startup", False)
self.activeFitID = fitID
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
self.updateTab()
if not startup or startup == 2: # see OpenFitsThread in gui.mainFrame
self.Show(fitID is not None)
@@ -293,7 +295,7 @@ class FittingView(d.Display):
event.Skip()
def updateTab(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.getActiveFit(), basic=True)
bitmap = BitmapLoader.getImage("race_%s_small" % fit.ship.item.race, "gui")
@@ -308,7 +310,7 @@ class FittingView(d.Display):
itemID = event.itemID
fitID = self.activeFitID
if fitID != None:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
if sFit.isAmmo(itemID):
modules = []
sel = self.GetFirstSelected()
@@ -337,7 +339,7 @@ class FittingView(d.Display):
self.click(event)
def removeModule(self, module):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID)
populate = sFit.removeModule(self.activeFitID, fit.modules.index(module))
@@ -351,7 +353,7 @@ class FittingView(d.Display):
dstRow, _ = self.HitTest((x, y))
if dstRow != -1 and dstRow not in self.blanks:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
moduleChanged = sFit.changeModule(fitID, self.mods[dstRow].position, srcIdx)
if moduleChanged is None:
@@ -367,7 +369,7 @@ class FittingView(d.Display):
if dstRow != -1 and dstRow not in self.blanks:
module = self.mods[dstRow]
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.moveCargoToModule(self.mainFrame.getActiveFit(), module.position, srcIdx, mstate.CmdDown() and module.isEmpty)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -375,7 +377,7 @@ class FittingView(d.Display):
def swapItems(self, x, y, srcIdx):
'''Swap two modules in fitting window'''
mstate = wx.GetMouseState()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID)
if mstate.CmdDown():
@@ -408,7 +410,7 @@ class FittingView(d.Display):
known to the display, and not the backend, so it's safe.
'''
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID)
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:
return
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
selection = []
sel = self.GetFirstSelected()
contexts = []
@@ -505,7 +507,7 @@ class FittingView(d.Display):
sel = self.GetNextSelected(sel)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID)
contexts.append(("fittingShip", "Ship" if not fit.isStructure else "Citadel"))
@@ -537,7 +539,7 @@ class FittingView(d.Display):
else:
mods = self.getSelectedMods()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
ctrl = wx.GetMouseState().CmdDown() or wx.GetMouseState().MiddleDown()
click = "ctrl" if ctrl is True else "right" if event.GetButton() == 3 else "left"
@@ -571,7 +573,7 @@ class FittingView(d.Display):
self.Freeze()
d.Display.refresh(self, stuff)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.activeFitID)
slotMap = {}
@@ -637,7 +639,7 @@ class FittingView(d.Display):
for i in xrange(len(self.DEFAULT_COLS)):
columnsWidths.append(0)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
try:
fit = sFit.getFit(self.activeFitID)
except:
diff --git a/gui/builtinViews/fleetView.py b/gui/builtinViews/fleetView.py
index bc6eef9a2..7112778f3 100644
--- a/gui/builtinViews/fleetView.py
+++ b/gui/builtinViews/fleetView.py
@@ -1,6 +1,5 @@
import wx.gizmos
import gui.fleetBrowser
-import service
from gui.bitmapLoader import BitmapLoader
#Tab spawning handler
diff --git a/gui/builtinViews/implantEditor.py b/gui/builtinViews/implantEditor.py
index bcdb96c7b..851f49754 100644
--- a/gui/builtinViews/implantEditor.py
+++ b/gui/builtinViews/implantEditor.py
@@ -1,10 +1,10 @@
import wx
-import service
import gui.display as d
from gui.bitmapLoader import BitmapLoader
import gui.PFSearchBox as SBox
from gui.marketBrowser import SearchBox
from wx.lib.buttons import GenBitmapButton
+from service.market import Market
class BaseImplantEditorView (wx.Panel):
def addMarketViewImage(self, iconFile):
@@ -71,7 +71,7 @@ class BaseImplantEditorView (wx.Panel):
# Populate the market tree
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
for mktGrp in sMkt.getImplantTree():
iconId = self.addMarketViewImage(sMkt.getIconByMarketGroup(mktGrp))
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):
tree = self.availableImplantsTree
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
parent = event.Item
child, _ = tree.GetFirstChild(parent)
text = tree.GetItemText(child)
@@ -235,7 +235,7 @@ class ItemView(d.Display):
self.update(self.items)
def scheduleSearch(self, event=None):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
search = self.searchBox.GetLineText(0)
# Make sure we do not count wildcard as search symbol
diff --git a/gui/cargoView.py b/gui/cargoView.py
index 91bfb2b5f..ed58e4ba3 100644
--- a/gui/cargoView.py
+++ b/gui/cargoView.py
@@ -18,12 +18,12 @@
#===============================================================================
import wx
-import service
import gui.display as d
import gui.marketBrowser as mb
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
import globalEvents as GE
+from service.fit import Fit
class CargoViewDrop(wx.PyDropTarget):
def __init__(self, dropFn):
@@ -75,7 +75,7 @@ class CargoView(d.Display):
if data[0] == "fitting":
self.swapModule(x, y, int(data[1]))
elif data[0] == "market":
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.addCargo(self.mainFrame.getActiveFit(), int(data[1]), 1)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -94,7 +94,7 @@ class CargoView(d.Display):
keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
row = self.GetFirstSelected()
if row != -1:
sFit.removeCargo(fitID, self.GetItemData(row))
@@ -103,7 +103,7 @@ class CargoView(d.Display):
def swapModule(self, x, y, modIdx):
'''Swap a module from fitting window with cargo'''
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
dstRow, _ = self.HitTest((x, y))
mstate = wx.GetMouseState()
@@ -125,7 +125,7 @@ class CargoView(d.Display):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -161,7 +161,7 @@ class CargoView(d.Display):
col = self.getColumn(event.Position)
if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
cargo = self.cargo[self.GetItemData(row)]
sFit.removeCargo(fitID, self.original.index(cargo))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -174,11 +174,11 @@ class CargoView(d.Display):
def spawnMenu(self):
sel = self.GetFirstSelected()
if sel != -1:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
cargo = fit.cargo[sel]
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sourceContext = "cargoItem"
itemContext = sMkt.getCategoryByItem(cargo.item).name
diff --git a/gui/characterEditor.py b/gui/characterEditor.py
index bf7db18bf..e551ce9fa 100644
--- a/gui/characterEditor.py
+++ b/gui/characterEditor.py
@@ -22,11 +22,14 @@ import wx
import wx.lib.newevent
import wx.gizmos
from gui.bitmapLoader import BitmapLoader
-import service
from gui.contextMenu import ContextMenu
import gui.globalEvents as GE
from gui.builtinViews.implantEditor import BaseImplantEditorView
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):
@@ -60,7 +63,7 @@ class CharacterEntityEditor(EntityEditor):
self.SetEditorValidator(CharacterTextValidor)
def getEntitiesFromContext(self):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
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
@@ -76,21 +79,21 @@ class CharacterEntityEditor(EntityEditor):
return charList
def DoNew(self, name):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
return sChar.new(name)
def DoRename(self, entity, name):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
sChar.rename(entity, name)
def DoCopy(self, entity, name):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
copy = sChar.copy(entity)
sChar.rename(copy, name)
return copy
def DoDelete(self, entity):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
sChar.delete(entity)
@@ -104,7 +107,7 @@ class CharacterEditor(wx.Frame):
self.mainFrame = parent
#self.disableWin = wx.WindowDisabler(self)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
@@ -181,7 +184,7 @@ class CharacterEditor(wx.Frame):
self.Destroy()
def saveChar(self, event):
- sChr = service.Character.getInstance()
+ sChr = Character.getInstance()
char = self.entityEditor.getActiveEntity()
sChr.saveCharacter(char.ID)
wx.PostEvent(self, GE.CharListUpdated())
@@ -192,7 +195,7 @@ class CharacterEditor(wx.Frame):
dlg.ShowModal()
def revertChar(self, event):
- sChr = service.Character.getInstance()
+ sChr = Character.getInstance()
char = self.entityEditor.getActiveEntity()
sChr.revertCharacter(char.ID)
wx.PostEvent(self, GE.CharListUpdated())
@@ -223,7 +226,7 @@ class CharacterEditor(wx.Frame):
event.Skip()
def Destroy(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
if fitID is not None:
sFit.clearFit(fitID)
@@ -296,7 +299,7 @@ class SkillTreeView (wx.Panel):
self.Layout()
def populateSkillTree(self, event=None):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity()
dirtyGroups = set([skill.item.group.ID for skill in char.dirtySkills])
@@ -326,7 +329,7 @@ class SkillTreeView (wx.Panel):
tree.Delete(child)
#Get the real intrestin' stuff
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity()
for id, name in sChar.getSkills(tree.GetPyData(root)):
iconId = self.skillBookImageId
@@ -348,7 +351,7 @@ class SkillTreeView (wx.Panel):
return
char = self.charEditor.entityEditor.getActiveEntity()
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
if char.name not in ("All 0", "All 5"):
self.levelChangeMenu.selection = sMkt.getItem(self.skillTreeListCtrl.GetPyData(item))
self.PopupMenu(self.levelChangeMenu)
@@ -359,7 +362,7 @@ class SkillTreeView (wx.Panel):
def changeLevel(self, event):
level = self.levelIds.get(event.Id)
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity()
selection = self.skillTreeListCtrl.GetSelection()
skillID = self.skillTreeListCtrl.GetPyData(selection)
@@ -405,19 +408,19 @@ class ImplantEditorView(BaseImplantEditorView):
self.determineEnabled()
def getImplantsFromContext(self):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity()
return sChar.getImplants(char.ID)
def addImplantToContext(self, item):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity()
sChar.addImplant(char.ID, item.ID)
def removeImplantFromContext(self, implant):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
char = self.Parent.Parent.entityEditor.getActiveEntity()
sChar.removeImplant(char.ID, implant)
@@ -536,7 +539,7 @@ class APIView (wx.Panel):
self.charChanged(None)
def charChanged(self, event):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
activeChar = self.charEditor.entityEditor.getActiveEntity()
ID, key, char, chars = sChar.getApiDetails(activeChar.ID)
@@ -575,13 +578,13 @@ class APIView (wx.Panel):
self.stStatus.SetLabel("Invalid keyID or vCode!")
return
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
try:
activeChar = self.charEditor.entityEditor.getActiveEntity()
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.")
- except service.network.TimeoutError, e:
+ except TimeoutError, e:
self.stStatus.SetLabel("Request timed out. Please check network connectivity and/or proxy settings.")
except Exception, e:
self.stStatus.SetLabel("Error:\n%s"%e.message)
@@ -601,7 +604,7 @@ class APIView (wx.Panel):
charName = self.charChoice.GetString(self.charChoice.GetSelection())
if charName:
try:
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
activeChar = self.charEditor.entityEditor.getActiveEntity()
sChar.apiFetch(activeChar.ID, 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))
self.charID = charID
self.parent = parent
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
name = sChar.getCharName(charID)
bSizer1 = wx.BoxSizer(wx.HORIZONTAL)
@@ -631,7 +634,7 @@ class SaveCharacterAs(wx.Dialog):
self.button.Bind(wx.EVT_BUTTON, self.change)
def change(self, event):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
sChar.saveCharacterAs(self.charID, self.input.GetLineText(0))
wx.PostEvent(self.parent, GE.CharListUpdated())
diff --git a/gui/characterSelection.py b/gui/characterSelection.py
index 47df7e018..7ff6be57e 100644
--- a/gui/characterSelection.py
+++ b/gui/characterSelection.py
@@ -18,10 +18,11 @@
#===============================================================================
import wx
-import service
from gui.bitmapLoader import BitmapLoader
import gui.globalEvents as GE
import gui.mainFrame
+from service.character import Character
+from service.fit import Fit
class CharacterSelection(wx.Panel):
def __init__(self, parent):
@@ -76,7 +77,7 @@ class CharacterSelection(wx.Panel):
def refreshCharacterList(self, event=None):
choice = self.charChoice
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
activeChar = self.getActiveCharacter()
choice.Clear()
@@ -94,7 +95,7 @@ class CharacterSelection(wx.Panel):
charID = sChar.all5ID()
self.selectChar(charID)
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.changeChar(fitID, charID)
choice.Append(u"\u2015 Open Character Editor \u2015", -1)
@@ -104,7 +105,7 @@ class CharacterSelection(wx.Panel):
event.Skip()
def refreshApi(self, event):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
ID, key, charName, chars = sChar.getApiDetails(self.getActiveCharacter())
if charName:
try:
@@ -117,7 +118,7 @@ class CharacterSelection(wx.Panel):
def charChanged(self, event):
fitID = self.mainFrame.getActiveFit()
charID = self.getActiveCharacter()
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
if charID == -1:
# revert to previous character
@@ -129,7 +130,7 @@ class CharacterSelection(wx.Panel):
else:
self.btnRefresh.Enable(False)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.changeChar(fitID, charID)
self.charCache = self.charChoice.GetCurrentSelection()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -148,7 +149,7 @@ class CharacterSelection(wx.Panel):
def fitChanged(self, event):
self.charChoice.Enable(event.fitID != None)
choice = self.charChoice
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
currCharID = choice.GetClientData(choice.GetCurrentSelection())
fit = sFit.getFit(event.fitID)
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.SetToolTipString("No active fit")
else:
- sCharacter = service.Character.getInstance()
+ sCharacter = Character.getInstance()
reqs = sCharacter.checkRequirements(fit)
sCharacter.skillReqsDict = {'charname':fit.character.name, 'skills':[]}
if len(reqs) == 0:
@@ -175,7 +176,7 @@ class CharacterSelection(wx.Panel):
self.skillReqsStaticBitmap.SetToolTipString(tip.strip())
if newCharID == None:
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
self.selectChar(sChar.all5ID())
elif currCharID != newCharID:
@@ -187,7 +188,7 @@ class CharacterSelection(wx.Panel):
def _buildSkillsTooltip(self, reqs, currItem = "", tabulationLevel = 0):
tip = ""
- sCharacter = service.Character.getInstance()
+ sCharacter = Character.getInstance()
if tabulationLevel == 0:
for item, subReqs in reqs.iteritems():
@@ -210,7 +211,7 @@ class CharacterSelection(wx.Panel):
return tip
def _buildSkillsTooltipCondensed(self, reqs, currItem = "", tabulationLevel = 0, skillsMap = {}):
- sCharacter = service.Character.getInstance()
+ sCharacter = Character.getInstance()
if tabulationLevel == 0:
for item, subReqs in reqs.iteritems():
diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py
index bfc3adeb4..db1ad694c 100644
--- a/gui/chromeTabs.py
+++ b/gui/chromeTabs.py
@@ -25,7 +25,8 @@ import gui.utils.fonts as fonts
from gui.bitmapLoader import BitmapLoader
import gui.utils.fonts as fonts
-import service
+from service.fit import Fit
+
_PageChanging, EVT_NOTEBOOK_PAGE_CHANGING = 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.startDrag = False
self.dragging = False
- self.sFit = service.Fit.getInstance()
+ self.sFit = Fit.getInstance()
self.inclination = 7
if canAdd:
diff --git a/gui/commandView.py b/gui/commandView.py
index 5971e537c..ad262b6bf 100644
--- a/gui/commandView.py
+++ b/gui/commandView.py
@@ -20,11 +20,13 @@
import wx
import gui.display as d
import gui.globalEvents as GE
-import service
+
import gui.droneView
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
import eos.types
+from service.fit import Fit
+from service.market import Market
class DummyItem:
@@ -88,7 +90,7 @@ class CommandView(d.Display):
keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
row = self.GetFirstSelected()
if row != -1:
sFit.removeCommand(fitID, self.get(row))
@@ -99,7 +101,7 @@ class CommandView(d.Display):
if type == "fit":
activeFit = self.mainFrame.getActiveFit()
if activeFit:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
draggedFit = sFit.getFit(fitID)
sFit.addCommandFit(activeFit, draggedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -118,7 +120,7 @@ class CommandView(d.Display):
return fit.name
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -168,7 +170,7 @@ class CommandView(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleCommandFit(fitID, item)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -183,7 +185,7 @@ class CommandView(d.Display):
if sel != -1:
item = self.get(sel)
if item is None: return
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
fitSrcContext = "commandFit"
fitItemContext = item.name
context = ((fitSrcContext,fitItemContext),)
@@ -204,6 +206,6 @@ class CommandView(d.Display):
col = self.getColumn(event.Position)
if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeCommand(fitID, self.get(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/crestFittings.py b/gui/crestFittings.py
index 0b2cf54cf..d51693a59 100644
--- a/gui/crestFittings.py
+++ b/gui/crestFittings.py
@@ -4,7 +4,6 @@ import json
import wx
import requests
-import service
from service.crest import CrestModes
from eos.types import Cargo
@@ -23,7 +22,7 @@ class CrestFittings(wx.Frame):
self.mainFrame = parent
mainSizer = wx.BoxSizer(wx.VERTICAL)
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
characterSelectSizer = wx.BoxSizer( wx.HORIZONTAL )
@@ -90,7 +89,7 @@ class CrestFittings(wx.Frame):
event.Skip()
def updateCharList(self):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters()
if len(chars) == 0:
@@ -123,7 +122,7 @@ class CrestFittings(wx.Frame):
event.Skip()
def getActiveCharacter(self):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID
@@ -132,7 +131,7 @@ class CrestFittings(wx.Frame):
return self.charChoice.GetClientData(selection) if selection is not None else None
def fetchFittings(self, event):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
try:
waitDialog = wx.BusyInfo("Fetching fits, please wait...", parent=self)
fittings = sCrest.getFittings(self.getActiveCharacter())
@@ -150,12 +149,12 @@ class CrestFittings(wx.Frame):
if not selection:
return
data = self.fitTree.fittingsTreeCtrl.GetPyData(selection)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fits = sFit.importFitFromBuffer(data)
self.mainFrame._openAfterImport(fits)
def deleteFitting(self, event):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
selection = self.fitView.fitSelection
if not selection:
return
@@ -180,7 +179,7 @@ class ExportToEve(wx.Frame):
self.mainFrame = parent
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
mainSizer = wx.BoxSizer(wx.VERTICAL)
hSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -217,7 +216,7 @@ class ExportToEve(wx.Frame):
self.Centre(wx.BOTH)
def updateCharList(self):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters()
if len(chars) == 0:
@@ -245,7 +244,7 @@ class ExportToEve(wx.Frame):
event.Skip()
def getActiveCharacter(self):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID
@@ -254,7 +253,7 @@ class ExportToEve(wx.Frame):
return self.charChoice.GetClientData(selection) if selection is not None else None
def exportFitting(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
self.statusbar.SetStatusText("", 0)
@@ -264,7 +263,7 @@ class ExportToEve(wx.Frame):
return
self.statusbar.SetStatusText("Sending request and awaiting response", 1)
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
try:
data = sFit.exportCrest(fitID)
@@ -321,7 +320,7 @@ class CrestMgmt(wx.Dialog):
event.Skip()
def popCharList(self):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
chars = sCrest.getCrestCharacters()
self.lcCharacters.DeleteAllItems()
@@ -335,7 +334,7 @@ class CrestMgmt(wx.Dialog):
self.lcCharacters.SetColumnWidth(1, wx.LIST_AUTOSIZE)
def addChar(self, event):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
uri = sCrest.startServer()
webbrowser.open(uri)
@@ -343,7 +342,7 @@ class CrestMgmt(wx.Dialog):
item = self.lcCharacters.GetFirstSelected()
if item > -1:
charID = self.lcCharacters.GetItemData(item)
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
sCrest.delCrestCharacter(charID)
self.popCharList()
diff --git a/gui/droneView.py b/gui/droneView.py
index 531c28d05..89dbc4dd4 100644
--- a/gui/droneView.py
+++ b/gui/droneView.py
@@ -19,12 +19,13 @@
import wx
-import service
import gui.globalEvents as GE
import gui.marketBrowser as mb
import gui.display as d
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
+from service.fit import Fit
+from service.market import Market
class DroneViewDrop(wx.PyDropTarget):
def __init__(self, dropFn):
@@ -141,7 +142,7 @@ class DroneView(d.Display):
wx.PostEvent(self.mainFrame, mb.ItemSelected(itemID=int(data[1])))
def _merge(self, src, dst):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
if sFit.mergeDrones(fitID, self.drones[src], self.drones[dst]):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -151,7 +152,7 @@ class DroneView(d.Display):
'Fighter Bombers', 'Combat Utility Drones',
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones')
def droneKey(self, drone):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
groupName = sMkt.getMarketGroupByItem(drone.item).name
@@ -159,7 +160,7 @@ class DroneView(d.Display):
drone.item.name)
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -193,7 +194,7 @@ class DroneView(d.Display):
def addItem(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -218,7 +219,7 @@ class DroneView(d.Display):
def removeDrone(self, drone):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeDrone(fitID, self.original.index(drone))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -229,7 +230,7 @@ class DroneView(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
drone = self.drones[row]
sFit.toggleDrone(fitID, self.original.index(drone))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -244,7 +245,7 @@ class DroneView(d.Display):
if sel != -1:
drone = self.drones[sel]
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sourceContext = "droneItem"
itemContext = sMkt.getCategoryByItem(drone.item).name
menu = ContextMenu.getMenu((drone,), (sourceContext, itemContext))
diff --git a/gui/fighterView.py b/gui/fighterView.py
index b4468c94f..63e7b3b22 100644
--- a/gui/fighterView.py
+++ b/gui/fighterView.py
@@ -19,7 +19,6 @@
import wx
-import service
import gui.globalEvents as GE
import gui.marketBrowser as mb
import gui.mainFrame
@@ -27,6 +26,7 @@ import gui.display as d
from gui.builtinViewColumns.state import State
from eos.types import Slot
from gui.contextMenu import ContextMenu
+from service.fit import Fit
class FighterViewDrop(wx.PyDropTarget):
def __init__(self, dropFn):
@@ -81,7 +81,7 @@ class FighterView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID)
@@ -215,7 +215,7 @@ class FighterDisplay(d.Display):
'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones',
'Light Fighters', 'Heavy Fighters', 'Support Fighters')
def droneKey(self, drone):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
groupName = sMkt.getMarketGroupByItem(drone.item).name
print groupName
@@ -224,7 +224,7 @@ class FighterDisplay(d.Display):
'''
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit)
@@ -259,7 +259,7 @@ class FighterDisplay(d.Display):
def addItem(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
trigger = sFit.addFighter(fitID, event.itemID)
if trigger:
@@ -278,7 +278,7 @@ class FighterDisplay(d.Display):
def removeFighter(self, fighter):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeFighter(fitID, self.original.index(fighter))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -289,7 +289,7 @@ class FighterDisplay(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fighter = self.fighters[row]
sFit.toggleFighter(fitID, self.original.index(fighter))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -304,7 +304,7 @@ class FighterDisplay(d.Display):
if sel != -1:
fighter = self.fighters[sel]
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sourceContext = "fighterItem"
itemContext = sMkt.getCategoryByItem(fighter.item).name
menu = ContextMenu.getMenu((fighter,), (sourceContext, itemContext))
diff --git a/gui/gangView.py b/gui/gangView.py
index 106f14f98..57f7cffa0 100644
--- a/gui/gangView.py
+++ b/gui/gangView.py
@@ -19,11 +19,16 @@
import wx
from wx.lib.scrolledpanel import ScrolledPanel
-import service
import gui.mainFrame
import gui.shipBrowser
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
class GangView ( ScrolledPanel ):
@@ -157,14 +162,14 @@ class GangView ( ScrolledPanel ):
event.Skip()
return
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
- fleetSrv = service.Fleet.getInstance()
+ fleetSrv = Fleet.getInstance()
activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID)
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
charList = sChar.getCharacterList()
if activeFitID:
@@ -211,11 +216,11 @@ class GangView ( ScrolledPanel ):
for id in self.fleet:
if location == self.fleet[id]['stText']: type = id
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
boostee = sFit.getFit(activeFitID)
booster = None
- fleetSrv = service.Fleet.getInstance()
+ fleetSrv = Fleet.getInstance()
if type == 0: fleetSrv.setLinearFleetCom(boostee, booster)
if type == 1: fleetSrv.setLinearWingCom(boostee, booster)
@@ -231,7 +236,7 @@ class GangView ( ScrolledPanel ):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID))
def fitRenamed(self, event):
- fleetSrv = service.Fleet.getInstance()
+ fleetSrv = Fleet.getInstance()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID:
@@ -241,10 +246,10 @@ class GangView ( ScrolledPanel ):
def fitSelected(self, event):
''' 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()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID or activeFitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -291,12 +296,12 @@ class GangView ( ScrolledPanel ):
activeFitID = self.mainFrame.getActiveFit()
if activeFitID:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
boostee = sFit.getFit(activeFitID)
booster = sFit.getFit(fitID)
- fleetSrv = service.Fleet.getInstance()
+ fleetSrv = Fleet.getInstance()
if type == 0: fleetSrv.setLinearFleetCom(boostee, booster)
if type == 1: fleetSrv.setLinearWingCom(boostee, booster)
@@ -306,8 +311,8 @@ class GangView ( ScrolledPanel ):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFitID))
def RefreshBoosterFits(self, event = None):
- sFit = service.Fit.getInstance()
- sMkt = service.Market.getInstance()
+ sFit = Fit.getInstance()
+ sMkt = Market.getInstance()
fitList = sFit.getBoosterFits()
for id in self.fleet:
@@ -336,7 +341,7 @@ class GangView ( ScrolledPanel ):
choice.SetSelection(0)
def RefreshCharacterList(self, event = None):
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
charList = sChar.getCharacterList()
for id in self.fleet:
choice = self.fleet[id]['chChar']
@@ -365,7 +370,7 @@ class GangView ( ScrolledPanel ):
#Those are drags coming from pyfa sources, NOT builtin wx drags
self.draggedFitID = None
if type == "fit":
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
if fit and not fit.isStructure:
@@ -384,7 +389,7 @@ class GangView ( ScrolledPanel ):
type = self.options.index(menuItem.GetText())
if self.draggedFitID:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
draggedFit = sFit.getFit(self.draggedFitID)
self.AddCommander(draggedFit.ID, type)
@@ -392,7 +397,7 @@ class GangView ( ScrolledPanel ):
def OnFitChoiceSelected(self, event):
''' Fired when booster choice is selected '''
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
# set type via choice box used
chFit = event.GetEventObject()
diff --git a/gui/graphFrame.py b/gui/graphFrame.py
index 2cedc84d1..fb3480b33 100644
--- a/gui/graphFrame.py
+++ b/gui/graphFrame.py
@@ -24,8 +24,8 @@ import gui.display
import gui.globalEvents as GE
from gui.graph import Graph
-import service
import gui.mainFrame
+from service.fit import Fit
enabled = True
mplImported = False
@@ -78,7 +78,7 @@ class GraphFrame(wx.Frame):
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.mainSizer)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
self.fits = [fit] if fit is not None else []
self.fitList = FitList(self)
@@ -242,7 +242,7 @@ class GraphFrame(wx.Frame):
self.draw()
def AppendFitToList(self, fitID):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit not in self.fits:
self.fits.append(fit)
diff --git a/gui/implantView.py b/gui/implantView.py
index 15da4d097..85991cf24 100644
--- a/gui/implantView.py
+++ b/gui/implantView.py
@@ -18,7 +18,6 @@
#===============================================================================
import wx
-import service
import gui.display as d
import gui.marketBrowser as mb
import gui.mainFrame
@@ -26,6 +25,7 @@ from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
import globalEvents as GE
from eos.types import ImplantLocation
+from service.fit import Fit
class ImplantView(wx.Panel):
@@ -56,7 +56,7 @@ class ImplantView(wx.Panel):
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
activeFitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(activeFitID)
if fit:
@@ -70,7 +70,7 @@ class ImplantView(wx.Panel):
def OnRadioSelect(self, event):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleImplantSource(fitID, ImplantLocation.FIT if self.rbFit.GetValue() else ImplantLocation.CHARACTER)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -107,7 +107,7 @@ class ImplantDisplay(d.Display):
event.Skip()
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit or fit.isStructure)
@@ -137,7 +137,7 @@ class ImplantDisplay(d.Display):
event.Skip()
def addItem(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
@@ -161,7 +161,7 @@ class ImplantDisplay(d.Display):
def removeImplant(self, implant):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeImplant(fitID, self.original.index(implant))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -172,7 +172,7 @@ class ImplantDisplay(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleImplant(fitID, row)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -185,7 +185,7 @@ class ImplantDisplay(d.Display):
sel = self.GetFirstSelected()
menu = None
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
if not fit:
@@ -194,7 +194,7 @@ class ImplantDisplay(d.Display):
if sel != -1:
implant = fit.appliedImplants[sel]
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sourceContext = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar"
itemContext = sMkt.getCategoryByItem(implant.item).name
diff --git a/gui/itemStats.py b/gui/itemStats.py
index 35fb48355..4942c67d6 100644
--- a/gui/itemStats.py
+++ b/gui/itemStats.py
@@ -26,11 +26,12 @@ import wx.lib.mixins.listctrl as listmix
import wx.html
from eos.types import Fit, Ship, Citadel, Module, Skill, Booster, Implant, Drone, Mode, Fighter
from gui.utils.numberFormatter import formatAmount
-import service
import config
from gui.contextMenu import ContextMenu
from gui.utils.numberFormatter import formatAmount
import csv
+from service.market import Market
+from service.attribute import Attribute
try:
from collections import OrderedDict
@@ -72,7 +73,7 @@ class ItemStatsDialog(wx.Dialog):
itmContext = None
item = getattr(victim, "item", None) if srcContext.lower() not in ("projectedcharge", "fittingcharge") else getattr(victim, "charge", None)
if item is None:
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
item = sMkt.getItem(victim.ID)
victim = None
self.context = itmContext
@@ -152,7 +153,7 @@ class ItemStatsContainer ( wx.Panel ):
def __init__( self, parent, stuff, item, context = None):
wx.Panel.__init__ ( self, parent )
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -494,15 +495,15 @@ class ItemParams (wx.Panel):
def TranslateValueUnit(self, value, unitName, unitDisplayName):
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)
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)
def attributeIDCallback():
- attribute = service.Attribute.getInstance().getAttributeInfo(value)
+ attribute = Attribute.getInstance().getAttributeInfo(value)
return "%s (%d)" % (attribute.name.capitalize(), value)
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.SetColumnWidth(len(self.attrs)+1, 60)
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sMkt.getPrices([x.ID for x in self.items], self.processPrices)
for item in self.items:
@@ -687,15 +688,15 @@ class ItemCompare(wx.Panel):
def TranslateValueUnit(self, value, unitName, unitDisplayName):
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)
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)
def attributeIDCallback():
- attribute = service.Attribute.getInstance().getAttributeInfo(value)
+ attribute = Attribute.getInstance().getAttributeInfo(value)
return "%s (%d)" % (attribute.name.capitalize(), value)
trans = {"Inverse Absolute Percent": (lambda: (1 - value) * 100, unitName),
diff --git a/gui/mainFrame.py b/gui/mainFrame.py
index 49fb9385a..480d50681 100644
--- a/gui/mainFrame.py
+++ b/gui/mainFrame.py
@@ -29,7 +29,6 @@ from codecs import open
from wx._core import PyDeadObjectError
from wx.lib.wordwrap import wordwrap
-import service
import config
import threading
import webbrowser
@@ -58,6 +57,13 @@ from gui.utils.clipboard import toClipboard, fromClipboard
from gui.fleetBrowser import FleetBrowser
from gui.updateDialog import UpdateDialog
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
from eos.modifiedAttributeDict import ModifiedAttributeDict
@@ -208,7 +214,7 @@ class MainFrame(wx.Frame):
self.LoadPreviousOpenFits()
#Check for updates
- self.sUpdate = service.Update.getInstance()
+ self.sUpdate = Update.getInstance()
self.sUpdate.CheckUpdate(self.ShowUpdateBox)
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()
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']
# Remove any fits that cause exception when fetching (non-existent fits)
@@ -245,7 +251,7 @@ class MainFrame(wx.Frame):
def LoadMainFrameAttribs(self):
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"]:
width = mainFrameDefaultAttribs["wnd_width"]
@@ -319,7 +325,7 @@ class MainFrame(wx.Frame):
self.prevOpenFits['pyfaOpenFits'].append(m())
# save all teh settingz
- service.SettingsProvider.getInstance().saveAll()
+ SettingsProvider.getInstance().saveAll()
event.Skip()
def ExitApp(self, event):
@@ -372,7 +378,7 @@ class MainFrame(wx.Frame):
def showExportDialog(self, event):
""" Export active fit """
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.getActiveFit())
defaultFile = "%s - %s.xml"%(fit.ship.item.name, fit.name) if fit else None
@@ -540,7 +546,7 @@ class MainFrame(wx.Frame):
dlg.Show()
def updateTitle(self, event):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
char = sCrest.implicitCharacter
if char:
t = time.gmtime(char.eve.expires-time.time())
@@ -575,7 +581,7 @@ class MainFrame(wx.Frame):
self.SetTitle(self.title)
menu = self.GetMenuBar()
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
if type == CrestModes.IMPLICIT:
menu.SetLabel(menu.ssoLoginId, "Login to EVE")
@@ -588,7 +594,7 @@ class MainFrame(wx.Frame):
menu.Enable(menu.exportToEveId, not enable)
def ssoHandler(self, event):
- sCrest = service.Crest.getInstance()
+ sCrest = Crest.getInstance()
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
if sCrest.implicitCharacter is not None:
sCrest.logout()
@@ -610,7 +616,7 @@ class MainFrame(wx.Frame):
menu.SetLabel(menu.toggleOverridesId, "Turn Overrides Off" if ModifiedAttributeDict.OVERRIDES else "Turn Overrides On")
def saveChar(self, event):
- sChr = service.Character.getInstance()
+ sChr = Character.getInstance()
charID = self.charSelection.getActiveCharacter()
sChr.saveCharacter(charID)
wx.PostEvent(self, GE.CharListUpdated())
@@ -621,7 +627,7 @@ class MainFrame(wx.Frame):
dlg.ShowModal()
def revertChar(self, event):
- sChr = service.Character.getInstance()
+ sChr = Character.getInstance()
charID = self.charSelection.getActiveCharacter()
sChr.revertCharacter(charID)
wx.PostEvent(self, GE.CharListUpdated())
@@ -659,31 +665,31 @@ class MainFrame(wx.Frame):
self.marketBrowser.search.Focus()
def clipboardEft(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportFit(self.getActiveFit()))
def clipboardEftImps(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportEftImps(self.getActiveFit()))
def clipboardDna(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportDna(self.getActiveFit()))
def clipboardCrest(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportCrest(self.getActiveFit()))
def clipboardXml(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportXml(None, self.getActiveFit()))
def clipboardMultiBuy(self):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
toClipboard(sFit.exportMultiBuy(self.getActiveFit()))
def importFromClipboard(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
try:
fits = sFit.importFitFromBuffer(fromClipboard(), self.getActiveFit())
except:
@@ -709,7 +715,7 @@ class MainFrame(wx.Frame):
def exportSkillsNeeded(self, event):
""" Exports skills needed for active fit and active character """
- sCharacter = service.Character.getInstance()
+ sCharacter = Character.getInstance()
saveDialog = wx.FileDialog(self, "Export Skills Needed As...",
wildcard = "EVEMon skills training file (*.emp)|*.emp|" \
"EVEMon skills training XML file (*.xml)|*.xml|" \
@@ -737,7 +743,7 @@ class MainFrame(wx.Frame):
def fileImportDialog(self, event):
"""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",
wildcard = "EVE XML fitting files (*.xml)|*.xml|" \
"EFT text fitting files (*.cfg)|*.cfg|" \
@@ -767,7 +773,7 @@ class MainFrame(wx.Frame):
if '.' not in os.path.basename(filePath):
filePath += ".xml"
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
max = sFit.countAllFits()
self.progressDialog = wx.ProgressDialog("Backup fits",
@@ -779,7 +785,7 @@ class MainFrame(wx.Frame):
def exportHtml(self, event):
from gui.utils.exportHtml import exportHtml
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
settings = service.settings.HTMLExportSettings.getInstance()
max = sFit.countAllFits()
@@ -865,7 +871,7 @@ class MainFrame(wx.Frame):
if dlg.ShowModal() == wx.ID_OK:
self.waitDialog = wx.BusyInfo("Importing Character...")
- sCharacter = service.Character.getInstance()
+ sCharacter = Character.getInstance()
sCharacter.importCharacter(dlg.GetPaths(), self.importCharacterCallback)
def importCharacterCallback(self):
@@ -878,7 +884,8 @@ class MainFrame(wx.Frame):
def openGraphFrame(self, event):
if not self.graphFrame:
self.graphFrame = GraphFrame(self)
- if gui.graphFrame.enabled:
+
+ if graphFrame.enabled:
self.graphFrame.Show()
else:
self.graphFrame.SetFocus()
diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py
index 287866909..88cc6de2e 100644
--- a/gui/mainMenuBar.py
+++ b/gui/mainMenuBar.py
@@ -23,7 +23,8 @@ from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
import gui.graphFrame
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)):
from service.crest import CrestModes
@@ -120,7 +121,7 @@ class MainMenuBar(wx.MenuBar):
windowMenu.AppendItem(preferencesItem)
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
crestMenu = wx.Menu()
@@ -164,7 +165,7 @@ class MainMenuBar(wx.MenuBar):
self.Enable(wx.ID_COPY, enable)
self.Enable(self.exportSkillsNeededId, enable)
- sChar = service.Character.getInstance()
+ sChar = Character.getInstance()
charID = self.mainFrame.charSelection.getActiveCharacter()
char = sChar.getCharacter(charID)
diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py
index 14dea666c..a06b89d39 100644
--- a/gui/marketBrowser.py
+++ b/gui/marketBrowser.py
@@ -18,11 +18,12 @@
#===============================================================================
import wx
-import service
import gui.display as d
from gui.cachingImageList import CachingImageList
from gui.contextMenu import ContextMenu
import gui.PFSearchBox as SBox
+from service.market import Market
+from service.attribute import Attribute
from gui.bitmapLoader import BitmapLoader
@@ -45,7 +46,7 @@ class MarketBrowser(wx.Panel):
vbox.Add(self.splitter, 1, wx.EXPAND)
# Grab market service instance and create child objects
- self.sMkt = service.Market.getInstance()
+ self.sMkt = Market.getInstance()
self.searchMode = False
self.marketView = MarketTree(self.splitter, self)
self.itemView = ItemView(self.splitter, self)
@@ -416,7 +417,7 @@ class ItemView(d.Display):
def populate(self, items):
if len(items) > 0:
# Get dictionary with meta level attribute
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMkt
self.metalvls = sMkt.directAttrRequest(items, attrs)
@@ -432,7 +433,7 @@ class ItemView(d.Display):
def refresh(self, items):
if len(items) > 1:
# Get dictionary with meta level attribute
- sAttr = service.Attribute.getInstance()
+ sAttr = Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMkt
self.metalvls = sMkt.directAttrRequest(items, attrs)
diff --git a/gui/notesView.py b/gui/notesView.py
index efa933bb9..c8f648440 100644
--- a/gui/notesView.py
+++ b/gui/notesView.py
@@ -1,8 +1,10 @@
import wx
-import service
+
import gui.globalEvents as GE
import gui.mainFrame
+from service.fit import Fit
+
class NotesView(wx.Panel):
def __init__(self, parent):
@@ -19,7 +21,7 @@ class NotesView(wx.Panel):
self.Bind(wx.EVT_TIMER, self.delayedSave, self.saveTimer)
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -38,7 +40,7 @@ class NotesView(wx.Panel):
self.saveTimer.Start(1000, True)
def delayedSave(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.lastFitId)
newNotes = self.editNotes.GetValue()
fit.notes = newNotes
diff --git a/gui/patternEditor.py b/gui/patternEditor.py
index 171eed7a5..cbfb11207 100644
--- a/gui/patternEditor.py
+++ b/gui/patternEditor.py
@@ -19,11 +19,11 @@
import wx
from gui.bitmapLoader import BitmapLoader
-import service
from wx.lib.intctrl import IntCtrl
from gui.utils.clipboard import toClipboard, fromClipboard
from service.damagePattern import ImportError
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
+from service.damagePattern import DamagePattern, ImportError
###########################################################################
## Class DmgPatternEditorDlg
###########################################################################
@@ -59,26 +59,26 @@ class DmgPatternEntityEditor(EntityEditor):
self.SetEditorValidator(DmgPatternTextValidor)
def getEntitiesFromContext(self):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
choices = sorted(sDP.getDamagePatternList(), key=lambda p: p.name)
return [c for c in choices if c.name != "Selected Ammo"]
def DoNew(self, name):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
return sDP.newPattern(name)
def DoRename(self, entity, name):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
sDP.renamePattern(entity, name)
def DoCopy(self, entity, name):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
copy = sDP.copyPattern(entity)
sDP.renamePattern(copy, name)
return copy
def DoDelete(self, entity):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
sDP.deletePattern(entity)
class DmgPatternEditorDlg(wx.Dialog):
@@ -208,7 +208,7 @@ class DmgPatternEditorDlg(wx.Dialog):
if event is not None:
event.Skip()
- service.DamagePattern.getInstance().saveChanges(p)
+ DamagePattern.getInstance().saveChanges(p)
def restrict(self):
for type in self.DAMAGE_TYPES:
@@ -251,11 +251,11 @@ class DmgPatternEditorDlg(wx.Dialog):
def importPatterns(self, event):
text = fromClipboard()
if text:
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
try:
sDP.importPatterns(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard")
- except service.damagePattern.ImportError, e:
+ except ImportError, e:
self.stNotice.SetLabel(str(e))
except Exception, e:
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")
def exportPatterns(self, event):
- sDP = service.DamagePattern.getInstance()
+ sDP = DamagePattern.getInstance()
toClipboard( sDP.exportPatterns() )
self.stNotice.SetLabel("Patterns exported to clipboard")
diff --git a/gui/projectedView.py b/gui/projectedView.py
index f805ead1c..cccf301af 100644
--- a/gui/projectedView.py
+++ b/gui/projectedView.py
@@ -20,11 +20,11 @@
import wx
import gui.display as d
import gui.globalEvents as GE
-import service
import gui.droneView
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
import eos.types
+from service.fit import Fit
class DummyItem:
@@ -91,7 +91,7 @@ class ProjectedView(d.Display):
# if source is coming from projected, we are trying to combine drones.
self.mergeDrones(x, y, int(data[1]))
elif data[0] == "market":
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.project(fitID, int(data[1]))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
@@ -100,7 +100,7 @@ class ProjectedView(d.Display):
keycode = event.GetKeyCode()
if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE:
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
row = self.GetFirstSelected()
if row != -1:
sFit.removeProjected(fitID, self.get(row))
@@ -111,7 +111,7 @@ class ProjectedView(d.Display):
if type == "fit":
activeFit = self.mainFrame.getActiveFit()
if activeFit:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
draggedFit = sFit.getFit(fitID)
sFit.project(activeFit, draggedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -135,7 +135,7 @@ class ProjectedView(d.Display):
def _merge(self, src, dst):
dstDrone = self.get(dst)
if isinstance(dstDrone, eos.types.Drone):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
if sFit.mergeDrones(fitID, self.get(src), dstDrone, True):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -159,7 +159,7 @@ class ProjectedView(d.Display):
return fit.name
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
@@ -231,7 +231,7 @@ class ProjectedView(d.Display):
col = self.getColumn(event.Position)
if col == self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left")
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
@@ -246,7 +246,7 @@ class ProjectedView(d.Display):
if sel != -1:
item = self.get(sel)
if item is None: return
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
if isinstance(item, eos.types.Drone):
srcContext = "projectedDrone"
itemContext = sMkt.getCategoryByItem(item.item).name
@@ -287,6 +287,6 @@ class ProjectedView(d.Display):
col = self.getColumn(event.Position)
if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.removeProjected(fitID, self.get(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
diff --git a/gui/propertyEditor.py b/gui/propertyEditor.py
index 48c2689cd..018edb579 100644
--- a/gui/propertyEditor.py
+++ b/gui/propertyEditor.py
@@ -13,12 +13,13 @@ from gui.marketBrowser import SearchBox
import gui.display as d
import gui.globalEvents as GE
from gui.bitmapLoader import BitmapLoader
-import service
import csv
import eos.db
import logging
+from service.market import Market
+
logger = logging.getLogger(__name__)
class AttributeEditor( wx.Frame ):
@@ -108,7 +109,7 @@ class AttributeEditor( wx.Frame ):
self.itemView.updateItems(True)
def OnExport(self, event):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
items = sMkt.getItemsWithOverrides()
defaultFile = "pyfa_overrides.csv"
@@ -131,7 +132,7 @@ class AttributeEditor( wx.Frame ):
"Confirm Delete", wx.YES | wx.NO | wx.ICON_EXCLAMATION)
if dlg.ShowModal() == wx.ID_YES:
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
items = sMkt.getItemsWithOverrides()
# We can't just delete overrides, as loaded items will still have
# them assigned. Deleting them from the database won't propagate
@@ -152,7 +153,7 @@ class ItemView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent)
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
self.things = sMkt.getItemsWithOverrides()
self.items = self.things
@@ -173,14 +174,14 @@ class ItemView(d.Display):
self.update(self.items)
def updateItems(self, updateDisplay=False):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
self.things = sMkt.getItemsWithOverrides()
self.items = self.things
if updateDisplay:
self.update(self.things)
def scheduleSearch(self, event=None):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
search = self.searchBox.GetLineText(0)
# Make sure we do not count wildcard as search symbol
diff --git a/gui/resistsEditor.py b/gui/resistsEditor.py
index 37d04b032..f28d370b1 100644
--- a/gui/resistsEditor.py
+++ b/gui/resistsEditor.py
@@ -19,10 +19,10 @@
import wx
from gui.bitmapLoader import BitmapLoader
-import service
from gui.utils.clipboard import toClipboard, fromClipboard
from service.targetResists import ImportError
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
+from service.targetResists import TargetResists
class TargetResistsTextValidor(BaseValidator):
@@ -56,26 +56,26 @@ class TargetResistsEntityEditor(EntityEditor):
self.SetEditorValidator(TargetResistsTextValidor)
def getEntitiesFromContext(self):
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
choices = sorted(sTR.getTargetResistsList(), key=lambda p: p.name)
return choices
def DoNew(self, name):
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
return sTR.newPattern(name)
def DoRename(self, entity, name):
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
sTR.renamePattern(entity, name)
def DoCopy(self, entity, name):
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
copy = sTR.copyPattern(entity)
sTR.renamePattern(copy, name)
return copy
def DoDelete(self, entity):
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
sTR.deletePattern(entity)
class ResistsEditorDlg(wx.Dialog):
@@ -224,7 +224,7 @@ class ResistsEditorDlg(wx.Dialog):
if event is not None:
event.Skip()
- service.TargetResists.getInstance().saveChanges(p)
+ TargetResists.getInstance().saveChanges(p)
except ValueError:
editObj.SetForegroundColour(wx.RED)
@@ -264,7 +264,7 @@ class ResistsEditorDlg(wx.Dialog):
text = fromClipboard()
if text:
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
try:
sTR.importPatterns(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard")
@@ -279,6 +279,6 @@ class ResistsEditorDlg(wx.Dialog):
def exportPatterns(self, event):
"Event fired when export to clipboard button is clicked"
- sTR = service.TargetResists.getInstance()
+ sTR = TargetResists.getInstance()
toClipboard( sTR.exportPatterns() )
self.stNotice.SetLabel("Patterns exported to clipboard")
diff --git a/gui/setEditor.py b/gui/setEditor.py
index 84090f6ff..5ddac5f4c 100644
--- a/gui/setEditor.py
+++ b/gui/setEditor.py
@@ -20,11 +20,11 @@
import wx
from gui.bitmapLoader import BitmapLoader
from gui.builtinViews.implantEditor import BaseImplantEditorView
-import service
from gui.utils.clipboard import toClipboard, fromClipboard
from service.implantSet import ImportError
import logging
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
+from service.implantSet import ImplantSets
logger = logging.getLogger(__name__)
@@ -59,25 +59,25 @@ class ImplantSetEntityEditor(EntityEditor):
self.SetEditorValidator(ImplantTextValidor)
def getEntitiesFromContext(self):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
return sorted(sIS.getImplantSetList(), key=lambda c: c.name)
def DoNew(self, name):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
return sIS.newSet(name)
def DoRename(self, entity, name):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
sIS.renameSet(entity, name)
def DoCopy(self, entity, name):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
copy = sIS.copySet(entity)
sIS.renameSet(copy, name)
return copy
def DoDelete(self, entity):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
sIS.deleteSet(entity)
@@ -91,20 +91,20 @@ class ImplantSetEditor(BaseImplantEditorView):
self.Parent.entityEditor.Bind(wx.EVT_CHOICE, self.contextChanged)
def getImplantsFromContext(self):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity()
if set:
return sIS.getImplants(set.ID)
return []
def addImplantToContext(self, item):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity()
sIS.addImplant(set.ID, item.ID)
def removeImplantFromContext(self, implant):
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
set = self.Parent.entityEditor.getActiveEntity()
sIS.removeImplant(set.ID, implant)
@@ -191,7 +191,7 @@ class ImplantSetEditorDlg(wx.Dialog):
text = fromClipboard()
if text:
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
try:
sIS.importSets(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard")
@@ -209,6 +209,6 @@ class ImplantSetEditorDlg(wx.Dialog):
def exportPatterns(self, event):
"Event fired when export to clipboard button is clicked"
- sIS = service.ImplantSets.getInstance()
+ sIS = ImplantSets.getInstance()
toClipboard(sIS.exportSets())
self.stNotice.SetLabel("Sets exported to clipboard")
diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py
index e1271b616..95e84b86a 100644
--- a/gui/shipBrowser.py
+++ b/gui/shipBrowser.py
@@ -19,7 +19,8 @@ import gui.sfBrowserItem as SFItem
from gui.contextMenu import ContextMenu
import gui.utils.fonts as fonts
-import service
+from service.fit import Fit
+from service.market import Market
import gui.utils.fonts as fonts
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
@@ -437,7 +438,7 @@ class NavigationPanel(SFItem.SFBrowserItem):
if stage == 3:
shipID = self.Parent.GetStageData(stage)
shipName = self.Parent.GetStage3ShipName()
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = sFit.newFit(shipID, "%s fit" %shipName)
self.shipBrowser.fitIDMustEditName = fitID
wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID))
@@ -671,8 +672,8 @@ class ShipBrowser(wx.Panel):
self.navpanel.ShowNewFitButton(False)
self.navpanel.ShowSwitchEmptyGroupsButton(False)
- sMkt = service.Market.getInstance()
- sFit = service.Fit.getInstance()
+ sMkt = Market.getInstance()
+ sFit = Fit.getInstance()
self.lpane.ShowLoading(False)
self.lpane.Freeze()
@@ -718,7 +719,7 @@ class ShipBrowser(wx.Panel):
categoryID = self._stage2Data
ships = list(data[1])
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
ships.sort(key=self.raceNameKey)
racesList = []
@@ -789,7 +790,7 @@ class ShipBrowser(wx.Panel):
self.lpane.RemoveAllChildren()
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
sMkt.getShipListDelayed(categoryID, self.stage2Callback)
self._stage2Data = categoryID
@@ -819,8 +820,8 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage
self._activeStage = 3
- sFit = service.Fit.getInstance()
- sMkt = service.Market.getInstance()
+ sFit = Fit.getInstance()
+ sMkt = Market.getInstance()
ship = sMkt.getItem(shipID)
categoryID = ship.group.ID
@@ -875,8 +876,8 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage
self._activeStage = 4
- sMkt = service.Market.getInstance()
- sFit = service.Fit.getInstance()
+ sMkt = Market.getInstance()
+ sFit = Fit.getInstance()
query = event.text
self.lpane.Freeze()
@@ -1162,7 +1163,7 @@ class ShipItem(SFItem.SFBrowserItem):
self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)
- self.marketInstance = service.Market.getInstance()
+ self.marketInstance = Market.getInstance()
self.baseItem = self.marketInstance.getItem(self.shipID)
#=======================================================================\
@@ -1249,7 +1250,7 @@ class ShipItem(SFItem.SFBrowserItem):
def createNewFit(self, event=None):
self.tcFitName.Show(False)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = sFit.newFit(self.shipID, self.tcFitName.GetValue())
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)
def OnToggleBooster(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
sFit.toggleBoostFit(self.fitID)
self.fitBooster = not self.fitBooster
self.boosterBtn.Show(self.fitBooster)
@@ -1549,7 +1550,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnProjectToFit(self, event):
activeFit = self.mainFrame.getActiveFit()
if activeFit:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
projectedFit = sFit.getFit(self.fitID)
sFit.project(activeFit, projectedFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -1558,7 +1559,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnAddCommandFit(self, event):
activeFit = self.mainFrame.getActiveFit()
if activeFit:
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
commandFit = sFit.getFit(self.fitID)
sFit.addCommandFit(activeFit, commandFit)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit))
@@ -1576,7 +1577,7 @@ class FitItem(SFItem.SFBrowserItem):
def OnContextMenu(self, event):
''' Handles context menu for fit. Dragging is handled by MouseLeftUp() '''
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.mainFrame.getActiveFit())
if not fit:
@@ -1666,7 +1667,7 @@ class FitItem(SFItem.SFBrowserItem):
self.copyFit()
def copyFit(self, event=None):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fitID = sFit.copyFit(self.fitID)
self.shipBrowser.fitIDMustEditName = fitID
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID))
@@ -1686,7 +1687,7 @@ class FitItem(SFItem.SFBrowserItem):
self.Refresh()
def renameFit(self, event=None):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
self.tcFitName.Show(False)
self.editWasShown = 0
fitName = self.tcFitName.GetValue()
@@ -1720,7 +1721,7 @@ class FitItem(SFItem.SFBrowserItem):
else:
self.deleted = True
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(self.fitID)
sFit.deleteFit(self.fitID)
diff --git a/gui/statsPane.py b/gui/statsPane.py
index 6c378878c..0b0b27413 100644
--- a/gui/statsPane.py
+++ b/gui/statsPane.py
@@ -19,7 +19,7 @@
import wx
from gui.statsView import StatsView
-import service
+from service.fit import Fit
from gui.pyfatogglepanel import TogglePanel
import gui.builtinStatsViews
from gui.contextMenu import ContextMenu
@@ -33,7 +33,7 @@ class StatsPane(wx.Panel):
"priceViewFull",]
def fitChanged(self, event):
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
fit = sFit.getFit(event.fitID)
for view in self.views:
view.refreshPanel(fit)
diff --git a/gui/updateDialog.py b/gui/updateDialog.py
index 0febdf3f8..21ccb0197 100644
--- a/gui/updateDialog.py
+++ b/gui/updateDialog.py
@@ -20,7 +20,6 @@
import wx
from gui.bitmapLoader import BitmapLoader
import config
-import service
import dateutil.parser
class UpdateDialog(wx.Dialog):
diff --git a/gui/utils/exportHtml.py b/gui/utils/exportHtml.py
index 9fc20eff6..432dae740 100644
--- a/gui/utils/exportHtml.py
+++ b/gui/utils/exportHtml.py
@@ -1,7 +1,9 @@
import threading
import time
-import service
import wx
+from service.settings import HTMLExportSettings
+from service.fit import Fit
+from service.market import Market
class exportHtml():
_instance = None
@@ -16,7 +18,7 @@ class exportHtml():
self.thread = exportHtmlThread()
def refreshFittingHtml(self, force=False, callback=False):
- settings = service.settings.HTMLExportSettings.getInstance()
+ settings = HTMLExportSettings.getInstance()
if force or settings.getEnabled():
self.thread.stop()
@@ -39,9 +41,9 @@ class exportHtmlThread(threading.Thread):
if self.stopRunning:
return
- sMkt = service.Market.getInstance()
- sFit = service.Fit.getInstance()
- settings = service.settings.HTMLExportSettings.getInstance()
+ sMkt = Market.getInstance()
+ sFit = Fit.getInstance()
+ settings = HTMLExportSettings.getInstance()
timestamp = time.localtime(time.time())
localDate = "%d/%02d/%02d %02d:%02d" % (timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4])
diff --git a/service/__init__.py b/service/__init__.py
index b19c6db17..e69de29bb 100644
--- a/service/__init__.py
+++ b/service/__init__.py
@@ -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
diff --git a/service/character.py b/service/character.py
index 802d11092..c6d3ca98e 100644
--- a/service/character.py
+++ b/service/character.py
@@ -20,6 +20,7 @@
import copy
import itertools
import json
+import logging
import threading
from codecs import open
from xml.etree import ElementTree
@@ -28,11 +29,10 @@ import gzip
import wx
+import config
import eos.db
import eos.types
-import service
-import config
-import logging
+from service.eveapi import EVEAPIConnection, ParseXML
logger = logging.getLogger(__name__)
@@ -49,7 +49,7 @@ class CharacterImportThread(threading.Thread):
try:
# we try to parse api XML data first
with open(path, mode='r') as charFile:
- sheet = service.ParseXML(charFile)
+ sheet = ParseXML(charFile)
char = sCharacter.new(sheet.name+" (imported)")
sCharacter.apiUpdateCharSheet(char.ID, sheet.skills)
except:
@@ -87,8 +87,6 @@ class SkillBackupThread(threading.Thread):
def run(self):
path = self.path
sCharacter = Character.getInstance()
- sFit = service.Fit.getInstance()
- fit = sFit.getFit(self.activeFit)
backupData = ""
if self.saveFmt == "xml" or self.saveFmt == "emp":
backupData = sCharacter.exportXml()
@@ -284,7 +282,7 @@ class Character(object):
char.apiID = userID
char.apiKey = apiKey
- api = service.EVEAPIConnection()
+ api = EVEAPIConnection()
auth = api.auth(keyID=userID, vCode=apiKey)
apiResult = auth.account.Characters()
charList = map(lambda c: unicode(c.name), apiResult.characters)
@@ -296,7 +294,7 @@ class Character(object):
dbChar = eos.db.getCharacter(charID)
dbChar.defaultChar = charName
- api = service.EVEAPIConnection()
+ api = EVEAPIConnection()
auth = api.auth(keyID=dbChar.apiID, vCode=dbChar.apiKey)
apiResult = auth.account.Characters()
charID = None
diff --git a/service/conversions/__init__.py b/service/conversions/__init__.py
index c9ee794c3..d8764af8b 100644
--- a/service/conversions/__init__.py
+++ b/service/conversions/__init__.py
@@ -8,6 +8,7 @@ elsewhere (in which case can be accessed with packs[name])
"""
import pkgutil
+import importlib
# init parent dict
all = {}
@@ -15,10 +16,9 @@ all = {}
# init container to store the separate conversion packs in case we need them
packs = {}
-
prefix = __name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix):
- conversionPack = __import__(modname, fromlist="dummy")
+ conversionPack = importlib.import_module(modname)
all.update(conversionPack.CONVERSIONS)
modname_tail = modname.rsplit('.', 1)[-1]
packs[modname_tail] = conversionPack.CONVERSIONS
diff --git a/service/crest.py b/service/crest.py
index b2771242b..edb6af5c5 100644
--- a/service/crest.py
+++ b/service/crest.py
@@ -9,10 +9,10 @@ import time
import eos.db
from eos.enum import Enum
from eos.types import CrestChar
-
-import service
-
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__)
@@ -64,7 +64,7 @@ class Crest():
characters still in the cache (if USER mode)
"""
- self.settings = service.settings.CRESTSettings.getInstance()
+ self.settings = CRESTSettings.getInstance()
self.scopes = ['characterFittingsRead', 'characterFittingsWrite']
# these will be set when needed
@@ -73,7 +73,7 @@ class Crest():
self.ssoTimer = None
# 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')),
api_key=self.settings.get('clientSecret') if self.settings.get('mode') == CrestModes.USER else None,
redirect_uri=self.clientCallback,
@@ -161,7 +161,7 @@ class Crest():
if self.httpd:
self.stopServer()
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,))
self.state = str(uuid.uuid4())
diff --git a/service/damagePattern.py b/service/damagePattern.py
index f617fa846..226bbf47e 100644
--- a/service/damagePattern.py
+++ b/service/damagePattern.py
@@ -17,15 +17,14 @@
# along with pyfa. If not, see .
#===============================================================================
-import eos.db
-import eos.types
import copy
-from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues
+import eos.db
+import eos.types
+
class ImportError(Exception):
- pass
-
+ pass
class DamagePattern():
instance = None
@classmethod
diff --git a/service/eveapi.py b/service/eveapi.py
index 4b19340b0..66c31f625 100644
--- a/service/eveapi.py
+++ b/service/eveapi.py
@@ -166,7 +166,7 @@ from xml.parsers import expat
from time import strptime
from calendar import timegm
-import service
+from service.network import Network
proxy = None
proxySSL = False
@@ -395,7 +395,7 @@ class _RootContext(_Context):
response = None
if response is None:
- network = service.Network.getInstance()
+ network = Network.getInstance()
req = self._scheme+'://'+self._host+path
@@ -414,7 +414,7 @@ class _RootContext(_Context):
# implementor is handling fallbacks...
try:
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)
if response is not None:
return response
diff --git a/service/fit.py b/service/fit.py
index b2bb691ff..16e52ab82 100644
--- a/service/fit.py
+++ b/service/fit.py
@@ -27,16 +27,18 @@ from codecs import open
import xml.parsers.expat
import eos.db
-import eos.types
-
-from eos.types import State, Slot
+from eos.types import State, Slot, Module, Drone, Fighter
+from eos.types import Fit as FitType
from service.market import Market
from service.damagePattern import DamagePattern
from service.character import Character
+from eos.saveddata.character import Character as saveddata_Character
from service.fleet import Fleet
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__)
@@ -90,7 +92,7 @@ class Fit(object):
def __init__(self):
self.pattern = DamagePattern.getInstance().getDamagePattern("Uniform")
self.targetResists = None
- self.character = Character.getInstance().all5()
+ self.character = saveddata_Character.getAll5()
self.booster = False
self.dirtyFitIDs = set()
@@ -107,7 +109,7 @@ class Fit(object):
"showMarketShortcuts": False,
"enableGaugeAnimation": True,
"exportCharges": True,
- "openFitInNew":False
+ "openFitInNew": False
}
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(
@@ -164,7 +166,7 @@ class Fit(object):
ship = eos.types.Ship(eos.db.getItem(shipID))
except ValueError:
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.damagePattern = self.pattern
fit.targetResists = self.targetResists
@@ -343,7 +345,7 @@ class Fit(object):
thing = eos.db.getItem(thing,
eager=("attributes", "group.category"))
- if isinstance(thing, eos.types.Fit):
+ if isinstance(thing, FitType):
if thing in fit.projectedFits:
return
@@ -414,7 +416,7 @@ class Fit(object):
thing.state = self.__getProposedState(thing, click)
if not thing.canHaveState(thing.state, fit):
thing.state = State.OFFLINE
- elif isinstance(thing, eos.types.Fit):
+ elif isinstance(thing, FitType):
projectionInfo = thing.getProjectionInfo(fitID)
if projectionInfo:
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
try:
- cargoP = eos.types.Module(cargo.item)
+ cargoP = Module(cargo.item)
cargoP.owner = fit
if cargoP.isValidState(State.ACTIVE):
cargoP.state = State.ACTIVE
@@ -692,10 +694,10 @@ class Fit(object):
break
'''
if fighter is None:
- fighter = eos.types.Fighter(item)
+ fighter = Fighter(item)
used = fit.getSlotsUsed(fighter.slot)
total = fit.getNumSlots(fighter.slot)
- standardAttackActive = False;
+ standardAttackActive = False
for ability in fighter.abilities:
if (ability.effect.isImplemented and ability.effect.handlerName == u'fighterabilityattackm'):
# Activate "standard attack" if available
@@ -704,7 +706,7 @@ class Fit(object):
else:
# Activate all other abilities (Neut, Web, etc) except propmods if no standard attack is active
if (ability.effect.isImplemented
- and standardAttackActive == False
+ and standardAttackActive is False
and ability.effect.handlerName != u'fighterabilitymicrowarpdrive'
and ability.effect.handlerName != u'fighterabilityevasivemaneuvers'):
ability.active = True
@@ -783,7 +785,7 @@ class Fit(object):
d.amount = amount
d.amountActive = amount if active else 0
- newD = eos.types.Drone(d.item)
+ newD = Drone(d.item)
newD.amount = total - amount
newD.amountActive = newD.amount if active else 0
l.append(newD)
@@ -958,6 +960,8 @@ class Fit(object):
fit.damagePattern = dp
self.recalc(fit)
+ # TODO: port this to port.py
+ '''
def exportFit(self, fitID):
fit = eos.db.getFit(fitID)
return Port.exportEft(fit)
@@ -981,6 +985,7 @@ class Fit(object):
def exportMultiBuy(self, fitID):
fit = eos.db.getFit(fitID)
return Port.exportMultiBuy(fit)
+ '''
def backupFits(self, path, callback):
thread = FitBackupThread(path, callback)
@@ -1056,14 +1061,17 @@ class Fit(object):
if codec_found is None:
return False, "Proper codec could not be established for %s" % path
+ # TODO: port this to port.py
+ '''
try:
_, fitsImport = Port.importAuto(srcString, path, callback=callback, encoding=codec_found)
fits += fitsImport
- except xml.parsers.expat.ExpatError, e:
+ except xml.parsers.expat.ExpatError:
return False, "Malformed XML in %s" % path
- except Exception, e:
+ except Exception:
logger.exception("Unknown exception processing: %s", path)
return False, "Unknown Error while processing %s" % path
+ '''
IDs = []
numFits = len(fits)
@@ -1083,6 +1091,8 @@ class Fit(object):
return True, fits
+ # TODO: port this to port.py
+ '''
def importFitFromBuffer(self, bufferStr, activeFit=None):
_, fits = Port.importAuto(bufferStr, activeFit=activeFit)
for fit in fits:
@@ -1091,6 +1101,7 @@ class Fit(object):
fit.targetResists = self.targetResists
eos.db.save(fit)
return fits
+ '''
def checkStates(self, fit, base):
changed = False
diff --git a/service/fleet.py b/service/fleet.py
index cfad7f04b..68c344189 100644
--- a/service/fleet.py
+++ b/service/fleet.py
@@ -17,9 +17,11 @@
# along with pyfa. If not, see .
#===============================================================================
-import eos.db
-from eos.types import Fleet as Fleet_, Wing, Squad
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):
instance = None
diff --git a/service/implantSet.py b/service/implantSet.py
index 0d0df5808..e65b2e708 100644
--- a/service/implantSet.py
+++ b/service/implantSet.py
@@ -17,10 +17,11 @@
# along with pyfa. If not, see .
#===============================================================================
+import copy
+
import eos.db
import eos.types
-import copy
-import service.market
+from service.market import Market
class ImportError(Exception):
pass
@@ -75,9 +76,9 @@ class ImplantSets():
def saveChanges(self, s):
eos.db.save(s)
-
+
def importSets(self, text):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
lines = text.splitlines()
newSets = []
errors = 0
@@ -117,9 +118,8 @@ class ImplantSets():
raise ImportError("No patterns found for import")
if errors > 0:
raise ImportError("%d sets imported from clipboard; %d errors"%(lenImports, errors))
-
+
def exportSets(self):
patterns = self.getImplantSetList()
patterns.sort(key=lambda p: p.name)
return eos.types.ImplantSet.exportSets(*patterns)
-
diff --git a/service/market.py b/service/market.py
index 7d1cdea19..4a297f00d 100644
--- a/service/market.py
+++ b/service/market.py
@@ -19,18 +19,18 @@
import re
import threading
-import wx
-
+import logging
import Queue
+import wx
+from sqlalchemy.sql import or_
+
import config
import eos.db
import eos.types
-from sqlalchemy.sql import and_, or_
-from service.settings import SettingsProvider, NetworkSettings
-import service
-import service.conversions as conversions
-import logging
+from service import conversions
+from service.settings import SettingsProvider
+from service.price import Price
try:
from collections import OrderedDict
@@ -86,7 +86,7 @@ class PriceWorkerThread(threading.Thread):
# Grab prices, this is the time-consuming part
if len(requests) > 0:
- service.Price.fetchPrices(requests)
+ Price.fetchPrices(requests)
wx.CallAfter(callback)
queue.task_done()
@@ -766,7 +766,7 @@ class Market():
def cb():
try:
callback(requests)
- except Exception, e:
+ except Exception:
pass
eos.db.commit()
diff --git a/service/network.py b/service/network.py
index f7383e03d..8923f8b57 100644
--- a/service/network.py
+++ b/service/network.py
@@ -17,12 +17,14 @@
# along with pyfa. If not, see .
#===============================================================================
-from service.settings import NetworkSettings
+
import urllib2
import urllib
-import config
import socket
+import config
+from service.settings import NetworkSettings
+
# network timeout, otherwise pyfa hangs for a long while if no internet connection
timeout = 3
socket.setdefaulttimeout(timeout)
@@ -35,14 +37,13 @@ class RequestError(StandardError):
pass
class AuthenticationError(StandardError):
- pass
+ pass
class ServerError(StandardError):
- pass
+ pass
class TimeoutError(StandardError):
- pass
-
+ pass
class Network():
# Request constants - every request must supply this, as it is checked if
@@ -55,7 +56,7 @@ class Network():
_instance = None
@classmethod
def getInstance(cls):
- if cls._instance == None:
+ if cls._instance is None:
cls._instance = Network()
return cls._instance
@@ -101,14 +102,14 @@ class Network():
request = urllib2.Request(url, headers=headers, data=urllib.urlencode(data) if data else None)
try:
return urllib2.urlopen(request)
- except urllib2.HTTPError, error:
+ except urllib2.HTTPError as error:
if error.code == 404:
raise RequestError()
elif error.code == 403:
raise AuthenticationError()
elif error.code >= 500:
raise ServerError()
- except urllib2.URLError, error:
+ except urllib2.URLError as error:
if "timed out" in error.reason:
raise TimeoutError()
else:
diff --git a/service/port.py b/service/port.py
index a9b4089c7..9c662f706 100644
--- a/service/port.py
+++ b/service/port.py
@@ -20,15 +20,30 @@
import re
import os
import xml.dom
-
-from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Booster, Citadel
-import service
-import wx
import logging
-import config
import collections
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")
try:
@@ -57,8 +72,8 @@ class Port(object):
nested_dict = lambda: collections.defaultdict(nested_dict)
fit = nested_dict()
- sCrest = service.Crest.getInstance()
- sFit = service.Fit.getInstance()
+ sCrest = Crest.getInstance()
+ sFit = Fit.getInstance()
eve = sCrest.eve
@@ -69,7 +84,7 @@ class Port(object):
fit['ship']['id'] = ofit.ship.item.ID
fit['ship']['name'] = ''
- fit['description'] = ""%ofit.ID
+ fit['description'] = "" % ofit.ID
fit['items'] = []
slotNum = {}
@@ -86,7 +101,7 @@ class Port(object):
slot = int(module.getModifiedItemAttr("subSystemSlot"))
item['flag'] = slot
else:
- if not slot in slotNum:
+ if slot not in slotNum:
slotNum[slot] = INV_FLAGS[slot]
item['flag'] = slotNum[slot]
@@ -99,7 +114,7 @@ class Port(object):
fit['items'].append(item)
if module.charge and sFit.serviceFittingOptions["exportCharges"]:
- if not module.chargeID in charges:
+ if module.chargeID not in charges:
charges[module.chargeID] = 0
# `or 1` because some charges (ie scripts) are without qty
charges[module.chargeID] += module.numCharges or 1
@@ -168,7 +183,7 @@ class Port(object):
@staticmethod
def importCrest(str):
fit = json.loads(str)
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
f = Fit()
f.name = fit['name']
@@ -216,7 +231,7 @@ class Port(object):
continue
# Recalc to get slot numbers correct for T3 cruisers
- service.Fit.getInstance().recalc(f)
+ Fit.getInstance().recalc(f)
for module in moduleList:
if module.fits(f):
@@ -226,7 +241,7 @@ class Port(object):
@staticmethod
def importDna(string):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
ids = map(int, re.findall(r'\d+', string))
for id in ids:
@@ -291,7 +306,7 @@ class Port(object):
moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers
- service.Fit.getInstance().recalc(f)
+ Fit.getInstance().recalc(f)
for module in moduleList:
if module.fits(f):
@@ -304,7 +319,7 @@ class Port(object):
@staticmethod
def importEft(eftString):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
offineSuffix = " /OFFLINE"
fit = Fit()
@@ -371,12 +386,12 @@ class Port(object):
if item.category.name == "Drone":
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] += extraAmount
if len(modExtra) == 2 and item.category.name != "Drone":
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] += extraAmount
elif item.category.name == "Implant":
@@ -415,13 +430,13 @@ class Port(object):
moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers
- service.Fit.getInstance().recalc(fit)
+ Fit.getInstance().recalc(fit)
for m in moduleList:
if m.fits(fit):
m.owner = fit
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)
@@ -442,7 +457,7 @@ class Port(object):
"""Handle import from EFT config store file"""
# Check if we have such ship in database, bail if we don't
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
try:
sMkt.getItem(shipname)
except:
@@ -596,7 +611,7 @@ class Port(object):
moduleList.append(m)
# Recalc to get slot numbers correct for T3 cruisers
- service.Fit.getInstance().recalc(f)
+ Fit.getInstance().recalc(f)
for module in moduleList:
if module.fits(f):
@@ -615,7 +630,7 @@ class Port(object):
@staticmethod
def importXml(text, callback=None, encoding="utf-8"):
- sMkt = service.Market.getInstance()
+ sMkt = Market.getInstance()
doc = xml.dom.minidom.parseString(text.encode(encoding))
fittings = doc.getElementsByTagName("fittings").item(0)
@@ -676,7 +691,7 @@ class Port(object):
continue
# Recalc to get slot numbers correct for T3 cruisers
- service.Fit.getInstance().recalc(f)
+ Fit.getInstance().recalc(f)
for module in moduleList:
if module.fits(f):
@@ -694,10 +709,10 @@ class Port(object):
offineSuffix = " /OFFLINE"
export = "[%s, %s]\n" % (fit.ship.item.name, fit.name)
stuff = {}
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
for module in fit.modules:
slot = module.slot
- if not slot in stuff:
+ if slot not in stuff:
stuff[slot] = []
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"]:
@@ -776,12 +791,12 @@ class Port(object):
if mod.slot == Slot.SUBSYSTEM:
subsystems.append(mod)
continue
- if not mod.itemID in mods:
+ if mod.itemID not in mods:
mods[mod.itemID] = 0
mods[mod.itemID] += 1
if mod.charge:
- if not mod.chargeID in charges:
+ if mod.chargeID not in charges:
charges[mod.chargeID] = 0
# `or 1` because some charges (ie scripts) are without qty
charges[mod.chargeID] += mod.numCharges or 1
@@ -792,13 +807,8 @@ class Port(object):
for mod in mods:
dna += ":{0};{1}".format(mod, mods[mod])
- # drones are known to be in split stacks
- groupedDrones = OrderedDict()
for drone in fit.drones:
- groupedDrones[drone.itemID] = groupedDrones.get(drone.itemID, 0) + drone.amount
-
- for droneItemID in groupedDrones:
- dna += ":{0};{1}".format(droneItemID, groupedDrones[droneItemID])
+ dna += ":{0};{1}".format(drone.itemID, drone.amount)
for cargo in fit.cargo:
# 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
# client when trying to save the fit
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] += cargo.amount
@@ -821,7 +831,7 @@ class Port(object):
doc = xml.dom.minidom.Document()
fittings = doc.createElement("fittings")
doc.appendChild(fittings)
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
for i, fit in enumerate(fits):
try:
@@ -847,7 +857,7 @@ class Port(object):
# Order of subsystem matters based on this attr. See GH issue #130
slotId = module.getModifiedItemAttr("subSystemSlot") - 125
else:
- if not slot in slotNum:
+ if slot not in slotNum:
slotNum[slot] = 0
slotId = slotNum[slot]
@@ -861,7 +871,7 @@ class Port(object):
fitting.appendChild(hardware)
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
# `or 1` because some charges (ie scripts) are without qty
charges[module.charge.name] += module.numCharges or 1
@@ -874,7 +884,7 @@ class Port(object):
fitting.appendChild(hardware)
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] += cargo.amount
@@ -885,7 +895,7 @@ class Port(object):
hardware.setAttribute("type", name)
fitting.appendChild(hardware)
except:
- print "Failed on fitID: %d"%fit.ID
+ print("Failed on fitID: %d" % fit.ID)
continue
finally:
if callback:
@@ -897,13 +907,12 @@ class Port(object):
def exportMultiBuy(fit):
export = "%s\n" % (fit.ship.item.name)
stuff = {}
- sFit = service.Fit.getInstance()
+ sFit = Fit.getInstance()
for module in fit.modules:
slot = module.slot
- if not slot in stuff:
+ if slot not in stuff:
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"]:
curr += "%s x%s\n" % (module.charge.name, module.numCharges)
stuff[slot].append(curr)
diff --git a/service/prefetch.py b/service/prefetch.py
index b16f52d40..f3d09c43c 100644
--- a/service/prefetch.py
+++ b/service/prefetch.py
@@ -18,10 +18,11 @@
#===============================================================================
import threading
-import config
import os
+
+import config
import eos.types
-import eos.db.migration as migration
+from eos.db import migration
from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues
class PrefetchThread(threading.Thread):
@@ -44,27 +45,26 @@ prefetch.start()
# @ todo: move this to pyfa.py
########
-#Make sure the saveddata db exists
-if not os.path.exists(config.savePath):
+# Make sure the saveddata db exists
+if config.savePath and not os.path.exists(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
eos.db.saveddata_meta.create_all()
migration.update(eos.db.saveddata_engine)
# Import default database values
# Import values that must exist otherwise Pyfa breaks
DefaultDatabaseValues.importRequiredDefaults()
-else:
+elif config.saveDB:
# If database does not exist, do not worry about migration. Simply
# create and set version
eos.db.saveddata_meta.create_all()
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
DefaultDatabaseValues.importRequiredDefaults()
# Import default values for damage profiles
DefaultDatabaseValues.importDamageProfileDefaults()
# Import default values for target resist profiles
DefaultDatabaseValues.importResistProfileDefaults()
-
diff --git a/service/price.py b/service/price.py
index 71858cf7c..f2c9c9bd9 100644
--- a/service/price.py
+++ b/service/price.py
@@ -17,12 +17,13 @@
# along with pyfa. If not, see .
#===============================================================================
-import service
-import eos.db
-import eos.types
+
import time
from xml.dom import minidom
+import eos
+from service.network import Network, TimeoutError
+
VALIDITY = 24*60*60 # Price validity period, 24 hours
REREQUEST = 4*60*60 # Re-request delay for failed fetches, 4 hours
TIMEOUT = 15*60 # Network timeout delay for connection issues, 15 minutes
@@ -71,15 +72,15 @@ class Price():
# Attempt to send request and process it
try:
- network = service.Network.getInstance()
+ network = Network.getInstance()
data = network.request(baseurl, network.PRICES, data)
xml = minidom.parse(data)
types = xml.getElementsByTagName("marketstat").item(0).getElementsByTagName("type")
# 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
- typeID = int(type.getAttribute("id"))
- sell = type.getElementsByTagName("sell").item(0)
+ typeID = int(type_.getAttribute("id"))
+ sell = type_.getElementsByTagName("sell").item(0)
# If price data wasn't there, set price to zero
try:
percprice = float(sell.getElementsByTagName("percentile").item(0).firstChild.data)
@@ -96,7 +97,7 @@ class Price():
del priceMap[typeID]
# If getting or processing data returned any errors
- except service.network.TimeoutError, e:
+ except TimeoutError:
# Timeout error deserves special treatment
for typeID in priceMap.keys():
priceobj = priceMap[typeID]
diff --git a/service/pycrest/__init__.py b/service/pycrest/__init__.py
index 97244c957..f51a5440e 100644
--- a/service/pycrest/__init__.py
+++ b/service/pycrest/__init__.py
@@ -9,5 +9,3 @@ logger = logging.getLogger('pycrest')
logger.addHandler(NullHandler())
version = "0.0.1"
-
-from .eve import EVE
\ No newline at end of file
diff --git a/service/pycrest/eve.py b/service/pycrest/eve.py
index c0f33becd..221389b79 100644
--- a/service/pycrest/eve.py
+++ b/service/pycrest/eve.py
@@ -1,15 +1,17 @@
+import logging
+import re
import os
import base64
import time
import zlib
import requests
-
-from . import version
-from compat import bytes_, text_
-from errors import APIException
from requests.adapters import HTTPAdapter
+import config
+from service.pycrest.compat import bytes_, text_
+from service.pycrest.errors import APIException
+
try:
from urllib.parse import urlparse, urlunparse, parse_qsl
except ImportError: # pragma: no cover
@@ -20,13 +22,6 @@ try:
except ImportError: # pragma: no cover
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")
cache_re = re.compile(r'max-age=([0-9]+)')
@@ -110,8 +105,7 @@ class APIConnection(object):
"Accept": "application/json",
})
session.headers.update(additional_headers)
- session.mount('https://public-crest.eveonline.com',
- HTTPAdapter())
+ session.mount('https://public-crest.eveonline.com', HTTPAdapter())
self._session = session
if cache:
if isinstance(cache, APICache):
diff --git a/service/pycrest/weak_ciphers.py b/service/pycrest/weak_ciphers.py
index 03de8321a..13a09abba 100644
--- a/service/pycrest/weak_ciphers.py
+++ b/service/pycrest/weak_ciphers.py
@@ -1,32 +1,23 @@
import datetime
import ssl
-import sys
import warnings
from requests.adapters import HTTPAdapter
try:
- from requests.packages import urllib3
- from requests.packages.urllib3.util import ssl_
-
- from requests.packages.urllib3.exceptions import (
- SystemTimeWarning,
- SecurityWarning,
- )
- from requests.packages.urllib3.packages.ssl_match_hostname import \
- match_hostname
+ from requests.packages import urllib3
+ from requests.packages.urllib3.util import ssl_
+ from requests.packages.urllib3.exceptions import (
+ SystemTimeWarning,
+ SecurityWarning,
+ )
+ from requests.packages.urllib3.packages.ssl_match_hostname import \
+ match_hostname
except:
- import urllib3
- from urllib3.util import ssl_
-
- from urllib3.exceptions import (
- SystemTimeWarning,
- SecurityWarning,
- )
- from urllib3.packages.ssl_match_hostname import \
- match_hostname
-
-
+ import urllib3
+ from urllib3.util import ssl_
+ from urllib3.exceptions import SystemTimeWarning, SecurityWarning
+ from urllib3.packages.ssl_match_hostname import match_hostname
class WeakCiphersHTTPSConnection(
diff --git a/service/server.py b/service/server.py
index ed42d0082..f65729a89 100644
--- a/service/server.py
+++ b/service/server.py
@@ -2,11 +2,12 @@ import BaseHTTPServer
import urlparse
import socket
import thread
-import wx
-from service.settings import CRESTSettings
-
import logging
+import wx
+
+from service.settings import CRESTSettings
+
logger = logging.getLogger(__name__)
HTML = '''
@@ -121,4 +122,3 @@ if __name__ == "__main__":
thread.start_new_thread(httpd.serve, ())
raw_input("Press to stop server\n")
httpd.stop()
-
diff --git a/service/settings.py b/service/settings.py
index 89f871973..bf70b8705 100644
--- a/service/settings.py
+++ b/service/settings.py
@@ -19,11 +19,12 @@
import cPickle
import os.path
-import config
import urllib2
+import config
+
class SettingsProvider():
- BASE_PATH = os.path.join(config.savePath, "settings")
+ BASE_PATH = os.path.join(config.savePath or ".", "settings")
settings = {}
_instance = None
@classmethod
@@ -260,8 +261,8 @@ class HTMLExportSettings():
def setEnabled(self, enabled):
self.serviceHTMLExportSettings["enabled"] = enabled
-
-
+
+
def getMinimalEnabled(self):
return self.serviceHTMLExportSettings["minimal"]
diff --git a/service/targetResists.py b/service/targetResists.py
index 2640551f4..26279ba6b 100644
--- a/service/targetResists.py
+++ b/service/targetResists.py
@@ -17,14 +17,16 @@
# along with pyfa. If not, see .
#===============================================================================
-import eos.db
-import eos.types
import copy
-class ImportError(Exception):
- pass
+import eos
+from eos.saveddata import targetResists as db_targetResists
-class TargetResists():
+
+class ImportError(Exception):
+ pass
+
+class TargetResists(object):
instance = None
@classmethod
def getInstance(cls):
@@ -84,5 +86,4 @@ class TargetResists():
def exportPatterns(self):
patterns = self.getTargetResistsList()
patterns.sort(key=lambda p: p.name)
- return eos.types.TargetResists.exportPatterns(*patterns)
-
+ return db_targetResists.TargetResists.exportPatterns(*patterns)
diff --git a/service/update.py b/service/update.py
index 47a3e35b0..8f498e724 100644
--- a/service/update.py
+++ b/service/update.py
@@ -18,23 +18,25 @@
#===============================================================================
import threading
-import wx
-import urllib2
import json
-import config
-import service
-import dateutil.parser
import calendar
+import wx
+import dateutil.parser
+
+import config
+from service.network import Network
+from service.settings import UpdateSettings
+
class CheckUpdateThread(threading.Thread):
def __init__(self, callback):
threading.Thread.__init__(self)
self.callback = callback
- self.settings = service.settings.UpdateSettings.getInstance()
- self.network = service.Network.getInstance()
+ self.settings = UpdateSettings.getInstance()
+ self.network = Network.getInstance()
def run(self):
- network = service.Network.getInstance()
+ network = Network.getInstance()
try:
response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE)
@@ -91,5 +93,3 @@ class Update():
if cls.instance == None:
cls.instance = Update()
return cls.instance
-
-
diff --git a/tests/test_package.py b/tests/test_package.py
new file mode 100644
index 000000000..b63076b47
--- /dev/null
+++ b/tests/test_package.py
@@ -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)