Skip to content

Commit 5a3f0f0

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 e644c6b commit 5a3f0f0

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

noxfile.py

Lines changed: 13 additions & 7 deletions
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 = ["2.7", "3.8"]
3132
UNIT_TEST_PYTHON_VERSIONS = ["2.7", "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,11 +87,13 @@ def lint_setup_py(session):
8487

8588
def default(session):
8689
# Install all test dependencies, then install this package in-place.
87-
session.install(
88-
"mock", "pytest", "pytest-cov",
90+
91+
constraints_path = str(
92+
CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt"
8993
)
94+
session.install("mock", "pytest", "pytest-cov", "-c", constraints_path)
9095

91-
session.install("-e", ".")
96+
session.install("-e", ".", "-c", constraints_path)
9297

9398
# Run py.test against the unit tests.
9499
session.run(
@@ -115,6 +120,9 @@ def unit(session):
115120
@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS)
116121
def system(session):
117122
"""Run the system test suite."""
123+
constraints_path = str(
124+
CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt"
125+
)
118126
system_test_path = os.path.join("tests", "system.py")
119127
system_test_folder_path = os.path.join("tests", "system")
120128

@@ -139,10 +147,8 @@ def system(session):
139147

140148
# Install all test dependencies, then install this package into the
141149
# virtualenv's dist-packages.
142-
session.install(
143-
"mock", "pytest", "google-cloud-testutils",
144-
)
145-
session.install("-e", ".")
150+
session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path)
151+
session.install("-e", ".", "-c", constraints_path)
146152

147153
# Run py.test against the system tests.
148154
if system_test_exists:

synth.metadata

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"git": {
1212
"name": "synthtool",
1313
"remote": "https://github.com/googleapis/synthtool.git",
14-
"sha": "f5c5904fb0c6aa3b3730eadf4e5a4485afc65726"
14+
"sha": "86ed43d4f56e6404d068e62e497029018879c771"
1515
}
1616
}
1717
],

0 commit comments

Comments
 (0)