salesforce-datacloud-connector 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- salesforce_datacloud_connector-2.0.0/.gitignore +136 -0
- salesforce_datacloud_connector-2.0.0/CHANGELOG.md +90 -0
- salesforce_datacloud_connector-2.0.0/PKG-INFO +544 -0
- salesforce_datacloud_connector-2.0.0/README.md +528 -0
- salesforce_datacloud_connector-2.0.0/pyproject.toml +58 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/__init__.py +321 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/_metadata_pg.py +358 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/api/__init__.py +1 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/api/client.py +521 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/api/models.py +334 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/auth/__init__.py +21 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/auth/_http.py +141 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/auth/direct_token.py +79 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/auth/oauth.py +475 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/auth/token_exchanger.py +210 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/connection.py +236 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/cursor.py +433 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/exceptions.py +165 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/http_options.py +57 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/metadata.py +80 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/sql/get_columns_query.sql +18 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/sql/get_tables_query.sql +19 -0
- salesforce_datacloud_connector-2.0.0/salesforce_datacloud_connector/types.py +298 -0
- salesforce_datacloud_connector-2.0.0/tests/__init__.py +1 -0
- salesforce_datacloud_connector-2.0.0/tests/_arrow_fixtures.py +79 -0
- salesforce_datacloud_connector-2.0.0/tests/_keys.py +14 -0
- salesforce_datacloud_connector-2.0.0/tests/test_api_client.py +1230 -0
- salesforce_datacloud_connector-2.0.0/tests/test_auth.py +445 -0
- salesforce_datacloud_connector-2.0.0/tests/test_auth_http.py +211 -0
- salesforce_datacloud_connector-2.0.0/tests/test_ci_configuration.py +176 -0
- salesforce_datacloud_connector-2.0.0/tests/test_connection.py +498 -0
- salesforce_datacloud_connector-2.0.0/tests/test_cursor.py +778 -0
- salesforce_datacloud_connector-2.0.0/tests/test_direct_token.py +80 -0
- salesforce_datacloud_connector-2.0.0/tests/test_e2e_offcore_smoke.py +244 -0
- salesforce_datacloud_connector-2.0.0/tests/test_e2e_real_datacloud.py +492 -0
- salesforce_datacloud_connector-2.0.0/tests/test_integration.py +764 -0
- salesforce_datacloud_connector-2.0.0/tests/test_jwt_and_http_options.py +201 -0
- salesforce_datacloud_connector-2.0.0/tests/test_metadata.py +44 -0
- salesforce_datacloud_connector-2.0.0/tests/test_metadata_pg.py +273 -0
- salesforce_datacloud_connector-2.0.0/tests/test_models.py +351 -0
- salesforce_datacloud_connector-2.0.0/tests/test_token_exchanger.py +739 -0
- salesforce_datacloud_connector-2.0.0/tests/test_types.py +248 -0
- salesforce_datacloud_connector-2.0.0/uv.lock +2632 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
.idea/
|
|
7
|
+
|
|
8
|
+
# C extensions
|
|
9
|
+
*.so
|
|
10
|
+
|
|
11
|
+
# Distribution / packaging
|
|
12
|
+
.Python
|
|
13
|
+
build/
|
|
14
|
+
develop-eggs/
|
|
15
|
+
dist/
|
|
16
|
+
downloads/
|
|
17
|
+
eggs/
|
|
18
|
+
.eggs/
|
|
19
|
+
lib/
|
|
20
|
+
lib64/
|
|
21
|
+
parts/
|
|
22
|
+
sdist/
|
|
23
|
+
var/
|
|
24
|
+
wheels/
|
|
25
|
+
pip-wheel-metadata/
|
|
26
|
+
share/python-wheels/
|
|
27
|
+
*.egg-info/
|
|
28
|
+
.installed.cfg
|
|
29
|
+
*.egg
|
|
30
|
+
MANIFEST
|
|
31
|
+
|
|
32
|
+
# PyInstaller
|
|
33
|
+
# Usually these files are written by a python script from a template
|
|
34
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
35
|
+
*.manifest
|
|
36
|
+
*.spec
|
|
37
|
+
|
|
38
|
+
# Installer logs
|
|
39
|
+
pip-log.txt
|
|
40
|
+
pip-delete-this-directory.txt
|
|
41
|
+
|
|
42
|
+
# Unit test / coverage reports
|
|
43
|
+
htmlcov/
|
|
44
|
+
.tox/
|
|
45
|
+
.nox/
|
|
46
|
+
.coverage
|
|
47
|
+
.coverage.*
|
|
48
|
+
.cache
|
|
49
|
+
nosetests.xml
|
|
50
|
+
coverage.xml
|
|
51
|
+
*.cover
|
|
52
|
+
*.py,cover
|
|
53
|
+
.hypothesis/
|
|
54
|
+
.pytest_cache/
|
|
55
|
+
.ruff_cache
|
|
56
|
+
|
|
57
|
+
# Translations
|
|
58
|
+
*.mo
|
|
59
|
+
*.pot
|
|
60
|
+
|
|
61
|
+
# Django stuff:
|
|
62
|
+
*.log
|
|
63
|
+
local_settings.py
|
|
64
|
+
db.sqlite3
|
|
65
|
+
db.sqlite3-journal
|
|
66
|
+
|
|
67
|
+
# Flask stuff:
|
|
68
|
+
instance/
|
|
69
|
+
.webassets-cache
|
|
70
|
+
|
|
71
|
+
# Scrapy stuff:
|
|
72
|
+
.scrapy
|
|
73
|
+
|
|
74
|
+
# Sphinx documentation
|
|
75
|
+
docs/_build/
|
|
76
|
+
|
|
77
|
+
# PyBuilder
|
|
78
|
+
target/
|
|
79
|
+
|
|
80
|
+
# Jupyter Notebook
|
|
81
|
+
.ipynb_checkpoints
|
|
82
|
+
|
|
83
|
+
# IPython
|
|
84
|
+
profile_default/
|
|
85
|
+
ipython_config.py
|
|
86
|
+
|
|
87
|
+
# pyenv
|
|
88
|
+
.python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
98
|
+
__pypackages__/
|
|
99
|
+
|
|
100
|
+
# Celery stuff
|
|
101
|
+
celerybeat-schedule
|
|
102
|
+
celerybeat.pid
|
|
103
|
+
|
|
104
|
+
# SageMath parsed files
|
|
105
|
+
*.sage.py
|
|
106
|
+
|
|
107
|
+
# Environments
|
|
108
|
+
.env
|
|
109
|
+
.venv
|
|
110
|
+
env/
|
|
111
|
+
venv/
|
|
112
|
+
ENV/
|
|
113
|
+
env.bak/
|
|
114
|
+
venv.bak/
|
|
115
|
+
|
|
116
|
+
# Spyder project settings
|
|
117
|
+
.spyderproject
|
|
118
|
+
.spyproject
|
|
119
|
+
|
|
120
|
+
# Rope project settings
|
|
121
|
+
.ropeproject
|
|
122
|
+
|
|
123
|
+
# mkdocs documentation
|
|
124
|
+
/site
|
|
125
|
+
|
|
126
|
+
# mypy
|
|
127
|
+
.mypy_cache/
|
|
128
|
+
.dmypy.json
|
|
129
|
+
dmypy.json
|
|
130
|
+
|
|
131
|
+
# Pyre type checker
|
|
132
|
+
.pyre/
|
|
133
|
+
|
|
134
|
+
# Mac files
|
|
135
|
+
.DS_Store
|
|
136
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.0.0](https://github.com/forcedotcom/salesforce-cdp-connector/compare/salesforce-datacloud-connector-2.0.0...salesforce-datacloud-connector-2.0.0) (2026-10-16)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **auth:** add Salesforce CLI authenticator for local/dev ([#63](https://github.com/forcedotcom/salesforce-cdp-connector/issues/63)) ([4706a87](https://github.com/forcedotcom/salesforce-cdp-connector/commit/4706a878ee53e6db3d1c4ca0e5601343a7a0d32f))
|
|
14
|
+
* **auth:** surface OAuth errors, retry token calls, refresh on 401, add cdp_token auth, harden JWT ([#70](https://github.com/forcedotcom/salesforce-cdp-connector/issues/70)) ([3f526c7](https://github.com/forcedotcom/salesforce-cdp-connector/commit/3f526c711206abb607eef927ecbda8dd71dce12b))
|
|
15
|
+
* **client:** send User-Agent header with optional caller identifier ([#67](https://github.com/forcedotcom/salesforce-cdp-connector/issues/67)) ([0dadc3b](https://github.com/forcedotcom/salesforce-cdp-connector/commit/0dadc3bc77261f402f311afed0469afbc0f90cc2))
|
|
16
|
+
* **threadsafety:** allow connections to be shared across threads ([#64](https://github.com/forcedotcom/salesforce-cdp-connector/issues/64)) ([62e2782](https://github.com/forcedotcom/salesforce-cdp-connector/commit/62e2782c7c2c0ee4c08278a62266151a2026bca9))
|
|
17
|
+
|
|
18
|
+
## [Unreleased]
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Query settings support: `connect(query_settings=...)` sets connection-wide
|
|
22
|
+
default query settings (e.g. `{"time_zone": "UTC"}`), and
|
|
23
|
+
`cursor.execute(operation, parameters, settings=...)` supplies or overrides
|
|
24
|
+
settings for a single query. Per-call settings take precedence over the
|
|
25
|
+
connection-level defaults on key collision. Settings map to the server's
|
|
26
|
+
Hyper connection/session settings — see
|
|
27
|
+
https://tableau.github.io/hyper-db/docs/hyper-api/connection#connection-settings.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Raised DB-API `threadsafety` from `1` to `2`: threads can share a Connection
|
|
31
|
+
when each thread uses its own cursor. CDP token cache access is synchronized
|
|
32
|
+
so concurrent cache misses perform one exchange.
|
|
33
|
+
- `cursor.rowcount` now reports the total number of rows in the result set
|
|
34
|
+
after `execute()`, as read from the server's query status, instead of always
|
|
35
|
+
returning `-1`. It remains `-1` before any query is executed and is reset to
|
|
36
|
+
`-1` at the start of each `execute()` so a failed execution does not report a
|
|
37
|
+
stale count (DB-API 2.0 / PEP 249).
|
|
38
|
+
- Query results now default to the Arrow IPC wire format instead of JSON.
|
|
39
|
+
Pass `output_format="json"` to `connect()` to opt back into the previous
|
|
40
|
+
JSON behavior.
|
|
41
|
+
- `pyarrow` moved out of the `[pandas]` optional dependency extra into the
|
|
42
|
+
dev dependency group — it is only needed to build Arrow IPC test fixtures,
|
|
43
|
+
not by `pandas` support at runtime (`nanoarrow` is the runtime Arrow
|
|
44
|
+
dependency).
|
|
45
|
+
- `nanoarrow` is now upper-bounded (`>=0.6.0,<0.10.0`) instead of unbounded,
|
|
46
|
+
so a future major `nanoarrow` release can't silently change how Arrow
|
|
47
|
+
values map to Python types (e.g. timestamps) underneath
|
|
48
|
+
`convert_datacloud_value` without a deliberate version bump here.
|
|
49
|
+
|
|
50
|
+
## 2.0.0b1 — Beta release (TBD)
|
|
51
|
+
|
|
52
|
+
First public beta of the new `salesforce-datacloud-connector` package, the
|
|
53
|
+
successor to `salesforce-cdp-connector`. Distributed as a pre-release on PyPI;
|
|
54
|
+
install with `pip install --pre salesforce-datacloud-connector`.
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- DB-API 2.0 compliant driver targeting the Salesforce Data Cloud Query API
|
|
58
|
+
(V3 driver path).
|
|
59
|
+
- Four OAuth authentication flows:
|
|
60
|
+
- Username/Password (`UsernamePasswordAuthenticator`)
|
|
61
|
+
- JWT Bearer Token (`JWTAuthenticator`)
|
|
62
|
+
- Refresh Token (`RefreshTokenAuthenticator`)
|
|
63
|
+
- Client Credentials (`ClientCredentialsAuthenticator`)
|
|
64
|
+
- Salesforce CLI authenticator (`SfCliAuthenticator`, `auth_type="sf_cli"`) for
|
|
65
|
+
local/dev — reuses the org the `sf` CLI is already authenticated against
|
|
66
|
+
instead of requiring a connected app.
|
|
67
|
+
- Connection-level support for `dataspace` and `workload`.
|
|
68
|
+
- Cursor surface: `execute`, `executemany`, `fetchone`, `fetchmany`,
|
|
69
|
+
`fetchall`, iteration, `description`, `rowcount`, `arraysize`, and `cancel`.
|
|
70
|
+
- Named-parameter style (`:param`) with safe parameter binding.
|
|
71
|
+
- Automatic pagination for large result sets with chunked fetching.
|
|
72
|
+
- Type conversion from Data Cloud types to Python types (str, int, Decimal,
|
|
73
|
+
float, bool, datetime.date, datetime.datetime).
|
|
74
|
+
- Full DB-API 2.0 exception hierarchy.
|
|
75
|
+
- `pandas` integration via `cursor.fetch_df()` and `pandas.read_sql()`,
|
|
76
|
+
installed as the optional `[pandas]` extra
|
|
77
|
+
(`pip install --pre "salesforce-datacloud-connector[pandas]"`).
|
|
78
|
+
- Token caching with automatic refresh.
|
|
79
|
+
- Long-polling for async query execution and retry logic for transient
|
|
80
|
+
failures.
|
|
81
|
+
- Context manager support for connections and cursors.
|
|
82
|
+
- Module globals: `apilevel = "2.0"`, `threadsafety = 1`,
|
|
83
|
+
`paramstyle = "named"`.
|
|
84
|
+
|
|
85
|
+
### Notes
|
|
86
|
+
- This is a beta release. Public API may change before GA. Pin your version
|
|
87
|
+
explicitly in production environments.
|
|
88
|
+
- Read-only operations (SELECT). No INSERT/UPDATE/DELETE/DDL.
|
|
89
|
+
- Synchronous API only; async client is on the V2 roadmap.
|
|
90
|
+
- See the README for migration guidance from `salesforce-cdp-connector`.
|