diff --git a/cognite/pygen/_settings.py b/cognite/pygen/_settings.py index 1e0e19e60..624e02278 100644 --- a/cognite/pygen/_settings.py +++ b/cognite/pygen/_settings.py @@ -27,6 +27,9 @@ class PygenSettings(BaseModel): client_id: Argument = Argument(default=None, help="Client ID for connecting to CDF") client_secret: Argument = Argument(default=None, help="Client secret for connecting to CDF") cdf_cluster: Argument = Argument(default=None, help="CDF Cluster to connect to") + cdf_url: Argument = Argument( + default=None, help="CDF base URL override, e.g. for private link (https://p001.plink..cognitedata.com)" + ) cdf_project: Argument = Argument(default=None, help="CDF Project to connect to") output_dir: Argument = Argument(default=None, help="Output directory for generated SDK") top_level_package: Argument = Argument(default="my_domain.client", help="Package name for the generated client.") diff --git a/cognite/pygen/cli.py b/cognite/pygen/cli.py index 0d62de6b8..fefdd9d9b 100644 --- a/cognite/pygen/cli.py +++ b/cognite/pygen/cli.py @@ -64,6 +64,9 @@ def generate( cdf_cluster: str = typer.Option( default=loaded_settings.cdf_cluster.default, help=loaded_settings.cdf_cluster.help ), + cdf_url: Optional[str] = typer.Option( + default=loaded_settings.cdf_url.default, help=loaded_settings.cdf_url.help + ), cdf_project: str = typer.Option( default=loaded_settings.cdf_project.default, help=loaded_settings.cdf_project.help ), @@ -98,9 +101,16 @@ def generate( ) client = CogniteClient(clientConfig) else: - client = CogniteClient.default_oauth_client_credentials( - cdf_project, cdf_cluster, tenant_id, client_id, client_secret + credentials = OAuthClientCredentials.default_for_azure_ad( + tenant_id, client_id, client_secret, cdf_cluster + ) + clientConfig = ClientConfig( + client_name="pygen", + project=cdf_project, + credentials=credentials, + base_url=cdf_url or f"https://{cdf_cluster}.cognitedata.com", ) + client = CogniteClient(clientConfig) data_models: list[tuple[str, str, str]] if settings and settings.data_models: data_models = settings.data_models @@ -140,6 +150,7 @@ def generate( # type: ignore[misc] client_secret: Annotated[str, typer.Option(..., help="Client Secret for connecting to CDF")], cdf_cluster: Annotated[str, typer.Option(..., help=default_settings.cdf_cluster.help)], cdf_project: Annotated[str, typer.Option(..., help=default_settings.cdf_project.help)], + cdf_url: Annotated[Optional[str], typer.Option(..., help=default_settings.cdf_url.help)] = None, tenant_id: Annotated[Optional[str], typer.Option(..., help=default_settings.tenant_id.help)] = None, token_url: Annotated[Optional[str], typer.Option(..., help=default_settings.token_url.help)] = None, scopes: Annotated[Optional[str], typer.Option(..., help=default_settings.scopes.help)] = None, @@ -175,9 +186,16 @@ def generate( # type: ignore[misc] ) client = CogniteClient(clientConfig) elif tenant_id: - client = CogniteClient.default_oauth_client_credentials( - cdf_project, cdf_cluster, tenant_id, client_id, client_secret + credentials = OAuthClientCredentials.default_for_azure_ad( + tenant_id, client_id, client_secret, cdf_cluster ) + clientConfig = ClientConfig( + client_name="pygen", + project=cdf_project, + credentials=credentials, + base_url=cdf_url or f"https://{cdf_cluster}.cognitedata.com", + ) + client = CogniteClient(clientConfig) else: print("Either tenant-id or token-url is required parameters") raise typer.Exit(code=1) diff --git a/cognite/pygen/utils/cdf.py b/cognite/pygen/utils/cdf.py index 801ab6e0f..35da8cfa3 100644 --- a/cognite/pygen/utils/cdf.py +++ b/cognite/pygen/utils/cdf.py @@ -56,6 +56,8 @@ def load_cognite_client_from_toml( cdf_cluster = "" client_id = "" client_secret = "" + # Optional: override base URL, e.g. for private link + base_url = "https://.plink..cognitedata.com" ``` Args: @@ -73,10 +75,14 @@ def load_cognite_client_from_toml( toml_content = toml_content[section] login_flow = toml_content.pop("login_flow", None) + base_url = toml_content.pop("base_url", None) if login_flow == "interactive": - return CogniteClient.default_oauth_interactive(**toml_content) + client = CogniteClient.default_oauth_interactive(**toml_content) else: - return CogniteClient.default_oauth_client_credentials(**toml_content) + client = CogniteClient.default_oauth_client_credentials(**toml_content) + if base_url: + client.config.base_url = base_url + return client class _CogniteCoreResourceAPI(Protocol[T_CogniteResourceList]):