Skip to content

Commit 027c68f

Browse files
Merge branch 'main' into merge-main-to-aio
2 parents 0b97e59 + f1ce95c commit 027c68f

File tree

126 files changed

+12446
-6728
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+12446
-6728
lines changed

.github/CODEOWNERS

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
@snowflakedb/snowpark-python-api
1+
* @snowflakedb/snow-drivers-warsaw
2+
/src/snowflake/connector/ocsp_* @snowflakedb/pki-oversight @snowflakedb/snow-drivers-warsaw
3+
/src/snowflake/connector/crl.py @snowflakedb/pki-oversight @snowflakedb/snow-drivers-warsaw
4+
/src/snowflake/connector/crl_cache.py @snowflakedb/pki-oversight @snowflakedb/snow-drivers-warsaw
5+
/src/snowflake/connector/ssl_wrap_socket.py @snowflakedb/pki-oversight @snowflakedb/snow-drivers-warsaw

.github/workflows/build_test.yml

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,7 @@ jobs:
6363
runs-on: ubuntu-latest
6464
strategy:
6565
matrix:
66-
# TODO: temporarily reduce number of jobs: SNOW-2311643
67-
# python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
68-
python-version: ["3.9", "3.13"]
66+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
6967
steps:
7068
- uses: actions/checkout@v4
7169
- name: Set up Python
@@ -96,9 +94,7 @@ jobs:
9694
id: macosx_x86_64
9795
- image: macos-latest
9896
id: macosx_arm64
99-
# TODO: temporarily reduce number of jobs: SNOW-2311643
100-
# python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
101-
python-version: ["3.9", "3.13"]
97+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
10298
exclude:
10399
- os:
104100
image: windows-11-arm
@@ -158,9 +154,7 @@ jobs:
158154
download_name: win_amd64
159155
- image_name: windows-11-arm
160156
download_name: win_arm64
161-
# TODO: temporarily reduce number of jobs: SNOW-2311643
162-
# python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
163-
python-version: ["3.9", "3.13"]
157+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
164158
cloud-provider: [aws, azure, gcp]
165159
exclude:
166160
- os:
@@ -211,9 +205,9 @@ jobs:
211205
- name: Setup private key file
212206
shell: bash
213207
env:
214-
PYTHON_PRIVATE_KEY_SECRET: ${{ secrets.PYTHON_PRIVATE_KEY_SECRET }}
208+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
215209
run: |
216-
gpg --quiet --batch --yes --decrypt --passphrase="$PYTHON_PRIVATE_KEY_SECRET" \
210+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
217211
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
218212
- name: Download wheel(s)
219213
uses: actions/download-artifact@v4
@@ -265,7 +259,7 @@ jobs:
265259
os:
266260
# Because old the version 3.0.2 of snowflake-connector-python depends on oscrypto which causes conflicts with higher versions of libssl
267261
# TODO: It can be changed to ubuntu-latest, when python sf connector version in tox is above 3.4.0
268-
- image_name: ubuntu-20.04
262+
- image_name: ubuntu-22.04
269263
download_name: linux
270264
python-version: [3.9]
271265
cloud-provider: [aws]
@@ -287,9 +281,9 @@ jobs:
287281
- name: Setup private key file
288282
shell: bash
289283
env:
290-
PYTHON_PRIVATE_KEY_SECRET: ${{ secrets.PYTHON_PRIVATE_KEY_SECRET }}
284+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
291285
run: |
292-
gpg --quiet --batch --yes --decrypt --passphrase="$PYTHON_PRIVATE_KEY_SECRET" \
286+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
293287
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
294288
- name: Upgrade setuptools, pip and wheel
295289
run: python -m pip install -U setuptools pip wheel
@@ -355,9 +349,9 @@ jobs:
355349
- name: Setup private key file
356350
shell: bash
357351
env:
358-
PYTHON_PRIVATE_KEY_SECRET: ${{ secrets.PYTHON_PRIVATE_KEY_SECRET }}
352+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
359353
run: |
360-
gpg --quiet --batch --yes --decrypt --passphrase="$PYTHON_PRIVATE_KEY_SECRET" \
354+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
361355
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
362356
- name: Download wheel(s)
363357
uses: actions/download-artifact@v4
@@ -398,9 +392,7 @@ jobs:
398392
strategy:
399393
fail-fast: false
400394
matrix:
401-
# TODO: temporarily reduce number of jobs: SNOW-2311643
402-
# python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
403-
python-version: ["3.9", "3.13"]
395+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
404396
cloud-provider: [aws]
405397
steps:
406398
- name: Set shortver
@@ -419,9 +411,9 @@ jobs:
419411
- name: Setup private key file
420412
shell: bash
421413
env:
422-
PYTHON_PRIVATE_KEY_SECRET: ${{ secrets.PYTHON_PRIVATE_KEY_SECRET }}
414+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
423415
run: |
424-
gpg --quiet --batch --yes --decrypt --passphrase="$PYTHON_PRIVATE_KEY_SECRET" \
416+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
425417
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
426418
- name: Download wheel(s)
427419
uses: actions/download-artifact@v4
@@ -500,9 +492,9 @@ jobs:
500492
- name: Setup private key file
501493
shell: bash
502494
env:
503-
PYTHON_PRIVATE_KEY_SECRET: ${{ secrets.PYTHON_PRIVATE_KEY_SECRET }}
495+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
504496
run: |
505-
gpg --quiet --batch --yes --decrypt --passphrase="$PYTHON_PRIVATE_KEY_SECRET" \
497+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
506498
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
507499
- name: Download wheel(s)
508500
uses: actions/download-artifact@v4
@@ -518,12 +510,6 @@ jobs:
518510
run: python -m pip install tox>=4
519511
- name: Run tests
520512
run: python -m tox run -e aio
521-
env:
522-
PYTHON_VERSION: ${{ matrix.python-version }}
523-
cloud_provider: ${{ matrix.cloud-provider }}
524-
PYTEST_ADDOPTS: --color=yes --tb=short
525-
TOX_PARALLEL_NO_SPINNER: 1
526-
shell: bash
527513
- name: Combine coverages
528514
run: python -m tox run -e coverage --skip-missing-interpreters false
529515
shell: bash
@@ -566,6 +552,56 @@ jobs:
566552
TOX_PARALLEL_NO_SPINNER: 1
567553
shell: bash
568554

