| Viewing file:  environment.py (3.01 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
import osfrom distutils.dist import Distribution
 
 __metaclass__ = type
 
 class EnvironmentConfig:
 def __init__(self, distutils_section='ALL', **kw):
 self._distutils_section = distutils_section
 self._conf_keys = kw
 self._conf = None
 self._hook_handler = None
 
 def dump_variable(self, name):
 conf_desc = self._conf_keys[name]
 hook, envvar, confvar, convert, append = conf_desc
 if not convert:
 convert = lambda x : x
 print('%s.%s:' % (self._distutils_section, name))
 v = self._hook_handler(name, hook)
 print('  hook   : %s' % (convert(v),))
 if envvar:
 v = os.environ.get(envvar, None)
 print('  environ: %s' % (convert(v),))
 if confvar and self._conf:
 v = self._conf.get(confvar, (None, None))[1]
 print('  config : %s' % (convert(v),))
 
 def dump_variables(self):
 for name in self._conf_keys:
 self.dump_variable(name)
 
 def __getattr__(self, name):
 try:
 conf_desc = self._conf_keys[name]
 except KeyError:
 raise AttributeError(
 f"'EnvironmentConfig' object has no attribute '{name}'"
 ) from None
 
 return self._get_var(name, conf_desc)
 
 def get(self, name, default=None):
 try:
 conf_desc = self._conf_keys[name]
 except KeyError:
 return default
 var = self._get_var(name, conf_desc)
 if var is None:
 var = default
 return var
 
 def _get_var(self, name, conf_desc):
 hook, envvar, confvar, convert, append = conf_desc
 if convert is None:
 convert = lambda x: x
 var = self._hook_handler(name, hook)
 if envvar is not None:
 envvar_contents = os.environ.get(envvar)
 if envvar_contents is not None:
 envvar_contents = convert(envvar_contents)
 if var and append:
 if os.environ.get('NPY_DISTUTILS_APPEND_FLAGS', '1') == '1':
 var.extend(envvar_contents)
 else:
 # NPY_DISTUTILS_APPEND_FLAGS was explicitly set to 0
 # to keep old (overwrite flags rather than append to
 # them) behavior
 var = envvar_contents
 else:
 var = envvar_contents
 if confvar is not None and self._conf:
 if confvar in self._conf:
 source, confvar_contents = self._conf[confvar]
 var = convert(confvar_contents)
 return var
 
 
 def clone(self, hook_handler):
 ec = self.__class__(distutils_section=self._distutils_section,
 **self._conf_keys)
 ec._hook_handler = hook_handler
 return ec
 
 def use_distribution(self, dist):
 if isinstance(dist, Distribution):
 self._conf = dist.get_option_dict(self._distutils_section)
 else:
 self._conf = dist
 
 |