NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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