Skip to content

Commit

Permalink
handle dynamic imports with deprecation warning
Browse files Browse the repository at this point in the history
  • Loading branch information
kevingrismore committed Feb 7, 2025
1 parent 063e889 commit e62767b
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 35 deletions.
63 changes: 40 additions & 23 deletions src/integrations/prefect-dbt/prefect_dbt/__init__.py
Original file line number Diff line number Diff line change
@@ -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__
30 changes: 18 additions & 12 deletions src/integrations/prefect-dbt/prefect_dbt/cli/__init__.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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",
]

0 comments on commit e62767b

Please sign in to comment.