Make it run again

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

View File

@@ -21,6 +21,7 @@ from sqlalchemy.orm import join, exc
from sqlalchemy.sql import and_, or_, select
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

View File

@@ -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]

View File

@@ -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))

View File

@@ -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()

View File

@@ -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)

View File

@@ -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":

View File

@@ -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)

View File

@@ -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)

View File

@@ -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":

View File

@@ -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:

View File

@@ -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))

View File

@@ -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])

View File

@@ -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)

View File

@@ -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]

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()))

View File

@@ -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:

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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))

View File

@@ -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")

View File

@@ -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):

View File

@@ -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"])

View File

@@ -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 )

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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:

View File

@@ -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:

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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")

View File

@@ -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"]:

View File

@@ -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

View File

@@ -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 ""

View File

@@ -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

View File

@@ -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))

View File

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

View File

@@ -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:

View File

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

View File

@@ -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

View File

@@ -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

View File

@@ -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())

View File

@@ -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():

View File

@@ -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:

View File

@@ -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))

View File

@@ -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()

View File

@@ -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))

View File

@@ -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))

View File

@@ -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()

View File

@@ -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)

View File

@@ -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

View File

@@ -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),

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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")

View File

@@ -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))

View File

@@ -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

View File

@@ -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")

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)

View File

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

View File

@@ -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])

View File

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

View File

@@ -20,6 +20,7 @@
import copy
import 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

View File

@@ -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

View File

@@ -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())

View File

@@ -17,15 +17,14 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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

View File

@@ -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

View File

@@ -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

View File

@@ -17,9 +17,11 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
import eos.db
from eos.types import Fleet as Fleet_, Wing, Squad
import copy
import 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

View File

@@ -17,10 +17,11 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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)

View File

@@ -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()

View File

@@ -17,12 +17,14 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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:

View File

@@ -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'] = "<pyfa:%d />"%ofit.ID
fit['description'] = "<pyfa:%d />" % 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)

View File

@@ -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()

View File

@@ -17,12 +17,13 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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]

View File

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

View File

@@ -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):

View File

@@ -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(

View File

@@ -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 <RETURN> to stop server\n")
httpd.stop()

View File

@@ -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"]

View File

@@ -17,14 +17,16 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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)

View File

@@ -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

34
tests/test_package.py Normal file
View File

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