Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .evergreen/build-manylinux-internal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ mv dist/* validdist || true

# Compile wheels
for PYTHON in /opt/python/*/bin/python; do
if [[ ! $PYTHON =~ (cp37|cp38|cp39|cp310|cp311|cp312) ]]; then
if [[ ! $PYTHON =~ (cp38|cp39|cp310|cp311|cp312) ]]; then
continue
fi
# https://github.com/pypa/manylinux/issues/49
Expand Down
1 change: 0 additions & 1 deletion .evergreen/build-manylinux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ ls dist

# Check for any unexpected files.
unexpected=$(find dist \! \( -iname dist -or \
-iname '*cp37*' -or \
-iname '*cp38*' -or \
-iname '*cp39*' -or \
-iname '*cp310*' -or \
Expand Down
2 changes: 1 addition & 1 deletion .evergreen/build-windows.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ rm -rf validdist
mkdir -p validdist
mv dist/* validdist || true

for VERSION in 37 38 39 310 311 312; do
for VERSION in 38 39 310 311 312; do
_pythons=("C:/Python/Python${VERSION}/python.exe" \
"C:/Python/32/Python${VERSION}/python.exe")
for PYTHON in "${_pythons[@]}"; do
Expand Down
4 changes: 2 additions & 2 deletions .evergreen/combine-coverage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ if [ -z "$PYTHON_BINARY" ]; then
fi

createvirtualenv "$PYTHON_BINARY" covenv
# coverage 7.3 dropped support for Python 3.7, keep in sync with run-tests.sh
# Keep in sync with run-tests.sh
# coverage >=5 is needed for relative_files=true.
pip install -q "coverage>=5,<7.3"
pip install -q "coverage>=5,<=7.5"

pip list
ls -la coverage/
Expand Down
58 changes: 23 additions & 35 deletions .evergreen/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -834,8 +834,8 @@ functions:
done
# Build source distribution.
cd src/
/opt/python/3.7/bin/python3 -m pip install build
/opt/python/3.7/bin/python3 -m build --sdist .
/opt/python/3.8/bin/python3 -m pip install build
/opt/python/3.8/bin/python3 -m build --sdist .
cp dist/* ../releases
- command: archive.targz_pack
params:
Expand Down Expand Up @@ -1127,7 +1127,7 @@ tasks:
commands:
- func: "build release"
vars:
VERSION: "3.7"
VERSION: "3.8"
- func: "upload release"

- name: "release-windows"
Expand Down Expand Up @@ -2375,10 +2375,6 @@ axes:
values:
# Note: always display platform with python-version to avoid ambiguous display names.
# Linux
- id: "3.7"
display_name: "Python 3.7"
variables:
PYTHON_BINARY: "/opt/python/3.7/bin/python3"
- id: "3.8"
display_name: "Python 3.8"
variables:
Expand All @@ -2399,10 +2395,10 @@ axes:
display_name: "Python 3.12"
variables:
PYTHON_BINARY: "/opt/python/3.12/bin/python3"
- id: "pypy3.8"
display_name: "PyPy 3.8"
- id: "pypy3.9"
display_name: "PyPy 3.9"
variables:
PYTHON_BINARY: "/opt/python/pypy3.8/bin/pypy3"
PYTHON_BINARY: "/opt/python/pypy3.9/bin/pypy3"
- id: "pypy3.10"
display_name: "PyPy 3.10"
variables:
Expand All @@ -2411,10 +2407,6 @@ axes:
- id: python-version-windows
display_name: "Python"
values:
- id: "3.7"
display_name: "Python 3.7"
variables:
PYTHON_BINARY: "C:/python/Python37/python.exe"
- id: "3.8"
display_name: "Python 3.8"
variables:
Expand All @@ -2439,10 +2431,6 @@ axes:
- id: python-version-windows-32
display_name: "Python"
values:
- id: "3.7"
display_name: "32-bit Python 3.7"
variables:
PYTHON_BINARY: "C:/python/32/Python37/python.exe"
- id: "3.8"
display_name: "32-bit Python 3.8"
variables:
Expand Down Expand Up @@ -2730,10 +2718,10 @@ buildvariants:
auth: "*"
ssl: "ssl"
pyopenssl: "*"
# Only test "noauth" with Python 3.7.
# Only test "noauth" with Python 3.8.
exclude_spec:
platform: rhel8
python-version: ["3.8", "3.9", "3.10", "pypy3.8", "pypy3.10"]
python-version: ["3.9", "3.10", "pypy3.9", "pypy3.10"]
auth: "noauth"
ssl: "ssl"
pyopenssl: "*"
Expand Down Expand Up @@ -2794,7 +2782,7 @@ buildvariants:
exclude_spec:
# These interpreters are always tested without extensions.
- platform: rhel8
python-version: ["pypy3.8", "pypy3.10"]
python-version: ["pypy3.9", "pypy3.10"]
c-extensions: "*"
auth-ssl: "*"
coverage: "*"
Expand All @@ -2810,7 +2798,7 @@ buildvariants:
exclude_spec:
# These interpreters are always tested without extensions.
- platform: rhel8
python-version: ["pypy3.8", "pypy3.10"]
python-version: ["pypy3.9", "pypy3.10"]
c-extensions: "with-c-extensions"
compression: "*"
display_name: "${compression} ${c-extensions} ${python-version} ${platform}"
Expand Down Expand Up @@ -2839,7 +2827,7 @@ buildvariants:
exclude_spec:
# Don't test green frameworks on these Python versions.
- platform: rhel8
python-version: ["pypy3.8", "pypy3.10"]
python-version: ["pypy3.9", "pypy3.10"]
green-framework: "*"
auth-ssl: "*"
display_name: "${green-framework} ${python-version} ${platform} ${auth-ssl}"
Expand All @@ -2865,7 +2853,7 @@ buildvariants:
matrix_spec:
platform: rhel7
# Python 3.10+ requires OpenSSL 1.1.1+
python-version: ["3.7", "3.8", "3.9", "pypy3.8", "pypy3.10"]
python-version: ["3.8", "3.9", "pypy3.9", "pypy3.10"]
auth-ssl: "*"
display_name: "OpenSSL 1.0.2 ${python-version} ${platform} ${auth-ssl}"
tasks:
Expand All @@ -2888,12 +2876,12 @@ buildvariants:
then:
add_tasks: *encryption-server-versions

# Storage engine tests on RHEL 8.4 (x86_64) with Python 3.7.
# Storage engine tests on RHEL 8.4 (x86_64) with Python 3.8.
- matrix_name: "tests-storage-engines"
matrix_spec:
platform: rhel8
storage-engine: "*"
python-version: 3.7
python-version: 3.8
display_name: "Storage ${storage-engine} ${python-version} ${platform}"
rules:
- if:
Expand Down Expand Up @@ -2923,12 +2911,12 @@ buildvariants:
- "test-3.6-standalone"
- "test-3.6-replica_set"

# enableTestCommands=0 tests on RHEL 8.4 (x86_64) with Python 3.7.
# enableTestCommands=0 tests on RHEL 8.4 (x86_64) with Python 3.8.
- matrix_name: "test-disableTestCommands"
matrix_spec:
platform: rhel8
disableTestCommands: "*"
python-version: "3.7"
python-version: "3.8"
display_name: "Disable test commands ${python-version} ${platform}"
tasks:
- ".latest"
Expand Down Expand Up @@ -2962,7 +2950,7 @@ buildvariants:
- matrix_name: "tests-mod-wsgi"
matrix_spec:
platform: ubuntu-22.04
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
mod-wsgi-version: "*"
display_name: "${mod-wsgi-version} ${python-version} ${platform}"
tasks:
Expand All @@ -2974,7 +2962,7 @@ buildvariants:
- matrix_name: "mockupdb-tests"
matrix_spec:
platform: rhel8
python-version: 3.7
python-version: 3.8
display_name: "MockupDB Tests"
tasks:
- name: "mockupdb"
Expand Down Expand Up @@ -3022,7 +3010,7 @@ buildvariants:
- matrix_name: "serverless_proxy"
matrix_spec:
platform: rhel8
python-version: ["3.7", "3.10"]
python-version: ["3.8", "3.10"]
auth-ssl: auth-ssl
serverless: "proxy"
display_name: "${serverless} ${python-version} ${platform}"
Expand All @@ -3032,7 +3020,7 @@ buildvariants:
- matrix_name: "data-lake-spec-tests"
matrix_spec:
platform: ubuntu-22.04
python-version: ["3.7", "3.10"]
python-version: ["3.8", "3.10"]
auth: "auth"
c-extensions: "*"
display_name: "Atlas Data Lake ${python-version} ${c-extensions}"
Expand All @@ -3042,7 +3030,7 @@ buildvariants:
- matrix_name: "stable-api-tests"
matrix_spec:
platform: rhel8
python-version: ["3.7", "3.10"]
python-version: ["3.8", "3.10"]
auth: "auth"
versionedApi: "*"
display_name: "Versioned API ${versionedApi} ${python-version}"
Expand All @@ -3055,7 +3043,7 @@ buildvariants:
- matrix_name: "ocsp-test"
matrix_spec:
platform: rhel8
python-version: ["3.7", "3.10", "pypy3.8", "pypy3.10"]
python-version: ["3.8", "3.10", "pypy3.9", "pypy3.10"]
mongodb-version: ["4.4", "5.0", "6.0", "7.0", "8.0", "latest"]
auth: "noauth"
ssl: "ssl"
Expand All @@ -3067,7 +3055,7 @@ buildvariants:
- matrix_name: "ocsp-test-windows"
matrix_spec:
platform: windows-64-vsMulti-small
python-version-windows: ["3.7", "3.10"]
python-version-windows: ["3.8", "3.10"]
mongodb-version: ["4.4", "5.0", "6.0", "7.0", "8.0", "latest"]
auth: "noauth"
ssl: "ssl"
Expand Down
4 changes: 2 additions & 2 deletions .evergreen/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,9 @@ python -c 'import sys; print(sys.version)'
# Only cover CPython. PyPy reports suspiciously low coverage.
PYTHON_IMPL=$($PYTHON -c "import platform; print(platform.python_implementation())")
if [ -n "$COVERAGE" ] && [ "$PYTHON_IMPL" = "CPython" ]; then
# coverage 7.3 dropped support for Python 3.7, keep in sync with combine-coverage.sh.
# Keep in sync with combine-coverage.sh.
# coverage >=5 is needed for relative_files=true.
python -m pip install pytest-cov "coverage>=5,<7.3"
python -m pip install pytest-cov "coverage>=5,<=7.5"
TEST_ARGS="$TEST_ARGS --cov"
fi

Expand Down
32 changes: 16 additions & 16 deletions .evergreen/utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ set -o xtrace

find_python3() {
PYTHON=""
# Add a fallback system python3 if it is available and Python 3.7+.
if is_python_37 "$(command -v python3)"; then
# Add a fallback system python3 if it is available and Python 3.8+.
if is_python_38 "$(command -v python3)"; then
PYTHON="$(command -v python3)"
fi
# Find a suitable toolchain version, if available.
Expand All @@ -14,23 +14,23 @@ find_python3() {
if [ -d "/Library/Frameworks/Python.Framework/Versions/3.10" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.10/bin/python3"
# macos 10.14
elif [ -d "/Library/Frameworks/Python.Framework/Versions/3.7" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.7/bin/python3"
elif [ -d "/Library/Frameworks/Python.Framework/Versions/3.8" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.8/bin/python3"
fi
elif [ "Windows_NT" = "$OS" ]; then # Magic variable in cygwin
PYTHON="C:/python/Python37/python.exe"
PYTHON="C:/python/Python38/python.exe"
else
# Prefer our own toolchain, fall back to mongodb toolchain if it has Python 3.7+.
if [ -f "/opt/python/3.7/bin/python3" ]; then
PYTHON="/opt/python/3.7/bin/python3"
elif is_python_37 "$(command -v /opt/mongodbtoolchain/v4/bin/python3)"; then
# Prefer our own toolchain, fall back to mongodb toolchain if it has Python 3.8+.
if [ -f "/opt/python/3.8/bin/python3" ]; then
PYTHON="/opt/python/3.8/bin/python3"
elif is_python_38 "$(command -v /opt/mongodbtoolchain/v4/bin/python3)"; then
PYTHON="/opt/mongodbtoolchain/v4/bin/python3"
elif is_python_37 "$(command -v /opt/mongodbtoolchain/v3/bin/python3)"; then
elif is_python_38 "$(command -v /opt/mongodbtoolchain/v3/bin/python3)"; then
PYTHON="/opt/mongodbtoolchain/v3/bin/python3"
fi
fi
if [ -z "$PYTHON" ]; then
echo "Cannot test without python3.7+ installed!"
echo "Cannot test without python3.8+ installed!"
exit 1
fi
echo "$PYTHON"
Expand Down Expand Up @@ -96,15 +96,15 @@ testinstall () {
fi
}

# Function that returns success if the provided Python binary is version 3.7 or later
# Function that returns success if the provided Python binary is version 3.8 or later
# Usage:
# is_python_37 /path/to/python
# is_python_38 /path/to/python
# * param1: Python binary
is_python_37() {
is_python_38() {
if [ -z "$1" ]; then
return 1
elif $1 -c "import sys; exit(sys.version_info[:2] < (3, 7))"; then
# runs when sys.version_info[:2] >= (3, 7)
elif $1 -c "import sys; exit(sys.version_info[:2] < (3, 8))"; then
# runs when sys.version_info[:2] >= (3, 8)
return 0
else
return 1
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/release-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,12 @@ jobs:
env:
CIBW_MANYLINUX_X86_64_IMAGE: manylinux1
CIBW_MANYLINUX_I686_IMAGE: manylinux1
CIBW_BUILD: "cp37-${{ matrix.buildplat[1] }} cp38-${{ matrix.buildplat[1] }} cp39-${{ matrix.buildplat[1] }}"
CIBW_BUILD: "cp38-${{ matrix.buildplat[1] }} cp39-${{ matrix.buildplat[1] }}"
run: python -m cibuildwheel --output-dir wheelhouse

- name: Assert all versions in wheelhouse
if: ${{ ! startsWith(matrix.buildplat[1], 'macos') }}
run: |
ls wheelhouse/*cp37*.whl
ls wheelhouse/*cp38*.whl
ls wheelhouse/*cp39*.whl
ls wheelhouse/*cp310*.whl
Expand All @@ -103,7 +102,7 @@ jobs:
- uses: actions/setup-python@v5
with:
# Build sdist on lowest supported Python
python-version: '3.7'
python-version: '3.8'

- name: Build SDist
run: |
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/test-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-20.04]
python-version: ["3.7", "3.11", "pypy-3.8"]
python-version: ["3.8", "3.11", "pypy-3.9"]
name: CPython ${{ matrix.python-version }}-${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -137,7 +137,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.7", "3.11"]
python: ["3.8", "3.11"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand All @@ -162,7 +162,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
# Build sdist on lowest supported Python
python-version: '3.7'
python-version: '3.8'
- name: Build SDist
shell: bash
run: |
Expand Down Expand Up @@ -194,7 +194,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'sdist/test/pyproject.toml'
# Test sdist on lowest supported Python
python-version: '3.7'
python-version: '3.8'
- name: Start MongoDB
uses: supercharge/[email protected]
- name: Run Test
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ be of interest or that has already been addressed.

## Supported Interpreters

PyMongo supports CPython 3.7+ and PyPy3.8+. Language features not
PyMongo supports CPython 3.8+ and PyPy3.9+. Language features not
supported by all interpreters can not be used.

## Style Guide
Expand Down
Loading