555+
test-rockylinux9:
556+
name: Test Rocky Linux 9 rockylinux9-${{ matrix.python-version }}-${{ matrix.cloud-provider }}
557+
needs: lint
558+
runs-on: ubuntu-latest
559+
strategy:
560+
fail-fast: false
561+
matrix:
562+
# Rocky Linux 9 has Python 3.9, 3.11, and 3.12 available
563+
python-version: ["3.9", "3.11", "3.12"]
564+
cloud-provider: [aws, azure, gcp]
565+
steps:
566+
- name: Set shortver
567+
run: echo "shortver=${longver//./}" >> $GITHUB_ENV
568+
env:
569+
longver: ${{ matrix.python-version }}
570+
shell: bash
571+
- uses: actions/checkout@v4
572+
- name: Build wheel for Rocky Linux
573+
uses: pypa/cibuildwheel@v2.21.3
574+
env:
575+
CIBW_BUILD: cp${{ env.shortver }}-manylinux_x86_64
576+
MACOSX_DEPLOYMENT_TARGET: 10.14
577+
with:
578+
output-dir: dist
579+
- name: Show wheels built
580+
run: ls -lh dist
581+
shell: bash
582+
- name: Setup parameters file
583+
shell: bash
584+
env:
585+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
586+
run: |
587+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
588+
.github/workflows/parameters/public/parameters_${{ matrix.cloud-provider }}.py.gpg > test/parameters.py
589+
- name: Setup private key file
590+
shell: bash
591+
env:
592+
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
593+
run: |
594+
gpg --quiet --batch --yes --decrypt --passphrase="$PARAMETERS_SECRET" \
595+
.github/workflows/parameters/public/rsa_keys/rsa_key_python_${{ matrix.cloud-provider }}.p8.gpg > test/rsa_key_python_${{ matrix.cloud-provider }}.p8
596+
- name: Run tests
597+
run: ./ci/test_rockylinux9_docker.sh ${PYTHON_VERSION}
598+
env:
599+
PYTHON_VERSION: ${{ matrix.python-version }}
600+
cloud_provider: ${{ matrix.cloud-provider }}
601+
PYTEST_ADDOPTS: --color=yes --tb=short
602+
TOX_PARALLEL_NO_SPINNER: 1
603+
shell: bash
604+
569605
combine-coverage:
570606
if: always()
571607
name: Combine coverage

