Salesforce Data Cloud Python Connector
Project description
salesforce-cdp-connector
A readonly CDP client for Python. This can be used to execute queries against CDP and load the data into python.
Usage
Installation
Install the package from Pypi using the command
pip install salesforce-cdp-connector
Quick Start
We have to create an instance of the SalesforceCDPConnection to connect to CDP.
The object can be created as follows:
Using JWT
from salesforcecdpconnector.connection import SalesforceCDPConnection
fd = open('./salesforce.key');
your_key = fd.read()
conn = SalesforceCDPConnection(login_url,
client_id='<client_id>',
username='<username>',
private_key=your_key
)
Using Username and Password
from salesforcecdpconnector.connection import SalesforceCDPConnection
conn = SalesforceCDPConnection(
'login_url',
'user_name',
'password',
'client_id',
'client_secret'
)
Using OAuth Tokens
from salesforcecdpconnector.connection import SalesforceCDPConnection
conn = SalesforceCDPConnection(login_url,
client_id='<client_id>',
client_secret='<client_secret>',
core_token='<core token>'
refresh_token='<refresh_token>'
)
Using Client Credentials
The Client Credentials flow is ideal for server-to-server integrations where no user context is required. This flow uses only the connected app's client ID and client secret to authenticate.
from salesforcecdpconnector.connection import SalesforceCDPConnection
conn = SalesforceCDPConnection(
login_url='<login_url>',
client_id='<client_id>',
client_secret='<client_secret>'
)
Note: To use Client Credentials flow, your connected app must be configured to allow it. See the official Salesforce documentation: Configure Client Credentials Flow for External Client Apps
Once the connection object is created the queries can be executed using cursor as follows
cur = conn.cursor()
cur.execute('<query>')
results = cur.fetchall()
The query results can also be directly extracted as a pandas dataframe
dataframe = conn.get_pandas_dataframe('<query>')
Using a non-default dataspace
conn = SalesforceCDPConnection(
'login_url',
'user_name',
'password',
'client_id',
'client_secret',
dataspace="my-dataspace",
)
Once the connection object is created the queries can be executed using cursor as follows, all queries will be to this specific dataspace my-dataspace
cur = conn.cursor()
cur.execute('<query>')
results = cur.fetchall()
Creating a connected App
- Log in to salesforce as an admin. In the top right corner, click on the gear icon and go to step
- In the left hand side, under Platform Tools, go to Apps > App Manager
- Click on New Connected App
- Fill in the required Basic Information fields.
- Under API (Enable OAuth Settings)
- Click on the checkbox to Enable OAuth Settings.
- Provide a callback URL.
- In the Selected OAuth Scopes, make sure that refresh_token, api, cdp_query_api, cdp_profile_api is selected.
- Click on Save to save the connected app
- From the page that opens up, click on the Manage Consumer Details to find your client id and client secret
Fetching Refresh Token
-
From the connected app, note down the below details:
- Client Id
- Client Secret
- Callback URL
-
Obtain the code
- From browser, go to the below url.
<LOGIN_URL>/services/oauth2/authorize?response_type=code&client_id=<client_id>&redirect_uri=<callback_url>- This will redirect you to the callback url. The redirected url will be of the form
<callback url>?code=<CODE> - Extract the CODE from the address bar to be used in next step. Check the network tab of browser if the addressbar doesn't show this.
-
Get core and refresh tokens
- Make a post call using curl or postman to the below url using the code retrieved in previous step.
<LOGIN_URL>/services/oauth2/token?code=<CODE>&grant_type=authorization_code&client_id=<clientId>&client_secret=<clientSecret>&redirect_uri=<callback_uri>- The response to the above post call will be a json with access_token and refresh_token
Developing
Install UV for dependency management
https://docs.astral.sh/uv/getting-started/installation/
Download dependencies
uv sync --all-extras --dev
Build the project
uv build
Test the project
uv run pytest
Bump dependencies
uv sync --resolution highest
Functionally test the project
First you'll need to follow the instructions above
Now you'll need to add the appropriate values to a .env file which you can make like so: cp .env.template .env
Now you can run the following (where the version in the .whl path is correct) and expect a query result, we also expect "salesforce" to not be present in example.py.lock
uv run --isolated --script example.py --with dist/salesforce_cdp_connector-1.0.16-py3-none-any.whl
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file salesforce_cdp_connector-1.0.19.tar.gz.
File metadata
- Download URL: salesforce_cdp_connector-1.0.19.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b6960fe6615236f3cd498415ea0ebdc131b8be4725e5baca492bf99b60dd162
|
|
| MD5 |
4d8e22a2f0456501869d71c1a09252e0
|
|
| BLAKE2b-256 |
944b0672da6787ccb6c7205507835be15f5c4845511b2b194d559e5872329160
|
File details
Details for the file salesforce_cdp_connector-1.0.19-py3-none-any.whl.
File metadata
- Download URL: salesforce_cdp_connector-1.0.19-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b934cdacedbe66c0b8b145b6c747342943e28c89a020cb35f9713888b10dda3
|
|
| MD5 |
f4c6d92bb5cd80c8a9f6e9839eb3c00a
|
|
| BLAKE2b-256 |
9832a92f31694b07032a5903a5f297a124f523f49ef8caec7c4dfd90baf0f18d
|