__init__.py (6768B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveprefs\__init__.py 2 from future.utils import raise_ 3 import abc 4 import os 5 import types 6 import sys 7 DEFAULT_ENCODING = 'cp1252' 8 CLUSTER_MODE_TIER_DEV = 'LOCAL' 9 CLUSTER_MODE_TIER_TEST = 'TEST' 10 CLUSTER_MODE_TIER_PROD = 'LIVE' 11 _unsupplied = object() 12 13 def get_filename(blue, shortname, ext, root = None): 14 if root is None: 15 root = blue.paths.ResolvePath(u'settings:/') 16 if root[-1] not in ('\\', '/'): 17 root += '\\' 18 if shortname[-len(ext):] != ext: 19 filename = root + shortname + ext 20 else: 21 filename = root + shortname 22 return filename 23 24 25 def strip_spaces(d): 26 result = {} 27 for k, v in d.iteritems(): 28 realv = v 29 if isinstance(v, types.StringTypes): 30 realv = v.strip() 31 result[k.strip()] = realv 32 33 return result 34 35 36 class BaseIniFile(object): 37 __metaclass__ = abc.ABCMeta 38 39 def HasKey(self, key): 40 return self.FixKey(key) in self._GetKeySet() 41 42 @abc.abstractmethod 43 def _GetKeySet(self): 44 pass 45 46 def GetKeys(self, beginWith = None): 47 if beginWith is None: 48 keys = list(self._GetKeySet()) 49 else: 50 beginWith = self.FixKey(beginWith) 51 keys = [ key for key in self._GetKeySet() if key[:len(beginWith)] == beginWith ] 52 return keys 53 54 @abc.abstractmethod 55 def _GetValue(self, key): 56 pass 57 58 def GetValue(self, key, default = _unsupplied, flushDef = False): 59 key = self.FixKey(key) 60 if key not in self._GetKeySet(): 61 if default is _unsupplied: 62 raise KeyError(key) 63 if flushDef: 64 self.SetValue(key, default) 65 return default 66 return self._GetValue(key) 67 68 @abc.abstractmethod 69 def _SetValue(self, key, value, forcePickle): 70 pass 71 72 def SetValue(self, key, value, forcePickle = False): 73 key = self.FixKey(key) 74 self._SetValue(key, value, forcePickle) 75 76 def _SpoofKey(self, key, value): 77 raise NotImplementedError() 78 79 def SpoofKey(self, key, value): 80 key = self.FixKey(key) 81 self._SpoofKey(key, value) 82 83 def FixKey(self, key): 84 try: 85 key.decode('ascii') 86 except UnicodeDecodeError: 87 raise ValueError('key must be ascii') 88 89 return str(key).strip() 90 91 @abc.abstractmethod 92 def _DeleteValue(self, key): 93 pass 94 95 def DeleteValue(self, key): 96 key = self.FixKey(key) 97 if key in self._GetKeySet(): 98 self._DeleteValue(key) 99 100 101 class Handler(object): 102 103 def __init__(self, inifile): 104 self.__dict__['ini'] = inifile 105 106 def __getattr__(self, key): 107 value = getattr(self.__dict__['ini'], key, None) 108 if value is not None: 109 return value 110 try: 111 value = self.__dict__['ini'].GetValue(key) 112 setattr(self.__dict__['ini'], key, value) 113 return value 114 except KeyError: 115 raise_(AttributeError, key) 116 117 def __setattr__(self, key, value): 118 self.__dict__['ini'].SetValue(key, value) 119 setattr(self.__dict__['ini'], key, value) 120 121 def __str__(self): 122 ini = self.__dict__['ini'] 123 clsname = type(ini).__name__ 124 filename = '' 125 if hasattr(ini, 'filename'): 126 filename = ini.filename + ' ' 127 count = len(ini.GetKeys()) 128 return '%(clsname)s %(filename)swith %(count)s entries' % locals() 129 130 def __eq__(self, _): 131 return NotImplemented 132 133 134 def SetClusterPrefs(prefsinst): 135 import blue 136 if prefsinst.GetValue('clusterName', None) is None: 137 prefsinst.clusterName = blue.pyos.GetEnv().get('COMPUTERNAME', 'LOCALHOST') + '@' + blue.pyos.GetEnv().get('USERDOMAIN', 'NODOMAIN') 138 if prefsinst.GetValue('clusterMode', None) is None: 139 prefsinst.clusterMode = 'LOCAL' 140 prefsinst.clusterName = prefsinst.clusterName.upper() 141 prefsinst.clusterMode = prefsinst.clusterMode.upper() 142 143 144 boot = None 145 prefs = None 146 147 def Init(): 148 global prefs 149 global boot 150 import blue 151 from eveprefs.iniformat import IniIniFile 152 if blue.pyos.packaged and 'client' in blue.paths.ResolvePath(u'app:/'): 153 handler = Handler(IniIniFile('start', blue.paths.ResolvePath(u'root:/'), 1)) 154 else: 155 handler = Handler(IniIniFile('start', blue.paths.ResolvePath(u'app:/'), 1)) 156 boot = handler 157 packagedClient = blue.pyos.packaged and handler.role == 'client' 158 commonPath = blue.paths.ResolvePath(u'root:/common/') 159 if packagedClient: 160 commonPath = blue.paths.ResolvePath(u'root:/') 161 handler.keyval.update(IniIniFile('common', commonPath, 1).keyval) 162 settingsProfile = blue.os.GetStartupArgValue('settingsprofile') 163 if settingsProfile != '': 164 settingsProfile = '_' + settingsProfile 165 settingsProfile = settingsProfile.replace('\\', '_').replace('/', '_') 166 if '/LUA:OFF' in blue.pyos.GetArg() or boot.GetValue('role', None) != 'client': 167 if boot.GetValue('role', None) == 'client': 168 blue.paths.SetSearchPath('cache', blue.paths.ResolvePathForWriting(u'root:/cache')) 169 blue.paths.SetSearchPath('settings', blue.paths.ResolvePathForWriting(u'root:/settings%s' % settingsProfile)) 170 else: 171 blue.paths.SetSearchPath('cache', blue.paths.ResolvePathForWriting(u'app:/cache')) 172 blue.paths.SetSearchPath('settings', blue.paths.ResolvePathForWriting(u'app:/settings%s' % settingsProfile)) 173 cachepath = blue.paths.ResolvePathForWriting(u'cache:/') 174 settingspath = blue.paths.ResolvePathForWriting(u'settings:/') 175 prefsfilepath = cachepath 176 else: 177 import utillib as util 178 cachedir = util.GetClientUniqueFolderName() 179 root = blue.sysinfo.GetUserApplicationDataDirectory() + u'\\CCP\\EVE\\' 180 root = root.replace('\\', '/') 181 root = root + cachedir + u'/' 182 settingspath = root + u'settings%s/' % settingsProfile 183 cachepath = root + u'cache/' 184 blue.paths.SetSearchPath('cache', cachepath) 185 blue.paths.SetSearchPath('settings', settingspath) 186 prefsfilepath = settingspath.replace('\\', '/') 187 for path in (settingspath, cachepath): 188 try: 189 os.makedirs(path) 190 except OSError: 191 pass 192 193 handler = Handler(IniIniFile('prefs', prefsfilepath)) 194 prefs = handler 195 if hasattr(sys, 'setdefaultencoding'): 196 sys.setdefaultencoding(DEFAULT_ENCODING) 197 if boot.GetValue('role', None) == 'server': 198 if '/proxy' in blue.pyos.GetArg(): 199 boot.role = 'proxy' 200 SetClusterPrefs(handler) 201 if boot.GetValue('role', None) in ('proxy', 'server') and prefs.GetValue('mpi', False): 202 import MPI 203 return (boot, prefs)