.github/workflows/jira_issue.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
summary: '${{ github.event.issue.title }}'
3838
description: |
3939
${{ github.event.issue.body }} \\ \\ _Created from GitHub Action_ for ${{ github.event.issue.html_url }}
40-
fields: '{"customfield_11401":{"id":"14586"},"assignee":{"id":"61027a237ab143006ecfb9a2"},"components":[{"id":"16413"}]}'
40+
fields: '{"customfield_11401":{"id":"14723"},"assignee":{"id":"712020:e527ae71-55cc-4e02-9217-1ca4ca8028a2"},"components":[{"id":"16413"}], "labels": ["oss"], "priority": {"id": "10001"} }'
4141

4242
- name: Update GitHub Issue
4343
uses: ./jira/gajira-issue-update
Binary file not shown.
Binary file not shown.
Binary file not shown.

DESCRIPTION.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,16 @@ https://docs.snowflake.com/
77
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
88

99
# Release Notes
10-
- v4.1.0(TBD)
10+
- v4.1.1(November 20,2025)
11+
- Added the `SNOWFLAKE_AUTH_FORCE_SERVER` environment variable to force the use of the local-listening server when using the `externalbrowser` auth method.
12+
- This allows headless environments (like Docker or Airflow) running locally to auth via a browser URL.
13+
- Fix compilation error when building from sources with libc++.
14+
- Pin lower versions of dependencies to oldest version without vulnerabilities.
15+
- Added no_proxy parameter for proxy configuration without using environmental variables.
16+
- Added OAUTH_AUTHORIZATION_CODE and OAUTH_CLIENT_CREDENTIALS to list of authenticators that don't require user to be set
17+
- Added `oauth_socket_uri` connection parameter allowing to separate server and redirect URIs for local OAuth server.
18+
- Made platform_detection logs silent and improved its timeout handling. Added support for ENV_VAR_DISABLE_PLATFORM_DETECTION environment variable.
19+
- Fixed FIPS environments md5 hash issues with multipart upload on Azure.
1120

1221
- v4.0.0(October 09,2025)
1322
- Added support for checking certificates revocation using revocation lists (CRLs)

Jenkinsfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ timestamps {
3333
string(name: 'client_git_commit', value: scmInfo.GIT_COMMIT),
3434
string(name: 'client_git_branch', value: scmInfo.GIT_BRANCH),
3535
string(name: 'parent_job', value: env.JOB_NAME),
36-
string(name: 'parent_build_number', value: env.BUILD_NUMBER)
36+
string(name: 'parent_build_number', value: env.BUILD_NUMBER),
37+
string(name: 'USE_PASSWORD', value: 'true')
3738
]
3839
parallel(
3940
'Test': {

MANIFEST.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ include LICENSE.txt
44
include NOTICE
55
include pyproject.toml
66
include src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt
7-
recursive-include src/snowflake/connector py.typed *.py *.pyx
7+
recursive-include src/snowflake/connector py.typed *.py *.pyx *.js
88
recursive-include src/snowflake/connector/vendored LICENSE*
99

1010
recursive-include src/snowflake/connector/nanoarrow_cpp *.cpp *.hpp

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,28 @@ conn = snowflake.connector.connect(
8181
)
8282
conn.telemetry_enabled = False
8383
```
84+
85+
## Verifying Package Signatures
86+
87+
To ensure the authenticity and integrity of the Python package, follow the steps below to verify the package signature using `cosign`.
88+
89+
**Steps to verify the signature:**
90+
- Install cosign:
91+
- This example is using golang installation: [installing-cosign-with-go](https://edu.chainguard.dev/open-source/sigstore/cosign/how-to-install-cosign/#installing-cosign-with-go)
92+
- Download the file from the repository like pypi:
93+
- https://pypi.org/project/snowflake-connector-python/#files
94+
- Download the signature files from the release tag, replace the version number with the version you are verifying:
95+
- https://github.com/snowflakedb/snowflake-connector-python/releases/tag/v3.12.2
96+
- Verify signature:
97+
````bash
98+
# replace the version number with the version you are verifying
99+
./cosign verify-blob snowflake_connector_python-3.12.2.tar.gz \
100+
--key snowflake-connector-python-v3.12.2.pub \
101+
--signature resources.linux.snowflake_connector_python-3.12.2.tar.gz.sig
102+
103+
Verified OK
104+
````
105+
106+
## NOTE
107+
108+
This library currently does not support GCP regional endpoints. Please ensure that any workloads using through this library do not require support for regional endpoints on GCP. If you have questions about this, please contact [Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge).

0 commit comments

Comments
 (0)