Skip to content

Commit 81d2c8f

Browse files
zhaodongwang-msftMax Wang
andauthored
Users/zhaodongwang/remove default credentail (#26)
* remove default credential * remove unintended change --------- Co-authored-by: Max Wang <zhaodongwang@microsoft.com>
1 parent 77c4489 commit 81d2c8f

3 files changed

Lines changed: 15 additions & 27 deletions

File tree

README.md

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ A Python package allowing developers to connect to Dataverse environments for DD
2424
- Optional pandas integration (`PandasODataClient`) for DataFrame based create / get / query.
2525

2626
Auth:
27-
- Credential is optional; if omitted, the SDK uses `DefaultAzureCredential`.
28-
- You can pass any `azure.core.credentials.TokenCredential` you prefer; examples use `InteractiveBrowserCredential` for local runs.
27+
- Accept only an `azure.core.credentials.TokenCredential` credential.
2928
- Token scope used by the SDK: `https://<yourorg>.crm.dynamics.com/.default` (derived from `base_url`).
3029

3130
## API Reference (Summary)
@@ -111,21 +110,13 @@ For upload files functionalities, run quickstart_file_upload.py instead
111110

112111
### DataverseClient (recommended)
113112

114-
Tip: You can omit the credential and the SDK will use `DefaultAzureCredential` automatically:
115-
116-
```python
117-
from dataverse_sdk import DataverseClient
118-
119-
base_url = "https://yourorg.crm.dynamics.com"
120-
client = DataverseClient(base_url=base_url) # uses DefaultAzureCredential by default
121-
```
122-
123113
```python
124-
from azure.identity import DefaultAzureCredential
114+
from azure.identity import InteractiveBrowserCredential
125115
from dataverse_sdk import DataverseClient
126116

127117
base_url = "https://yourorg.crm.dynamics.com"
128-
client = DataverseClient(base_url=base_url, credential=DefaultAzureCredential())
118+
credential = InteractiveBrowserCredential() # or DeviceCodeCredential(), ClientSecretCredential(...), etc.
119+
client = DataverseClient(base_url=base_url, credential=credential)
129120

130121
# Create (returns list[str] of new GUIDs)
131122
account_id = client.create("account", {"name": "Acme, Inc.", "telephone1": "555-0100"})[0]

src/dataverse_sdk/auth.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
from __future__ import annotations
22

33
from dataclasses import dataclass
4-
from typing import Optional
54

6-
from azure.identity import DefaultAzureCredential
75
from azure.core.credentials import TokenCredential
86

97

@@ -14,14 +12,14 @@ class TokenPair:
1412

1513

1614
class AuthManager:
17-
"""Azure Identity-based authentication helper for Dataverse.
18-
19-
Uses DefaultAzureCredential by default, or a provided TokenCredential.
20-
"""
21-
22-
def __init__(self, credential: Optional[TokenCredential] = None) -> None:
23-
# Let callers inject any azure.identity credential; default to DAC
24-
self.credential: TokenCredential = credential or DefaultAzureCredential()
15+
"""Azure Identity-based authentication helper for Dataverse."""
16+
17+
def __init__(self, credential: TokenCredential) -> None:
18+
if not isinstance(credential, TokenCredential):
19+
raise TypeError(
20+
"credential must implement azure.core.credentials.TokenCredential."
21+
)
22+
self.credential: TokenCredential = credential
2523

2624
def acquire_token(self, scope: str) -> TokenPair:
2725
"""Acquire an access token for the given scope using Azure Identity."""

src/dataverse_sdk/client.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ class DataverseClient:
2525
base_url : str
2626
Your Dataverse environment URL, for example:
2727
``"https://<org>.crm.dynamics.com"``. A trailing slash is ignored.
28-
credential : azure.core.credentials.TokenCredential | None, optional
29-
Any Azure Identity credential. If omitted, the SDK uses
30-
``DefaultAzureCredential`` internally.
28+
credential : azure.core.credentials.TokenCredential
29+
Azure Identity credential.
3130
config : DataverseConfig | None, optional
3231
Optional configuration (language code, SQL API name, HTTP timeouts/retries).
3332
@@ -40,7 +39,7 @@ class DataverseClient:
4039
def __init__(
4140
self,
4241
base_url: str,
43-
credential: Optional[TokenCredential] = None,
42+
credential: TokenCredential,
4443
config: Optional[DataverseConfig] = None,
4544
) -> None:
4645
self.auth = AuthManager(credential)

0 commit comments

Comments
 (0)