Skip to content
This repository was archived by the owner on Nov 9, 2024. It is now read-only.

Commit 917edb2

Browse files
test(python): use constraints files to check dependency lower bounds
Use a constraints file when installing dependencies for system and unit tests nox sessions. https://pip.pypa.io/en/stable/user_guide/#constraints-files > Constraints files are requirements files that **only control which version of a requirement is installed, not whether it is installed or not**. Their syntax and contents is nearly identical to Requirements Files. There is one key difference: Including a package in a constraints file does not trigger installation of the package. ``` testing ├── constraints-3.10.txt ├── constraints-3.11.txt ├── constraints-3.6.txt ├── constraints-3.7.txt ├── constraints-3.8.txt └── constraints-3.9.txt ``` Going forward, one constraints file (currently 3.6) will be populated with every library requirement and extra listed in the `setup.py`. The constraints file will pin each requirement to the lower bound. This ensures that library maintainers will see test failures if they forget to update a lower bound on a dependency. See googleapis/python-bigquery#263 for an example Source-Author: Bu Sun Kim <[email protected]> Source-Date: Tue Mar 23 10:52:02 2021 -0600 Source-Repo: googleapis/synthtool Source-Sha: 86ed43d4f56e6404d068e62e497029018879c771 Source-Link: googleapis/synthtool@86ed43d
1 parent 928df38 commit 917edb2

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

noxfile.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
from __future__ import absolute_import
2020
import os
21+
import pathlib
2122
import shutil
2223

2324
import nox
@@ -30,6 +31,8 @@
3031
SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"]
3132
UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"]
3233

34+
CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
35+
3336
# 'docfx' is excluded since it only needs to run in 'docs-presubmit'
3437
nox.options.sessions = [
3538
"unit",
@@ -84,13 +87,15 @@ def lint_setup_py(session):
8487

8588
def default(session):
8689
# Install all test dependencies, then install this package in-place.
87-
session.install("asyncmock", "pytest-asyncio")
8890

89-
session.install(
90-
"mock", "pytest", "pytest-cov",
91+
constraints_path = str(
92+
CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt"
9193
)
94+
session.install("asyncmock", "pytest-asyncio", "-c", constraints_path)
9295

93-
session.install("-e", ".")
96+
session.install("mock", "pytest", "pytest-cov", "-c", constraints_path)
97+
98+
session.install("-e", ".", "-c", constraints_path)
9499

95100
# Run py.test against the unit tests.
96101
session.run(
@@ -117,6 +122,9 @@ def unit(session):
117122
@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS)
118123
def system(session):
119124
"""Run the system test suite."""
125+
constraints_path = str(
126+
CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt"
127+
)
120128
system_test_path = os.path.join("tests", "system.py")
121129
system_test_folder_path = os.path.join("tests", "system")
122130

@@ -141,10 +149,8 @@ def system(session):
141149

142150
# Install all test dependencies, then install this package into the
143151
# virtualenv's dist-packages.
144-
session.install(
145-
"mock", "pytest", "google-cloud-testutils",
146-
)
147-
session.install("-e", ".")
152+
session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path)
153+
session.install("-e", ".", "-c", constraints_path)
148154

149155
# Run py.test against the system tests.
150156
if system_test_exists:

synth.metadata

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
"git": {
2020
"name": "synthtool",
2121
"remote": "https://github.com/googleapis/synthtool.git",
22-
"sha": "f5c5904fb0c6aa3b3730eadf4e5a4485afc65726"
22+
"sha": "86ed43d4f56e6404d068e62e497029018879c771"
2323
}
2424
},
2525
{
2626
"git": {
2727
"name": "synthtool",
2828
"remote": "https://github.com/googleapis/synthtool.git",
29-
"sha": "f5c5904fb0c6aa3b3730eadf4e5a4485afc65726"
29+
"sha": "86ed43d4f56e6404d068e62e497029018879c771"
3030
}
3131
}
3232
],

0 commit comments

Comments
 (0)