Files
pyfa/service/settings.py
blitzman 85131e6166 oh god this isn't gonna work
Merge branch 'ebag_importchanges' into test_import

Conflicts:
	config.py
	eos/db/saveddata/queries.py
	eos/effects/chargebonuswarfarecharge.py
	eos/effects/elitebonuscommandshipinformationhiddencs3.py
	eos/effects/elitebonuslogisticremotearmorrepairoptimalfalloff1.py
	eos/effects/energydestabilizationnew.py
	eos/effects/iceharvestingdroneoperationdurationbonus.py
	eos/effects/miningforemanstrengthbonus.py
	eos/effects/modulebonuswarfarelinkarmor.py
	eos/effects/modulebonuswarfarelinkinfo.py
	eos/effects/modulebonuswarfarelinkmining.py
	eos/effects/modulebonuswarfarelinkshield.py
	eos/effects/modulebonuswarfarelinkskirmish.py
	eos/effects/moduletitaneffectgenerator.py
	eos/effects/remotehullrepair.py
	eos/effects/rolebonusremotearmorrepairoptimalfalloff.py
	eos/effects/shipbonusforceauxiliarya4warfarelinksbonus.py
	eos/effects/shipmodesmallmissiledamagepostdiv.py
	eos/effects/structureenergyneutralizerfalloff.py
	eos/effects/structuremoduleeffectstasiswebifier.py
	eos/effects/structurerigmaxtargets.py
	eos/effects/subsystembonusamarrdefensiveinformationwarfarehidden.py
	eos/effects/subsystembonuscaldaridefensiveinformationwarfarehidden.py
	eos/effects/subsystembonusgallentedefensiveinformationwarfarehidden.py
	eos/effects/techtwocommandburstbonus.py
	eos/saveddata/fighter.py
	eos/saveddata/fit.py
	eos/saveddata/module.py
	eve.db
	gui/bitmapLoader.py
	gui/builtinContextMenus/itemStats.py
	gui/builtinStatsViews/miningyieldViewFull.py
	gui/builtinViewColumns/misc.py
	gui/builtinViews/__init__.py
	gui/builtinViews/fittingView.py
	gui/contextMenu.py
	gui/graphFrame.py
	gui/itemStats.py
	gui/mainFrame.py
	gui/marketBrowser.py
	service/__init__.py
	service/character.py
	service/fit.py
	service/port.py
	service/prefetch.py
	service/pycrest/eve.py
	service/settings.py
2017-01-23 21:06:12 -05:00

345 lines
9.8 KiB
Python

