-
Notifications
You must be signed in to change notification settings - Fork 518
/
_pyyaml_pep517.py
51 lines (31 loc) · 1.12 KB
/
_pyyaml_pep517.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import inspect
def _bridge_build_meta():
import functools
import sys
from setuptools import build_meta
self_module = sys.modules[__name__]
for attr_name in build_meta.__all__:
attr_value = getattr(build_meta, attr_name)
if callable(attr_value):
setattr(self_module, attr_name, functools.partial(_expose_config_settings, attr_value))
class ActiveConfigSettings:
_current = {}
def __init__(self, config_settings):
self._config = config_settings
def __enter__(self):
type(self)._current = self._config
def __exit__(self, exc_type, exc_val, exc_tb):
type(self)._current = {}
@classmethod
def current(cls):
return cls._current
def _expose_config_settings(real_method, *args, **kwargs):
from contextlib import nullcontext
import inspect
sig = inspect.signature(real_method)
boundargs = sig.bind(*args, **kwargs)
config = boundargs.arguments.get('config_settings')
ctx = ActiveConfigSettings(config) if config else nullcontext()
with ctx:
return real_method(*args, **kwargs)
_bridge_build_meta()