From e626b74a3fd03776a11367f93b25412b2bc56935 Mon Sep 17 00:00:00 2001 From: Benjamin Himes Date: Fri, 7 Feb 2025 13:58:17 +0200 Subject: [PATCH 1/2] Uses uvloop if it's installed --- bittensor_cli/cli.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/bittensor_cli/cli.py b/bittensor_cli/cli.py index 99841558b..a7ba78c89 100755 --- a/bittensor_cli/cli.py +++ b/bittensor_cli/cli.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import asyncio import curses +import importlib import os.path import re import ssl @@ -504,6 +505,7 @@ class CLIManager: subnets_app: typer.Typer weights_app: typer.Typer utils_app = typer.Typer(epilog=_epilog) + runner = asyncio def __init__(self): self.config = { @@ -937,15 +939,12 @@ async def _run(): try: raise typer.Exit() except Exception as e: # ensures we always exit cleanly - if not isinstance(e, (typer.Exit, RuntimeError)): # temporarily to handle multiple run commands in one session + if not isinstance( + e, (typer.Exit, RuntimeError) + ): # temporarily to handle multiple run commands in one session err_console.print(f"An unknown error has occurred: {e}") - if sys.version_info < (3, 10): - # For Python 3.9 or lower - return asyncio.get_event_loop().run_until_complete(_run()) - else: - # For Python 3.10 or higher - return asyncio.run(_run()) + return self.runner.run(_run()) def main_callback( self, @@ -996,6 +995,16 @@ def main_callback( if k in self.config.keys(): self.config[k] = v + try: + uvloop = importlib.import_module("uvloop") + if sys.version_info >= (3, 11): + self.runner = uvloop + else: + uvloop.install() + self.runner = asyncio + except ModuleNotFoundError: + self.runner = asyncio + def verbosity_handler(self, quiet: bool, verbose: bool): if quiet and verbose: err_console.print("Cannot specify both `--quiet` and `--verbose`") From 7fb155f2c5ae7f2f207644a2cca403c005f54f48 Mon Sep 17 00:00:00 2001 From: Benjamin Himes Date: Mon, 10 Feb 2025 20:13:22 +0200 Subject: [PATCH 2/2] Restored 3.9 functionality. --- bittensor_cli/cli.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/bittensor_cli/cli.py b/bittensor_cli/cli.py index a7ba78c89..dbe6cdf17 100755 --- a/bittensor_cli/cli.py +++ b/bittensor_cli/cli.py @@ -505,7 +505,7 @@ class CLIManager: subnets_app: typer.Typer weights_app: typer.Typer utils_app = typer.Typer(epilog=_epilog) - runner = asyncio + asyncio_runner = asyncio def __init__(self): self.config = { @@ -944,7 +944,7 @@ async def _run(): ): # temporarily to handle multiple run commands in one session err_console.print(f"An unknown error has occurred: {e}") - return self.runner.run(_run()) + return self.asyncio_runner(_run()) def main_callback( self, @@ -995,15 +995,19 @@ def main_callback( if k in self.config.keys(): self.config[k] = v - try: - uvloop = importlib.import_module("uvloop") - if sys.version_info >= (3, 11): - self.runner = uvloop - else: - uvloop.install() - self.runner = asyncio - except ModuleNotFoundError: - self.runner = asyncio + if sys.version_info < (3, 10): + # For Python 3.9 or lower + self.asyncio_runner = asyncio.get_event_loop().run_until_complete + else: + try: + uvloop = importlib.import_module("uvloop") + if sys.version_info >= (3, 11): + self.asyncio_runner = uvloop.run + else: + uvloop.install() + self.asyncio_runner = asyncio.run + except ModuleNotFoundError: + self.asyncio_runner = asyncio def verbosity_handler(self, quiet: bool, verbose: bool): if quiet and verbose: