| import json |
| import platform |
| import sys |
| from typing import Dict |
|
|
| from . import __version__ as pyjwt_version |
|
|
| try: |
| import cryptography |
|
|
| cryptography_version = cryptography.__version__ |
| except ModuleNotFoundError: |
| cryptography_version = "" |
|
|
|
|
| def info() -> Dict[str, Dict[str, str]]: |
| """ |
| Generate information for a bug report. |
| Based on the requests package help utility module. |
| """ |
| try: |
| platform_info = { |
| "system": platform.system(), |
| "release": platform.release(), |
| } |
| except OSError: |
| platform_info = {"system": "Unknown", "release": "Unknown"} |
|
|
| implementation = platform.python_implementation() |
|
|
| if implementation == "CPython": |
| implementation_version = platform.python_version() |
| elif implementation == "PyPy": |
| pypy_version_info = sys.pypy_version_info |
| implementation_version = ( |
| f"{pypy_version_info.major}." |
| f"{pypy_version_info.minor}." |
| f"{pypy_version_info.micro}" |
| ) |
| if pypy_version_info.releaselevel != "final": |
| implementation_version = "".join( |
| [ |
| implementation_version, |
| pypy_version_info.releaselevel, |
| ] |
| ) |
| else: |
| implementation_version = "Unknown" |
|
|
| return { |
| "platform": platform_info, |
| "implementation": { |
| "name": implementation, |
| "version": implementation_version, |
| }, |
| "cryptography": {"version": cryptography_version}, |
| "pyjwt": {"version": pyjwt_version}, |
| } |
|
|
|
|
| def main() -> None: |
| """Pretty-print the bug information as JSON.""" |
| print(json.dumps(info(), sort_keys=True, indent=2)) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|