64 lines
2 KiB
Diff
64 lines
2 KiB
Diff
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()
|