Skip to content

Commit 6fe470a

Browse files
authored
Feat: Additional Salesforce auth methods (#641)
* Salesforce different auth methods * Small test, readme adjusted * Typo fixes, correct imports, and get_proxies improved
1 parent 870446c commit 6fe470a

File tree

7 files changed

+462
-98
lines changed

7 files changed

+462
-98
lines changed

sources/salesforce/README.md

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,76 @@ Here, we chose BigQuery as the destination. Alternatively, you can also choose r
3737

3838
## Setup verified source and pipeline example
3939

40-
To grab credentials and initialize the verified source, please refer to the [full documentation here.](https://dlthub.com/docs/dlt-ecosystem/verified-sources/salesforce)
40+
To initialize the verified source, please refer to the [full documentation here.](https://dlthub.com/docs/dlt-ecosystem/verified-sources/salesforce)
4141

42-
## Add credentials
42+
## Add credentials and configs
4343

4444
1. Open `.dlt/secrets.toml`.
45-
2. Enter the user name, password and security token:
45+
2. Enter the username, password and security token:
4646
```toml
4747
# put your secret values and credentials here. do not share this file and do not push it to github
48-
[sources.salesforce]
48+
[sources.salesforce.credentials]
4949
user_name = "please set me up!" # Salesforce user name
5050
password = "please set me up!" # Salesforce password
5151
security_token = "please set me up!" # Salesforce security token generated
5252
```
53+
54+
Alternatively, you may authenticate using any method supported by the underlying `simple_salesforce` library. For instructions on obtaining these credentials, please consult Salesforce’s documentation.
55+
56+
- IP-whitelist + organization ID:
57+
```toml
58+
[sources.salesforce.credentials]
59+
user_name = "please set me up!"
60+
password = "please set me up!"
61+
organization_id = "please set me up!"
62+
```
63+
64+
- Session ID + instance:
65+
```toml
66+
[sources.salesforce.credentials]
67+
session_id = "please set me up!"
68+
instance = "please set me up!" # OR
69+
instance_url = "please set me up!"
70+
```
71+
72+
- JWT method:
73+
```toml
74+
[sources.salesforce.credentials]
75+
user_name = "please set me up!"
76+
consumer_key = "please set me up!"
77+
privatekey_file = "please set me up!" # OR
78+
privatekey = "please set me up!"
79+
instance_url = "please set me up!" # Optional
80+
```
81+
82+
- Connected app method:
83+
```toml
84+
[sources.salesforce.credentials]
85+
user_name = "please set me up!"
86+
password = "please set me up!"
87+
consumer_key = "please set me up!"
88+
consumer_secret = "please set me up!"
89+
```
5390

54-
3. Enter credentials for your chosen destination as per the [docs.](https://dlthub.com/docs/dlt-ecosystem/destinations/)
91+
- Client credentials method:
92+
```toml
93+
[sources.salesforce.credentials]
94+
consumer_key = "please set me up!"
95+
consumer_secret = "please set me up!"
96+
domain = "please set me up!"
97+
```
98+
99+
3. You can set up the following optional configs in your `.dlt/config.toml` file that will be used to connect to Salesforce:
100+
101+
```toml
102+
[sources.salesforce]
103+
domain = "please set me up!" # Set to "test" if sandbox
104+
version = "please set me up!" # Version of the Salesforce API to use, defaults to 59.0
105+
proxies = "please set me up!" # Mapping of protocols to proxy servers
106+
client_id = "please set me up!" # App identifier for Salesforce API usage tracking
107+
```
108+
109+
4. Enter credentials for your chosen destination as per the [docs.](https://dlthub.com/docs/dlt-ecosystem/destinations/)
55110

56111
## Run the pipeline example
57112

sources/salesforce/__init__.py

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,22 @@
1010
from dlt.sources import DltResource
1111
from dlt.sources import incremental
1212

13-
from typing import Iterable
13+
from typing import Iterable, Optional
1414

1515
import dlt
16-
from simple_salesforce import Salesforce
16+
from dlt.sources.helpers.requests import Session
1717
from dlt.common.typing import TDataItem
1818

19-
20-
from .helpers import get_records
19+
from .helpers.records import get_records
20+
from .helpers.client import SalesforceAuth, make_salesforce_client
2121

2222

2323
@dlt.source(name="salesforce")
2424
def salesforce_source(
25-
user_name: str = dlt.secrets.value,
26-
password: str = dlt.secrets.value,
27-
security_token: str = dlt.secrets.value,
25+
credentials: SalesforceAuth = dlt.secrets.value,
26+
session: Optional[Session] = None,
2827
) -> Iterable[DltResource]:
29-
"""
30-
Retrieves data from Salesforce using the Salesforce API.
31-
32-
Args:
33-
user_name (str): The username for authentication. Defaults to the value in the `dlt.secrets` object.
34-
password (str): The password for authentication. Defaults to the value in the `dlt.secrets` object.
35-
security_token (str): The security token for authentication. Defaults to the value in the `dlt.secrets` object.
36-
37-
Yields:
38-
DltResource: Data resources from Salesforce.
39-
"""
40-
41-
client = Salesforce(user_name, password, security_token)
28+
client = make_salesforce_client(credentials, session)
4229

4330
# define resources
4431
@dlt.resource(write_disposition="replace")

sources/salesforce/helpers.py

Lines changed: 0 additions & 70 deletions
This file was deleted.

sources/salesforce/helpers/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)