mach-nix/lib/extractor/distutils.patch

65 lines
2 KiB
Diff
Raw Normal View History

diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
index d603d4a45a..a589477b8e 100644
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -120,6 +120,59 @@ def setup (**attrs):
# the setup script, but be overridden by the command line.
dist.parse_config_files()
+ def dump():
+ def jsonify(obj):
+ if isinstance(obj, str):
+ return obj
+ if sys.version_info < (3, 0) and isinstance(obj, unicode):
+ return str(obj)
+ if isinstance(obj, bytes):
+ return obj.decode()
+ if isinstance(obj, dict):
+ return {jsonify(key): jsonify(val) for key, val in obj.items()}
+ try:
+ # convert to list if possible
+ return [jsonify(elem) for elem in obj]
+ except:
+ pass
+ # fallback to string repr. of obj
+ return str(obj)
+
+ keys = (
+ 'install_requires',
+ 'setup_requires',
+ 'extras_require',
+ 'tests_require',
+ 'python_requires'
+ )
+ meta_keys = (
+ 'name',
+ 'version'
+ )
+ data = {}
+ for key in keys:
+ val = getattr(dist, key, None)
+ if not val:
+ continue
+ data[key] = jsonify(val)
+ for key in meta_keys:
+ val = getattr(dist.metadata, key, None)
+ if not val:
+ continue
+ data[key] = jsonify(val)
+ return data
+ if os.environ.get("dump_setup_attrs", None):
+ import json
+ try:
+ data = dump()
+ except:
+ import traceback
+ data = dict(traceback=traceback.format_exc())
+ out = os.environ.get("out_file")
+ with open(out, 'w') as f:
+ json.dump(data, f, indent=2)
+ exit()
+
if DEBUG:
print("options (after parsing config files):")
dist.dump_option_dicts()