dbt/adapters/maxcompute/credentials.py (89 lines of code) (raw):
from dataclasses import dataclass
from typing import Optional
from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config
from dbt.adapters.contracts.connection import Credentials
from odps import ODPS
from odps.accounts import CredentialProviderAccount
@dataclass
class MaxComputeCredentials(Credentials):
endpoint: str
# auth config: All configuration items supported by alibabacloud_credentials
# It should be noted that in order to avoid ambiguity,
# `type` becomes `auth_type`, `policy` becomes `auth_policy`, `host` becomes `auth_host`,
# `timeout` becomes `auth_timeout`, `connect_timeout` becomes `auth_connect_timeout`, `proxy` becomes `auth_proxy`
auth_type: str = "access_key"
access_key_id: Optional[str] = None
access_key_secret: Optional[str] = None
security_token: Optional[str] = None
bearer_token: Optional[str] = None
duration_seconds: Optional[int] = None
role_arn: Optional[str] = None
oidc_provider_arn: Optional[str] = None
oidc_token_file_path: Optional[str] = None
auth_policy: Optional[str] = None
role_session_expiration: Optional[int] = None
role_session_name: Optional[str] = None
public_key_id: Optional[str] = None
private_key_file: Optional[str] = None
role_name: Optional[str] = None
auth_host: Optional[str] = None
auth_timeout: Optional[int] = 1000
auth_connect_timeout: Optional[int] = 1000
auth_proxy: Optional[str] = None
credentials_uri: Optional[str] = None
disable_imds_v1: Optional[bool] = False
enable_imds_v2: Optional[bool] = False
metadata_token_duration: Optional[int] = 21600
sts_endpoint: Optional[str] = None
_ALIASES = {
"project": "database",
"ak": "access_key_id",
"sk": "access_key_secret",
"sts": "security_token",
"accessId": "access_key_id",
"accessKey": "access_key_secret",
}
@property
def type(self):
return "maxcompute"
@property
def unique_field(self):
return self.endpoint + "_" + self.database
def _connection_keys(self):
return "project", "database", "schema", "endpoint"
def odps(self):
if self.auth_type == "chain":
cred = Client()
else:
config = Config(
type=self.auth_type,
access_key_id=self.access_key_id,
access_key_secret=self.access_key_secret,
security_token=self.security_token,
bearer_token=self.bearer_token,
duration_seconds=self.duration_seconds,
role_arn=self.role_arn,
oidc_provider_arn=self.oidc_provider_arn,
oidc_token_file_path=self.oidc_token_file_path,
policy=self.auth_policy,
role_session_expiration=self.role_session_expiration,
role_session_name=self.role_session_name,
public_key_id=self.public_key_id,
private_key_file=self.private_key_file,
role_name=self.role_name,
host=self.auth_host,
timeout=self.auth_timeout,
connect_timeout=self.auth_connect_timeout,
proxy=self.auth_proxy,
credentials_uri=self.credentials_uri,
disable_imds_v1=self.disable_imds_v1,
enable_imds_v2=self.enable_imds_v2,
metadata_token_duration=self.metadata_token_duration,
sts_endpoint=self.sts_endpoint,
)
cred = Client(config)
account = CredentialProviderAccount(cred)
o = ODPS(
account=account,
project=self.database,
endpoint=self.endpoint,
)
o.schema = self.schema
return o