| 4 | __metaclass__ = type |
| 5 | |
| 6 | class EnvironmentConfig: |
| 7 | def __init__(self, distutils_section='ALL', **kw): |
| 8 | self._distutils_section = distutils_section |
| 9 | self._conf_keys = kw |
| 10 | self._conf = None |
| 11 | self._hook_handler = None |
| 12 | |
| 13 | def dump_variable(self, name): |
| 14 | conf_desc = self._conf_keys[name] |
| 15 | hook, envvar, confvar, convert, append = conf_desc |
| 16 | if not convert: |
| 17 | convert = lambda x : x |
| 18 | print('%s.%s:' % (self._distutils_section, name)) |
| 19 | v = self._hook_handler(name, hook) |
| 20 | print(' hook : %s' % (convert(v),)) |
| 21 | if envvar: |
| 22 | v = os.environ.get(envvar, None) |
| 23 | print(' environ: %s' % (convert(v),)) |
| 24 | if confvar and self._conf: |
| 25 | v = self._conf.get(confvar, (None, None))[1] |
| 26 | print(' config : %s' % (convert(v),)) |
| 27 | |
| 28 | def dump_variables(self): |
| 29 | for name in self._conf_keys: |
| 30 | self.dump_variable(name) |
| 31 | |
| 32 | def __getattr__(self, name): |
| 33 | try: |
| 34 | conf_desc = self._conf_keys[name] |
| 35 | except KeyError: |
| 36 | raise AttributeError( |
| 37 | f"'EnvironmentConfig' object has no attribute '{name}'" |
| 38 | ) from None |
| 39 | |
| 40 | return self._get_var(name, conf_desc) |
| 41 | |
| 42 | def get(self, name, default=None): |
| 43 | try: |
| 44 | conf_desc = self._conf_keys[name] |
| 45 | except KeyError: |
| 46 | return default |
| 47 | var = self._get_var(name, conf_desc) |
| 48 | if var is None: |
| 49 | var = default |
| 50 | return var |
| 51 | |
| 52 | def _get_var(self, name, conf_desc): |
| 53 | hook, envvar, confvar, convert, append = conf_desc |
| 54 | if convert is None: |
| 55 | convert = lambda x: x |
| 56 | var = self._hook_handler(name, hook) |
| 57 | if envvar is not None: |
| 58 | envvar_contents = os.environ.get(envvar) |
| 59 | if envvar_contents is not None: |
| 60 | envvar_contents = convert(envvar_contents) |
| 61 | if var and append: |
| 62 | if os.environ.get('NPY_DISTUTILS_APPEND_FLAGS', '1') == '1': |
| 63 | var.extend(envvar_contents) |