# =============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
import cPickle
import os.path
import urllib2
import config
class SettingsProvider(object):
BASE_PATH = config.getSavePath("settings")
settings = {}
_instance = None
@classmethod
def getInstance(cls):
if cls._instance is None:
cls._instance = SettingsProvider()
return cls._instance
def __init__(self):
if not os.path.exists(self.BASE_PATH):
os.mkdir(self.BASE_PATH)
def getSettings(self, area, defaults=None):
s = self.settings.get(area)
if s is None:
p = config.parsePath(self.BASE_PATH, area)
if not os.path.exists(p):
info = {}
if defaults:
for item in defaults:
info[item] = defaults[item]
else:
try:
f = open(p, "rb")
info = cPickle.load(f)
for item in defaults:
if item not in info:
info[item] = defaults[item]
except:
info = {}
if defaults:
for item in defaults:
info[item] = defaults[item]
self.settings[area] = s = Settings(p, info)
return s
def saveAll(self):
for settings in self.settings.itervalues():
settings.save()
class Settings(object):
def __init__(self, location, info):
self.location = location
self.info = info
def save(self):
f = open(self.location, "wb")
cPickle.dump(self.info, f, cPickle.HIGHEST_PROTOCOL)
def __getitem__(self, k):
try:
return self.info[k]
except KeyError:
return None
def __setitem__(self, k, v):
self.info[k] = v
def __iter__(self):
return self.info.__iter__()
def iterkeys(self):
return self.info.iterkeys()
def itervalues(self):
return self.info.itervalues()
def iteritems(self):
return self.info.iteritems()
def keys(self):
return self.info.keys()
def values(self):
return self.info.values()
def items(self):
return self.info.items()
class NetworkSettings(object):
_instance = None
# constants for serviceNetworkDefaultSettings["mode"] parameter
PROXY_MODE_NONE = 0 # 0 - No proxy
PROXY_MODE_AUTODETECT = 1 # 1 - Auto-detected proxy settings
PROXY_MODE_MANUAL = 2 # 2 - Manual proxy settings
@classmethod
def getInstance(cls):
if cls._instance is None:
cls._instance = NetworkSettings()
return cls._instance
def __init__(self):
serviceNetworkDefaultSettings = {
"mode": self.PROXY_MODE_AUTODETECT,
"type": "https",
"address": "",
"port": "",
"access": 15,
"login": None,
"password": None
}
self.serviceNetworkSettings = SettingsProvider.getInstance().getSettings(
"pyfaServiceNetworkSettings", serviceNetworkDefaultSettings)
def isEnabled(self, type):
if type & self.serviceNetworkSettings["access"]:
return True
return False
def toggleAccess(self, type, toggle=True):
bitfield = self.serviceNetworkSettings["access"]
if toggle: # Turn bit on
self.serviceNetworkSettings["access"] = type | bitfield
else: # Turn bit off
self.serviceNetworkSettings["access"] = ~type & bitfield
def getMode(self):
return self.serviceNetworkSettings["mode"]
def getAddress(self):
return self.serviceNetworkSettings["address"]
def getPort(self):
return self.serviceNetworkSettings["port"]
def getType(self):
return self.serviceNetworkSettings["type"]
def getAccess(self):
return self.serviceNetworkSettings["access"]
def setMode(self, mode):
self.serviceNetworkSettings["mode"] = mode
def setAddress(self, addr):
self.serviceNetworkSettings["address"] = addr
def setPort(self, port):
self.serviceNetworkSettings["port"] = port
def setType(self, type):
self.serviceNetworkSettings["type"] = type
def setAccess(self, access):
self.serviceNetworkSettings["access"] = access
@staticmethod
def autodetect():
proxy = None
proxydict = urllib2.ProxyHandler().proxies
validPrefixes = ("http", "https")
for prefix in validPrefixes:
if prefix not in proxydict:
continue
proxyline = proxydict[prefix]
proto = "{0}://".format(prefix)
if proxyline[:len(proto)] == proto:
proxyline = proxyline[len(proto):]
proxAddr, proxPort = proxyline.split(":")
proxPort = int(proxPort.rstrip("/"))
proxy = (proxAddr, proxPort)
break
return proxy
def getProxySettings(self):
if self.getMode() == self.PROXY_MODE_NONE:
return None
if self.getMode() == self.PROXY_MODE_AUTODETECT:
return self.autodetect()
if self.getMode() == self.PROXY_MODE_MANUAL:
return (self.getAddress(), int(self.getPort()))
def getProxyAuthDetails(self):
if self.getMode() == self.PROXY_MODE_NONE:
return None
if (self.serviceNetworkSettings["login"] is None) or (self.serviceNetworkSettings["password"] is None):
return None
# in all other cases, return tuple of (login, password)
return (self.serviceNetworkSettings["login"], self.serviceNetworkSettings["password"])
def setProxyAuthDetails(self, login, password):
if (login is None) or (password is None):
self.serviceNetworkSettings["login"] = None
self.serviceNetworkSettings["password"] = None
return
if login == "": # empty login unsets proxy auth info
self.serviceNetworkSettings["login"] = None
self.serviceNetworkSettings["password"] = None
return
self.serviceNetworkSettings["login"] = login
self.serviceNetworkSettings["password"] = password
class HTMLExportSettings(object):
"""
Settings used by the HTML export feature.
"""
_instance = None
@classmethod
def getInstance(cls):
if cls._instance is None:
cls._instance = HTMLExportSettings()
return cls._instance
def __init__(self):
serviceHTMLExportDefaultSettings = {
"enabled": False,
"path": config.pyfaPath + os.sep + 'pyfaFits.html',
"minimal": False
}
self.serviceHTMLExportSettings = SettingsProvider.getInstance().getSettings(
"pyfaServiceHTMLExportSettings",
serviceHTMLExportDefaultSettings
)
def getEnabled(self):
return self.serviceHTMLExportSettings["enabled"]
def setEnabled(self, enabled):
self.serviceHTMLExportSettings["enabled"] = enabled
def getMinimalEnabled(self):
return self.serviceHTMLExportSettings["minimal"]
def setMinimalEnabled(self, minimal):
self.serviceHTMLExportSettings["minimal"] = minimal
def getPath(self):
return self.serviceHTMLExportSettings["path"]
def setPath(self, path):
self.serviceHTMLExportSettings["path"] = path
class UpdateSettings(object):
"""
Settings used by update notification
"""
_instance = None
@classmethod
def getInstance(cls):
if cls._instance is None:
cls._instance = UpdateSettings()
return cls._instance
def __init__(self):
# Settings
# Updates are completely suppressed via network settings
# prerelease - If True, suppress prerelease notifications
# version - Set to release tag that user does not want notifications for
serviceUpdateDefaultSettings = {"prerelease": True, 'version': None}
self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings(
"pyfaServiceUpdateSettings",
serviceUpdateDefaultSettings
)
def get(self, type):
return self.serviceUpdateSettings[type]
def set(self, type, value):
self.serviceUpdateSettings[type] = value
class CRESTSettings(object):
_instance = None
@classmethod
def getInstance(cls):
if cls._instance is None:
cls._instance = CRESTSettings()
return cls._instance
def __init__(self):
# mode
# 0 - Implicit authentication
# 1 - User-supplied client details
serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60}
self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings(
"pyfaServiceCRESTSettings",
serviceCRESTDefaultSettings
)
def get(self, type):
return self.serviceCRESTSettings[type]
def set(self, type, value):
self.serviceCRESTSettings[type] = value
# @todo: migrate fit settings (from fit service) here?