diff --git a/sqlite_utils/cli.py b/sqlite_utils/cli.py index 9b9ee20e..470d93be 100644 --- a/sqlite_utils/cli.py +++ b/sqlite_utils/cli.py @@ -14,7 +14,7 @@ NoTable, quote_identifier, ) -from sqlite_utils.plugins import pm, get_plugins +from sqlite_utils.plugins import ensure_plugins_loaded, pm, get_plugins from sqlite_utils.utils import maximize_csv_field_size_limit from sqlite_utils import recipes import textwrap @@ -3264,6 +3264,7 @@ def plugins_list(): click.echo(json.dumps(get_plugins(), indent=2)) +ensure_plugins_loaded() pm.hook.register_commands(cli=cli) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index aacdc893..f989bedc 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -40,7 +40,7 @@ Tuple, ) import uuid -from sqlite_utils.plugins import pm +from sqlite_utils.plugins import ensure_plugins_loaded, pm try: from sqlite_dump import iterdump # type: ignore[import-not-found] @@ -382,6 +382,7 @@ def __init__( self._registered_functions: set = set() self.use_counts_table = use_counts_table if execute_plugins: + ensure_plugins_loaded() pm.hook.prepare_connection(conn=self.conn) self.strict = strict diff --git a/sqlite_utils/plugins.py b/sqlite_utils/plugins.py index 457a9071..4b445132 100644 --- a/sqlite_utils/plugins.py +++ b/sqlite_utils/plugins.py @@ -6,10 +6,15 @@ pm: pluggy.PluginManager = pluggy.PluginManager("sqlite_utils") pm.add_hookspecs(hookspecs) +_plugins_loaded = False -if not getattr(sys, "_called_from_test", False): - # Only load plugins if not running tests + +def ensure_plugins_loaded() -> None: + global _plugins_loaded + if _plugins_loaded or getattr(sys, "_called_from_test", False): + return pm.load_setuptools_entrypoints("sqlite_utils") + _plugins_loaded = True def get_plugins() -> List[Dict[str, Union[str, List[str]]]]: