dlt 自定义配置简单说明
dlt 默认有一套自己的配置以及认证查找,有基于默认位置的,有基于环境变量的,如果我们希望将dlt 作为一个包来使用就需要自己扩展下
一些思路
- 直接复用dlt 自己的默认玩法,添加自己的路径,直接参考SettingsTomlProvider 的子类实现就行
- 直接自定义dlt.config.register_provider provider (当然也可以是secrets)好处是比较灵活强大,配置可以存储在任何地方
参考玩法
主要简单演示下实现SettingsTomlProvider的
- SettingsTomlProvider 模式
from dlt.common.configuration.providers.toml import SettingsTomlProvider,SecretsTomlProvider,ConfigTomlProvider
class MyConfigTomlProvider(SettingsTomlProvider):
def __init__(self, settings_dir: str, global_dir: str = None) -> None:
super().__init__("my_config.toml", False, ".dlt/config.toml", [settings_dir, global_dir], global_dir)
@property
def is_writable(self) -> bool:
return True
class MySecretsTomlProvider(SettingsTomlProvider):
def __init__(self, settings_dir: str, global_dir: str = None) -> None:
super().__init__("my_secrets.toml", True, ".dlt/secrets.toml", [settings_dir, global_dir], global_dir)
@property
def is_writable(self) -> bool:
return True
# 自己扩展了路径,etl_path 可以在自己开发的pipeline 中暴露就行了
dlt.config.register_provider(MyConfigTomlProvider(settings_dir=etl_path))
dlt.secrets.register_provider(MySecretsTomlProvider(settings_dir=etl_path))
- 官方一个简单示例
import dlt
from dlt.common import json
from dlt.common.configuration.providers import CustomLoaderDocProvider
# Create a function that loads a dictionary
def load_config():
with open("config.json", "rb") as f:
return json.load(f)
# Create the custom provider
provider = CustomLoaderDocProvider(
"my_json_provider",
load_config,
supports_secrets=False
)
# Register the provider with dlt
dlt.config.register_provider(provider)
说明
自定义配置provider 的价值还是很大的,可以实现灵活的配置管理
参考资料
https://dlthub.com/docs/general-usage/credentials
https://dlthub.com/docs/general-usage/credentials/advanced
https://dlthub.com/docs/general-usage/credentials/setup#select-a-configuration-layout
浙公网安备 33010602011771号