diff --git a/src/integrations/prefect-dbt/prefect_dbt/__init__.py b/src/integrations/prefect-dbt/prefect_dbt/__init__.py index 722cc0f4486d..3155934736e2 100644 --- a/src/integrations/prefect-dbt/prefect_dbt/__init__.py +++ b/src/integrations/prefect-dbt/prefect_dbt/__init__.py @@ -1,28 +1,45 @@ from . import _version +import warnings from .core import PrefectDbtSettings, PrefectDbtRunner -from .cloud import DbtCloudCredentials, DbtCloudJob # noqa -from .cli import ( # noqa - DbtCliProfile, - GlobalConfigs, - MissingExtrasRequireError, - TargetConfigs, - DbtCoreOperation, -) - -try: - from .cli.configs.snowflake import SnowflakeTargetConfigs # noqa -except MissingExtrasRequireError: - pass - -try: - from .cli.configs.bigquery import BigQueryTargetConfigs # noqa -except MissingExtrasRequireError: - pass - -try: - from .cli.configs.postgres import PostgresTargetConfigs # noqa -except MissingExtrasRequireError: - pass +from .cloud import DbtCloudCredentials, DbtCloudJob + +# Define the mapping of CLI-related attributes to their import locations +_public_api: dict[str, tuple[str, str]] = { + "DbtCliProfile": ("prefect_dbt", "cli"), + "GlobalConfigs": ("prefect_dbt", "cli"), + "MissingExtrasRequireError": ("prefect_dbt", "cli"), + "TargetConfigs": ("prefect_dbt", "cli"), + "DbtCoreOperation": ("prefect_dbt", "cli"), + "SnowflakeTargetConfigs": ("prefect_dbt", "cli.configs.snowflake"), + "BigQueryTargetConfigs": ("prefect_dbt", "cli.configs.bigquery"), + "PostgresTargetConfigs": ("prefect_dbt", "cli.configs.postgres"), +} + +# Declare API for type-checkers +__all__ = [ + "__version__", + "PrefectDbtSettings", + "PrefectDbtRunner", + "DbtCloudCredentials", + "DbtCloudJob", +] + + +def __getattr__(attr_name: str): + if attr_name in _public_api: + package, module = _public_api[attr_name] + try: + import importlib + + mod = importlib.import_module(f".{module}", package=package) + result = getattr(mod, attr_name) + return result + except ImportError: + if "configs" in module: # For the database-specific configs + return None + raise + raise AttributeError(f"module '{__name__}' has no attribute '{attr_name}'") + __version__ = _version.__version__ diff --git a/src/integrations/prefect-dbt/prefect_dbt/cli/__init__.py b/src/integrations/prefect-dbt/prefect_dbt/cli/__init__.py index 6c9d0c3f4bae..e728b4219d07 100644 --- a/src/integrations/prefect-dbt/prefect_dbt/cli/__init__.py +++ b/src/integrations/prefect-dbt/prefect_dbt/cli/__init__.py @@ -1,16 +1,10 @@ -from warnings import warn +import warnings -from prefect._internal.compatibility.deprecated import generate_deprecation_message - -warn( - generate_deprecation_message( - name="prefect_dbt.cli", - start_date="Feb 2025", - end_date="Jul 2025", - help="Please use the PrefectDbtRunner class in prefect_dbt.core instead.", - ), - DeprecationWarning, - stacklevel=2, +warnings.warn( + "prefect_dbt.cli is deprecated and will be removed in a future release. " + "Please use prefect_dbt.core instead.", + UserWarning, + stacklevel=1, ) from .credentials import DbtCliProfile # noqa @@ -36,3 +30,15 @@ from .configs.postgres import PostgresTargetConfigs # noqa except MissingExtrasRequireError: pass + +# Re-export all imports to maintain the public API +__all__ = [ + "DbtCliProfile", + "DbtCoreOperation", + "TargetConfigs", + "GlobalConfigs", + "MissingExtrasRequireError", + "SnowflakeTargetConfigs", + "BigQueryTargetConfigs", + "PostgresTargetConfigs", +]