11import sys
2- from importlib .metadata import EntryPoint
2+ from functools import cache
3+ from importlib .metadata import Distribution , EntryPoint
34from importlib .metadata import distribution as importlib_distribution
45from importlib .metadata import entry_points
56
1617
1718
1819def version_callback (value : bool ):
19- if value :
20- typer .echo (f"Pyodide CLI Version: { __version__ } " )
21- raise typer .Exit ()
20+ if not value :
21+ return
22+
23+ typer .echo (f"pyodide CLI version: { __version__ } " )
24+
25+ eps = entry_points (group = "pyodide.cli" )
26+ # filter out duplicate pkgs
27+ pkgs = {_entrypoint_to_pkgname (ep ): _entrypoint_to_version (ep ) for ep in eps }
28+ for pkg , version in pkgs .items ():
29+ typer .echo (f"{ pkg } version: { version } " )
30+
31+ raise typer .Exit ()
2232
2333
2434@app .callback (no_args_is_help = True )
2535def callback (
2636 ctx : typer .Context ,
2737 version : bool = typer .Option (
28- None , "--version" , callback = version_callback , is_eager = True
38+ None ,
39+ "--version" ,
40+ callback = version_callback ,
41+ is_eager = True ,
42+ help = "Show the version of the Pyodide CLI" ,
2943 ),
3044):
3145 """A command line interface for Pyodide.
@@ -36,14 +50,26 @@ def callback(
3650 pass
3751
3852
39- def _entrypoint_to_pkgname ( entrypoint : EntryPoint ) -> str :
40- """Find package name from entrypoint"""
41-
53+ @ cache
54+ def _entrypoint_to_distribution ( entrypoint : EntryPoint ) -> Distribution :
55+ """Find package distribution from entrypoint"""
4256 top_level = entrypoint .value .split ("." )[0 ]
4357 dist = importlib_distribution (top_level )
58+ return dist
59+
60+
61+ def _entrypoint_to_pkgname (entrypoint : EntryPoint ) -> str :
62+ """Find package name from entrypoint"""
63+ dist = _entrypoint_to_distribution (entrypoint )
4464 return dist .metadata ["name" ]
4565
4666
67+ def _entrypoint_to_version (entrypoint : EntryPoint ) -> str :
68+ """Find package version from entrypoint"""
69+ dist = _entrypoint_to_distribution (entrypoint )
70+ return dist .metadata ["version" ]
71+
72+
4773def _inject_origin (docstring : str , origin : str ) -> str :
4874 return f"{ docstring } \n \n { origin } "
4975
0 commit comments