Spaces:
Sleeping
Sleeping
import os | |
from 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 | |