From d963327ed4cd17eb2a2dbb4da81c5360cdbdd092 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Fri, 2 Dec 2016 03:13:54 -0800 Subject: [PATCH] Make it run again --- eos/db/gamedata/queries.py | 7 +- gui/boosterView.py | 12 +-- gui/builtinContextMenus/ammoPattern.py | 3 +- gui/builtinContextMenus/amount.py | 3 +- gui/builtinContextMenus/cargo.py | 6 +- .../changeAffectingSkills.py | 9 +- gui/builtinContextMenus/damagePattern.py | 11 ++- gui/builtinContextMenus/droneRemoveStack.py | 3 +- gui/builtinContextMenus/droneSplit.py | 3 +- gui/builtinContextMenus/factorReload.py | 6 +- gui/builtinContextMenus/fighterAbilities.py | 3 +- gui/builtinContextMenus/implantSets.py | 5 +- gui/builtinContextMenus/itemRemove.py | 3 +- gui/builtinContextMenus/itemStats.py | 4 +- gui/builtinContextMenus/marketJump.py | 4 +- gui/builtinContextMenus/metaSwap.py | 7 +- gui/builtinContextMenus/moduleAmmoPicker.py | 7 +- .../moduleGlobalAmmoPicker.py | 3 +- gui/builtinContextMenus/priceClear.py | 4 +- gui/builtinContextMenus/project.py | 6 +- gui/builtinContextMenus/shipJump.py | 4 +- gui/builtinContextMenus/tacticalMode.py | 7 +- gui/builtinContextMenus/targetResists.py | 9 +- gui/builtinContextMenus/whProjector.py | 7 +- gui/builtinGraphs/fitDps.py | 5 +- .../pyfaCrestPreferences.py | 11 ++- .../pyfaGeneralPreferences.py | 8 +- .../pyfaHTMLExportPreferences.py | 5 +- .../pyfaNetworkPreferences.py | 11 ++- .../pyfaUpdatePreferences.py | 5 +- gui/builtinStatsViews/firepowerViewFull.py | 3 +- gui/builtinStatsViews/miningyieldViewFull.py | 9 +- gui/builtinStatsViews/priceViewFull.py | 4 +- gui/builtinStatsViews/rechargeViewFull.py | 4 +- gui/builtinStatsViews/resistancesViewFull.py | 1 - gui/builtinViewColumns/attributeDisplay.py | 8 +- gui/builtinViewColumns/baseName.py | 9 +- gui/builtinViewColumns/capacitorUse.py | 4 +- gui/builtinViewColumns/maxRange.py | 5 +- gui/builtinViewColumns/misc.py | 12 +-- gui/builtinViewColumns/price.py | 6 +- gui/builtinViewColumns/propertyDisplay.py | 3 +- gui/builtinViews/emptyView.py | 3 +- gui/builtinViews/entityEditor.py | 1 - gui/builtinViews/fittingView.py | 36 +++---- gui/builtinViews/fleetView.py | 1 - gui/builtinViews/implantEditor.py | 8 +- gui/cargoView.py | 16 ++-- gui/characterEditor.py | 51 +++++----- gui/characterSelection.py | 23 ++--- gui/chromeTabs.py | 5 +- gui/commandView.py | 16 ++-- gui/crestFittings.py | 29 +++--- gui/droneView.py | 17 ++-- gui/fighterView.py | 16 ++-- gui/gangView.py | 39 ++++---- gui/graphFrame.py | 6 +- gui/implantView.py | 18 ++-- gui/itemStats.py | 21 ++-- gui/mainFrame.py | 57 ++++++----- gui/mainMenuBar.py | 7 +- gui/marketBrowser.py | 9 +- gui/notesView.py | 8 +- gui/patternEditor.py | 20 ++-- gui/projectedView.py | 18 ++-- gui/propertyEditor.py | 13 +-- gui/resistsEditor.py | 18 ++-- gui/setEditor.py | 22 ++--- gui/shipBrowser.py | 39 ++++---- gui/statsPane.py | 4 +- gui/updateDialog.py | 1 - gui/utils/exportHtml.py | 12 ++- service/__init__.py | 19 ---- service/character.py | 14 ++- service/conversions/__init__.py | 4 +- service/crest.py | 12 +-- service/damagePattern.py | 9 +- service/eveapi.py | 6 +- service/fit.py | 43 +++++---- service/fleet.py | 6 +- service/implantSet.py | 12 +-- service/market.py | 18 ++-- service/network.py | 19 ++-- service/port.py | 95 ++++++++++--------- service/prefetch.py | 16 ++-- service/price.py | 17 ++-- service/pycrest/__init__.py | 2 - service/pycrest/eve.py | 20 ++-- service/pycrest/weak_ciphers.py | 33 +++---- service/server.py | 8 +- service/settings.py | 9 +- service/targetResists.py | 15 +-- service/update.py | 20 ++-- tests/test_package.py | 34 +++++++ 94 files changed, 631 insertions(+), 583 deletions(-) create mode 100644 tests/test_package.py 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)