def show_versions(as_json: str | bool = False) -> None: """ Provide useful information, important for bug reports. It comprises info about hosting operation system, pandas version, and versions of other installed relative packages. Parameters ---------- as_json : str or bool, default: False * If False, outputs info in a human readable form to the console. * If str, it will be considered as a path to a file. Info will be written to that file in JSON format. * If True, outputs info in JSON format to the console. Notes ----- This is mostly a copy of pandas.show_versions() but adds separate listing of Modin-specific dependencies. """ sys_info = _get_sys_info() sys_info["commit"] = get_versions()["full-revisionid"] modin_deps = _get_modin_deps_info() deps = _get_dependency_info() if as_json: j = { "system": sys_info, "modin dependencies": modin_deps, "dependencies": deps, } if as_json is True: sys.stdout.writelines(json.dumps(j, indent=2)) else: assert isinstance(as_json, str) # needed for mypy with codecs.open(as_json, "wb", encoding="utf8") as f: json.dump(j, f, indent=2) else: assert isinstance(sys_info["LOCALE"], dict) # needed for mypy language_code = sys_info["LOCALE"]["language-code"] encoding = sys_info["LOCALE"]["encoding"] sys_info["LOCALE"] = f"{language_code}.{encoding}" maxlen = max(max(len(x) for x in d) for d in (deps, modin_deps)) print("\nINSTALLED VERSIONS") print("------------------") for k, v in sys_info.items(): print(f"{k:<{maxlen}}: {v}") for name, d in (("Modin", modin_deps), ("pandas", deps)): print(f"\n{name} dependencies\n{'-' * (len(name) + 13)}") for k, v in d.items(): print(f"{k:<{maxlen}}: {v}")
def test_show_versions_console_json(capsys): # GH39701 pd.show_versions(as_json=True) stdout = capsys.readouterr().out # check valid json is printed to the console if as_json is True result = json.loads(stdout) # Basic check that each version element is found in output expected = { "system": _get_sys_info(), "dependencies": _get_dependency_info(), } assert result == expected
def test_show_versions(tmpdir): # GH39701 as_json = os.path.join(tmpdir, "test_output.json") pd.show_versions(as_json=as_json) with open(as_json) as fd: # check if file output is valid JSON, will raise an exception if not result = json.load(fd) # Basic check that each version element is found in output expected = { "system": _get_sys_info(), "dependencies": _get_dependency_info(), } assert result == expected