@app.command()asyncdefversion():"""Get the current Prefect version."""importsqlite3fromprefect.server.utilities.databaseimportget_dialectfromprefect.settingsimportPREFECT_API_DATABASE_CONNECTION_URLversion_info={"Version":prefect.__version__,"API version":SERVER_API_VERSION,"Python version":platform.python_version(),"Git commit":prefect.__version_info__["full-revisionid"][:8],"Built":pendulum.parse(prefect.__version_info__["date"]).to_day_datetime_string(),"OS/Arch":f"{sys.platform}/{platform.machine()}","Profile":prefect.context.get_settings_context().profile.name,}server_type:strtry:# We do not context manage the client because when using an ephemeral app we do not# want to create the database or run migrationsclient=prefect.get_client()server_type=client.server_type.valueexceptException:server_type="<client error>"version_info["Server type"]=server_type.lower()# TODO: Consider adding an API route to retrieve this information?ifserver_type==ServerType.EPHEMERAL.value:database=get_dialect(PREFECT_API_DATABASE_CONNECTION_URL.value()).nameversion_info["Server"]={"Database":database}ifdatabase=="sqlite":version_info["Server"]["SQLite version"]=sqlite3.sqlite_versiondefdisplay(object:dict,nesting:int=0):# Recursive display of a dictionary with nestingforkey,valueinobject.items():key+=":"ifisinstance(value,dict):app.console.print(key)returndisplay(value,nesting+2)prefix=" "*nestingapp.console.print(f"{prefix}{key.ljust(20-len(prefix))}{value}")display(version_info)