Spaces:
				
			
			
	
			
			
		Paused
		
	
	
	
			
			
	
	
	
	
		
		
		Paused
		
	| 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 | |
