We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
'testing/constraints-*.txt' not used
From #757.

In [`noxfile.py`](https://github.com/googleapis/google-auth-library-python/blob/a9234423cb2b69068fc0d30a5a0ee86a599ab8b7/noxfile.py#L87-L89), the constraints are not being used, which is why the one populated file, [`testing/constraints-3.6.txt](https://github.com/googleapis/google-auth-library-python/blob/master/testing/constraints-3.6.txt) is in an invalid state (multiple entries for `rsa`, maybe more issues).

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `noxfile.py`
Content:
```
1 # Copyright 2019 Google LLC
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 import shutil
16 import os
17 import nox
18 
19 TEST_DEPENDENCIES = [
20     "flask",
21     "freezegun",
22     "mock",
23     "oauth2client",
24     "pyopenssl",
25     "pytest",
26     "pytest-cov",
27     "pytest-localserver",
28     "pyu2f",
29     "requests",
30     "urllib3",
31     "cryptography",
32     "responses",
33     "grpcio",
34 ]
35 
36 ASYNC_DEPENDENCIES = [
37     "pytest-asyncio",
38     "aioresponses",
39     "asynctest",
40     "aiohttp!=3.7.4.post0",
41 ]
42 
43 BLACK_VERSION = "black==19.3b0"
44 BLACK_PATHS = [
45     "google",
46     "tests",
47     "tests_async",
48     "noxfile.py",
49     "setup.py",
50     "docs/conf.py",
51 ]
52 
53 
54 @nox.session(python="3.7")
55 def lint(session):
56     session.install("flake8", "flake8-import-order", "docutils", BLACK_VERSION)
57     session.install(".")
58     session.run("black", "--check", *BLACK_PATHS)
59     session.run(
60         "flake8",
61         "--import-order-style=google",
62         "--application-import-names=google,tests,system_tests",
63         "google",
64         "tests",
65         "tests_async",
66     )
67     session.run(
68         "python", "setup.py", "check", "--metadata", "--restructuredtext", "--strict"
69     )
70 
71 
72 @nox.session(python="3.8")
73 def blacken(session):
74     """Run black.
75     Format code to uniform standard.
76     The Python version should be consistent with what is
77     supplied in the Python Owlbot postprocessor.
78 
79     https://github.com/googleapis/synthtool/blob/master/docker/owlbot/python/Dockerfile
80     """
81     session.install(BLACK_VERSION)
82     session.run("black", *BLACK_PATHS)
83 
84 
85 @nox.session(python=["3.6", "3.7", "3.8", "3.9"])
86 def unit(session):
87     session.install(*TEST_DEPENDENCIES)
88     session.install(*(ASYNC_DEPENDENCIES))
89     session.install(".")
90     session.run(
91         "pytest",
92         f"--junitxml=unit_{session.python}_sponge_log.xml",
93         "--cov=google.auth",
94         "--cov=google.oauth2",
95         "--cov=tests",
96         "tests",
97         "tests_async",
98     )
99 
100 
101 @nox.session(python=["2.7"])
102 def unit_prev_versions(session):
103     session.install(".")
104     session.install(*TEST_DEPENDENCIES)
105     session.run(
106         "pytest",
107         f"--junitxml=unit_{session.python}_sponge_log.xml",
108         "--cov=google.auth",
109         "--cov=google.oauth2",
110         "--cov=tests",
111         "tests",
112     )
113 
114 
115 @nox.session(python="3.7")
116 def cover(session):
117     session.install(*TEST_DEPENDENCIES)
118     session.install(*(ASYNC_DEPENDENCIES))
119     session.install(".")
120     session.run(
121         "pytest",
122         "--cov=google.auth",
123         "--cov=google.oauth2",
124         "--cov=tests",
125         "--cov=tests_async",
126         "--cov-report=",
127         "tests",
128         "tests_async",
129     )
130     session.run("coverage", "report", "--show-missing", "--fail-under=100")
131 
132 
133 @nox.session(python="3.7")
134 def docgen(session):
135     session.env["SPHINX_APIDOC_OPTIONS"] = "members,inherited-members,show-inheritance"
136     session.install(*TEST_DEPENDENCIES)
137     session.install("sphinx")
138     session.install(".")
139     session.run("rm", "-r", "docs/reference")
140     session.run(
141         "sphinx-apidoc",
142         "--output-dir",
143         "docs/reference",
144         "--separate",
145         "--module-first",
146         "google",
147     )
148 
149 
150 @nox.session(python="3.7")
151 def docs(session):
152     """Build the docs for this library."""
153 
154     session.install("-e", ".[aiohttp]")
155     session.install(
156         "sphinx<3.0.0", "alabaster", "recommonmark", "sphinx-docstring-typing"
157     )
158 
159     shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
160     session.run(
161         "sphinx-build",
162         "-T",  # show full traceback on exception
163         "-W",  # warnings as errors
164         "-N",  # no colors
165         "-b",
166         "html",
167         "-d",
168         os.path.join("docs", "_build", "doctrees", ""),
169         os.path.join("docs", ""),
170         os.path.join("docs", "_build", "html", ""),
171     )
172 
173 
174 @nox.session(python="pypy")
175 def pypy(session):
176     session.install(*TEST_DEPENDENCIES)
177     session.install(*ASYNC_DEPENDENCIES)
178     session.install(".")
179     session.run(
180         "pytest",
181         f"--junitxml=unit_{session.python}_sponge_log.xml",
182         "--cov=google.auth",
183         "--cov=google.oauth2",
184         "--cov=tests",
185         "tests",
186         "tests_async",
187     )
188
```

Path: `setup.py`
Content:
```
1 # Copyright 2014 Google Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 import io
16 import os
17 
18 from setuptools import find_packages
19 from setuptools import setup
20 
21 
22 DEPENDENCIES = (
23     "cachetools>=2.0.0,<5.0",
24     "pyasn1-modules>=0.2.1",
25     # rsa==4.5 is the last version to support 2.7
26     # https://github.com/sybrenstuvel/python-rsa/issues/152#issuecomment-643470233
27     'rsa<4.6; python_version < "3.6"',
28     'rsa>=3.1.4,<5; python_version >= "3.6"',
29     "setuptools>=40.3.0",
30     "six>=1.9.0",
31 )
32 
33 extras = {
34     "aiohttp": [
35         "aiohttp >= 3.6.2, < 4.0.0dev; python_version>='3.6'",
36         "requests >= 2.18.0, < 3.0.0dev",
37         "urllib3 >= 1.0.0, <2.0.0dev",
38     ],
39     "pyopenssl": "pyopenssl>=20.0.0",
40     "reauth": "pyu2f>=0.1.5",
41 }
42 
43 with io.open("README.rst", "r") as fh:
44     long_description = fh.read()
45 
46 package_root = os.path.abspath(os.path.dirname(__file__))
47 
48 version = {}
49 with open(os.path.join(package_root, "google/auth/version.py")) as fp:
50     exec(fp.read(), version)
51 version = version["__version__"]
52 
53 setup(
54     name="google-auth",
55     version=version,
56     author="Google Cloud Platform",
57     author_email="googleapis-packages@google.com",
58     description="Google Authentication Library",
59     long_description=long_description,
60     url="https://github.com/googleapis/google-auth-library-python",
61     packages=find_packages(exclude=("tests*", "system_tests*")),
62     namespace_packages=("google",),
63     install_requires=DEPENDENCIES,
64     extras_require=extras,
65     python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*",
66     license="Apache 2.0",
67     keywords="google auth oauth client",
68     classifiers=[
69         "Programming Language :: Python :: 2",
70         "Programming Language :: Python :: 2.7",
71         "Programming Language :: Python :: 3",
72         "Programming Language :: Python :: 3.6",
73         "Programming Language :: Python :: 3.7",
74         "Programming Language :: Python :: 3.8",
75         "Programming Language :: Python :: 3.9",
76         "Development Status :: 5 - Production/Stable",
77         "Intended Audience :: Developers",
78         "License :: OSI Approved :: Apache Software License",
79         "Operating System :: POSIX",
80         "Operating System :: Microsoft :: Windows",
81         "Operating System :: MacOS :: MacOS X",
82         "Operating System :: OS Independent",
83         "Topic :: Internet :: WWW/HTTP",
84     ],
85 )
86
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/noxfile.py b/noxfile.py
--- a/noxfile.py
+++ b/noxfile.py
@@ -12,10 +12,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import shutil
 import os
+import pathlib
+import shutil
+
 import nox
 
+CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
+
 TEST_DEPENDENCIES = [
     "flask",
     "freezegun",
@@ -84,15 +88,20 @@
 
 @nox.session(python=["3.6", "3.7", "3.8", "3.9"])
 def unit(session):
-    session.install(*TEST_DEPENDENCIES)
-    session.install(*(ASYNC_DEPENDENCIES))
-    session.install(".")
+    constraints_path = str(
+        CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt"
+    )
+    add_constraints = ["-c", constraints_path]
+    session.install(*(TEST_DEPENDENCIES + add_constraints))
+    session.install(*(ASYNC_DEPENDENCIES + add_constraints))
+    session.install(".", *add_constraints)
     session.run(
         "pytest",
         f"--junitxml=unit_{session.python}_sponge_log.xml",
         "--cov=google.auth",
         "--cov=google.oauth2",
         "--cov=tests",
+        "--cov-report=term-missing",
         "tests",
         "tests_async",
     )
@@ -123,7 +132,7 @@
         "--cov=google.oauth2",
         "--cov=tests",
         "--cov=tests_async",
-        "--cov-report=",
+        "--cov-report=term-missing",
         "tests",
         "tests_async",
     )
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -33,8 +33,7 @@
 extras = {
     "aiohttp": [
         "aiohttp >= 3.6.2, < 4.0.0dev; python_version>='3.6'",
-        "requests >= 2.18.0, < 3.0.0dev",
-        "urllib3 >= 1.0.0, <2.0.0dev",
+        "requests >= 2.20.0, < 3.0.0dev",
     ],
     "pyopenssl": "pyopenssl>=20.0.0",
     "reauth": "pyu2f>=0.1.5",

{"golden_diff": "diff --git a/noxfile.py b/noxfile.py\n--- a/noxfile.py\n+++ b/noxfile.py\n@@ -12,10 +12,14 @@\n # See the License for the specific language governing permissions and\n # limitations under the License.\n \n-import shutil\n import os\n+import pathlib\n+import shutil\n+\n import nox\n \n+CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()\n+\n TEST_DEPENDENCIES = [\n     \"flask\",\n     \"freezegun\",\n@@ -84,15 +88,20 @@\n \n @nox.session(python=[\"3.6\", \"3.7\", \"3.8\", \"3.9\"])\n def unit(session):\n-    session.install(*TEST_DEPENDENCIES)\n-    session.install(*(ASYNC_DEPENDENCIES))\n-    session.install(\".\")\n+    constraints_path = str(\n+        CURRENT_DIRECTORY / \"testing\" / f\"constraints-{session.python}.txt\"\n+    )\n+    add_constraints = [\"-c\", constraints_path]\n+    session.install(*(TEST_DEPENDENCIES + add_constraints))\n+    session.install(*(ASYNC_DEPENDENCIES + add_constraints))\n+    session.install(\".\", *add_constraints)\n     session.run(\n         \"pytest\",\n         f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n         \"--cov=google.auth\",\n         \"--cov=google.oauth2\",\n         \"--cov=tests\",\n+        \"--cov-report=term-missing\",\n         \"tests\",\n         \"tests_async\",\n     )\n@@ -123,7 +132,7 @@\n         \"--cov=google.oauth2\",\n         \"--cov=tests\",\n         \"--cov=tests_async\",\n-        \"--cov-report=\",\n+        \"--cov-report=term-missing\",\n         \"tests\",\n         \"tests_async\",\n     )\ndiff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -33,8 +33,7 @@\n extras = {\n     \"aiohttp\": [\n         \"aiohttp >= 3.6.2, < 4.0.0dev; python_version>='3.6'\",\n-        \"requests >= 2.18.0, < 3.0.0dev\",\n-        \"urllib3 >= 1.0.0, <2.0.0dev\",\n+        \"requests >= 2.20.0, < 3.0.0dev\",\n     ],\n     \"pyopenssl\": \"pyopenssl>=20.0.0\",\n     \"reauth\": \"pyu2f>=0.1.5\",\n", "issue": "'testing/constraints-*.txt' not used\nFrom #757.\r\n\r\nIn [`noxfile.py`](https://github.com/googleapis/google-auth-library-python/blob/a9234423cb2b69068fc0d30a5a0ee86a599ab8b7/noxfile.py#L87-L89), the constraints are not being used, which is why the one populated file, [`testing/constraints-3.6.txt](https://github.com/googleapis/google-auth-library-python/blob/master/testing/constraints-3.6.txt) is in an invalid state (multiple entries for `rsa`, maybe more issues).\n", "before_files": [{"content": "# Copyright 2019 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\nimport os\nimport nox\n\nTEST_DEPENDENCIES = [\n    \"flask\",\n    \"freezegun\",\n    \"mock\",\n    \"oauth2client\",\n    \"pyopenssl\",\n    \"pytest\",\n    \"pytest-cov\",\n    \"pytest-localserver\",\n    \"pyu2f\",\n    \"requests\",\n    \"urllib3\",\n    \"cryptography\",\n    \"responses\",\n    \"grpcio\",\n]\n\nASYNC_DEPENDENCIES = [\n    \"pytest-asyncio\",\n    \"aioresponses\",\n    \"asynctest\",\n    \"aiohttp!=3.7.4.post0\",\n]\n\nBLACK_VERSION = \"black==19.3b0\"\nBLACK_PATHS = [\n    \"google\",\n    \"tests\",\n    \"tests_async\",\n    \"noxfile.py\",\n    \"setup.py\",\n    \"docs/conf.py\",\n]\n\n\n@nox.session(python=\"3.7\")\ndef lint(session):\n    session.install(\"flake8\", \"flake8-import-order\", \"docutils\", BLACK_VERSION)\n    session.install(\".\")\n    session.run(\"black\", \"--check\", *BLACK_PATHS)\n    session.run(\n        \"flake8\",\n        \"--import-order-style=google\",\n        \"--application-import-names=google,tests,system_tests\",\n        \"google\",\n        \"tests\",\n        \"tests_async\",\n    )\n    session.run(\n        \"python\", \"setup.py\", \"check\", \"--metadata\", \"--restructuredtext\", \"--strict\"\n    )\n\n\n@nox.session(python=\"3.8\")\ndef blacken(session):\n    \"\"\"Run black.\n    Format code to uniform standard.\n    The Python version should be consistent with what is\n    supplied in the Python Owlbot postprocessor.\n\n    https://github.com/googleapis/synthtool/blob/master/docker/owlbot/python/Dockerfile\n    \"\"\"\n    session.install(BLACK_VERSION)\n    session.run(\"black\", *BLACK_PATHS)\n\n\n@nox.session(python=[\"3.6\", \"3.7\", \"3.8\", \"3.9\"])\ndef unit(session):\n    session.install(*TEST_DEPENDENCIES)\n    session.install(*(ASYNC_DEPENDENCIES))\n    session.install(\".\")\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"tests\",\n        \"tests_async\",\n    )\n\n\n@nox.session(python=[\"2.7\"])\ndef unit_prev_versions(session):\n    session.install(\".\")\n    session.install(*TEST_DEPENDENCIES)\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"tests\",\n    )\n\n\n@nox.session(python=\"3.7\")\ndef cover(session):\n    session.install(*TEST_DEPENDENCIES)\n    session.install(*(ASYNC_DEPENDENCIES))\n    session.install(\".\")\n    session.run(\n        \"pytest\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"--cov=tests_async\",\n        \"--cov-report=\",\n        \"tests\",\n        \"tests_async\",\n    )\n    session.run(\"coverage\", \"report\", \"--show-missing\", \"--fail-under=100\")\n\n\n@nox.session(python=\"3.7\")\ndef docgen(session):\n    session.env[\"SPHINX_APIDOC_OPTIONS\"] = \"members,inherited-members,show-inheritance\"\n    session.install(*TEST_DEPENDENCIES)\n    session.install(\"sphinx\")\n    session.install(\".\")\n    session.run(\"rm\", \"-r\", \"docs/reference\")\n    session.run(\n        \"sphinx-apidoc\",\n        \"--output-dir\",\n        \"docs/reference\",\n        \"--separate\",\n        \"--module-first\",\n        \"google\",\n    )\n\n\n@nox.session(python=\"3.7\")\ndef docs(session):\n    \"\"\"Build the docs for this library.\"\"\"\n\n    session.install(\"-e\", \".[aiohttp]\")\n    session.install(\n        \"sphinx<3.0.0\", \"alabaster\", \"recommonmark\", \"sphinx-docstring-typing\"\n    )\n\n    shutil.rmtree(os.path.join(\"docs\", \"_build\"), ignore_errors=True)\n    session.run(\n        \"sphinx-build\",\n        \"-T\",  # show full traceback on exception\n        \"-W\",  # warnings as errors\n        \"-N\",  # no colors\n        \"-b\",\n        \"html\",\n        \"-d\",\n        os.path.join(\"docs\", \"_build\", \"doctrees\", \"\"),\n        os.path.join(\"docs\", \"\"),\n        os.path.join(\"docs\", \"_build\", \"html\", \"\"),\n    )\n\n\n@nox.session(python=\"pypy\")\ndef pypy(session):\n    session.install(*TEST_DEPENDENCIES)\n    session.install(*ASYNC_DEPENDENCIES)\n    session.install(\".\")\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"tests\",\n        \"tests_async\",\n    )\n", "path": "noxfile.py"}, {"content": "# Copyright 2014 Google Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport io\nimport os\n\nfrom setuptools import find_packages\nfrom setuptools import setup\n\n\nDEPENDENCIES = (\n    \"cachetools>=2.0.0,<5.0\",\n    \"pyasn1-modules>=0.2.1\",\n    # rsa==4.5 is the last version to support 2.7\n    # https://github.com/sybrenstuvel/python-rsa/issues/152#issuecomment-643470233\n    'rsa<4.6; python_version < \"3.6\"',\n    'rsa>=3.1.4,<5; python_version >= \"3.6\"',\n    \"setuptools>=40.3.0\",\n    \"six>=1.9.0\",\n)\n\nextras = {\n    \"aiohttp\": [\n        \"aiohttp >= 3.6.2, < 4.0.0dev; python_version>='3.6'\",\n        \"requests >= 2.18.0, < 3.0.0dev\",\n        \"urllib3 >= 1.0.0, <2.0.0dev\",\n    ],\n    \"pyopenssl\": \"pyopenssl>=20.0.0\",\n    \"reauth\": \"pyu2f>=0.1.5\",\n}\n\nwith io.open(\"README.rst\", \"r\") as fh:\n    long_description = fh.read()\n\npackage_root = os.path.abspath(os.path.dirname(__file__))\n\nversion = {}\nwith open(os.path.join(package_root, \"google/auth/version.py\")) as fp:\n    exec(fp.read(), version)\nversion = version[\"__version__\"]\n\nsetup(\n    name=\"google-auth\",\n    version=version,\n    author=\"Google Cloud Platform\",\n    author_email=\"googleapis-packages@google.com\",\n    description=\"Google Authentication Library\",\n    long_description=long_description,\n    url=\"https://github.com/googleapis/google-auth-library-python\",\n    packages=find_packages(exclude=(\"tests*\", \"system_tests*\")),\n    namespace_packages=(\"google\",),\n    install_requires=DEPENDENCIES,\n    extras_require=extras,\n    python_requires=\">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*\",\n    license=\"Apache 2.0\",\n    keywords=\"google auth oauth client\",\n    classifiers=[\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: 3.9\",\n        \"Development Status :: 5 - Production/Stable\",\n        \"Intended Audience :: Developers\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"Operating System :: POSIX\",\n        \"Operating System :: Microsoft :: Windows\",\n        \"Operating System :: MacOS :: MacOS X\",\n        \"Operating System :: OS Independent\",\n        \"Topic :: Internet :: WWW/HTTP\",\n    ],\n)\n", "path": "setup.py"}], "after_files": [{"content": "# Copyright 2019 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport pathlib\nimport shutil\n\nimport nox\n\nCURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()\n\nTEST_DEPENDENCIES = [\n    \"flask\",\n    \"freezegun\",\n    \"mock\",\n    \"oauth2client\",\n    \"pyopenssl\",\n    \"pytest\",\n    \"pytest-cov\",\n    \"pytest-localserver\",\n    \"pyu2f\",\n    \"requests\",\n    \"urllib3\",\n    \"cryptography\",\n    \"responses\",\n    \"grpcio\",\n]\n\nASYNC_DEPENDENCIES = [\n    \"pytest-asyncio\",\n    \"aioresponses\",\n    \"asynctest\",\n    \"aiohttp!=3.7.4.post0\",\n]\n\nBLACK_VERSION = \"black==19.3b0\"\nBLACK_PATHS = [\n    \"google\",\n    \"tests\",\n    \"tests_async\",\n    \"noxfile.py\",\n    \"setup.py\",\n    \"docs/conf.py\",\n]\n\n\n@nox.session(python=\"3.7\")\ndef lint(session):\n    session.install(\"flake8\", \"flake8-import-order\", \"docutils\", BLACK_VERSION)\n    session.install(\".\")\n    session.run(\"black\", \"--check\", *BLACK_PATHS)\n    session.run(\n        \"flake8\",\n        \"--import-order-style=google\",\n        \"--application-import-names=google,tests,system_tests\",\n        \"google\",\n        \"tests\",\n        \"tests_async\",\n    )\n    session.run(\n        \"python\", \"setup.py\", \"check\", \"--metadata\", \"--restructuredtext\", \"--strict\"\n    )\n\n\n@nox.session(python=\"3.8\")\ndef blacken(session):\n    \"\"\"Run black.\n    Format code to uniform standard.\n    The Python version should be consistent with what is\n    supplied in the Python Owlbot postprocessor.\n\n    https://github.com/googleapis/synthtool/blob/master/docker/owlbot/python/Dockerfile\n    \"\"\"\n    session.install(BLACK_VERSION)\n    session.run(\"black\", *BLACK_PATHS)\n\n\n@nox.session(python=[\"3.6\", \"3.7\", \"3.8\", \"3.9\"])\ndef unit(session):\n    constraints_path = str(\n        CURRENT_DIRECTORY / \"testing\" / f\"constraints-{session.python}.txt\"\n    )\n    add_constraints = [\"-c\", constraints_path]\n    session.install(*(TEST_DEPENDENCIES + add_constraints))\n    session.install(*(ASYNC_DEPENDENCIES + add_constraints))\n    session.install(\".\", *add_constraints)\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"--cov-report=term-missing\",\n        \"tests\",\n        \"tests_async\",\n    )\n\n\n@nox.session(python=[\"2.7\"])\ndef unit_prev_versions(session):\n    session.install(\".\")\n    session.install(*TEST_DEPENDENCIES)\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"tests\",\n    )\n\n\n@nox.session(python=\"3.7\")\ndef cover(session):\n    session.install(*TEST_DEPENDENCIES)\n    session.install(*(ASYNC_DEPENDENCIES))\n    session.install(\".\")\n    session.run(\n        \"pytest\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"--cov=tests_async\",\n        \"--cov-report=term-missing\",\n        \"tests\",\n        \"tests_async\",\n    )\n    session.run(\"coverage\", \"report\", \"--show-missing\", \"--fail-under=100\")\n\n\n@nox.session(python=\"3.7\")\ndef docgen(session):\n    session.env[\"SPHINX_APIDOC_OPTIONS\"] = \"members,inherited-members,show-inheritance\"\n    session.install(*TEST_DEPENDENCIES)\n    session.install(\"sphinx\")\n    session.install(\".\")\n    session.run(\"rm\", \"-r\", \"docs/reference\")\n    session.run(\n        \"sphinx-apidoc\",\n        \"--output-dir\",\n        \"docs/reference\",\n        \"--separate\",\n        \"--module-first\",\n        \"google\",\n    )\n\n\n@nox.session(python=\"3.7\")\ndef docs(session):\n    \"\"\"Build the docs for this library.\"\"\"\n\n    session.install(\"-e\", \".[aiohttp]\")\n    session.install(\n        \"sphinx<3.0.0\", \"alabaster\", \"recommonmark\", \"sphinx-docstring-typing\"\n    )\n\n    shutil.rmtree(os.path.join(\"docs\", \"_build\"), ignore_errors=True)\n    session.run(\n        \"sphinx-build\",\n        \"-T\",  # show full traceback on exception\n        \"-W\",  # warnings as errors\n        \"-N\",  # no colors\n        \"-b\",\n        \"html\",\n        \"-d\",\n        os.path.join(\"docs\", \"_build\", \"doctrees\", \"\"),\n        os.path.join(\"docs\", \"\"),\n        os.path.join(\"docs\", \"_build\", \"html\", \"\"),\n    )\n\n\n@nox.session(python=\"pypy\")\ndef pypy(session):\n    session.install(*TEST_DEPENDENCIES)\n    session.install(*ASYNC_DEPENDENCIES)\n    session.install(\".\")\n    session.run(\n        \"pytest\",\n        f\"--junitxml=unit_{session.python}_sponge_log.xml\",\n        \"--cov=google.auth\",\n        \"--cov=google.oauth2\",\n        \"--cov=tests\",\n        \"tests\",\n        \"tests_async\",\n    )\n", "path": "noxfile.py"}, {"content": "# Copyright 2014 Google Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport io\nimport os\n\nfrom setuptools import find_packages\nfrom setuptools import setup\n\n\nDEPENDENCIES = (\n    \"cachetools>=2.0.0,<5.0\",\n    \"pyasn1-modules>=0.2.1\",\n    # rsa==4.5 is the last version to support 2.7\n    # https://github.com/sybrenstuvel/python-rsa/issues/152#issuecomment-643470233\n    'rsa<4.6; python_version < \"3.6\"',\n    'rsa>=3.1.4,<5; python_version >= \"3.6\"',\n    \"setuptools>=40.3.0\",\n    \"six>=1.9.0\",\n)\n\nextras = {\n    \"aiohttp\": [\n        \"aiohttp >= 3.6.2, < 4.0.0dev; python_version>='3.6'\",\n        \"requests >= 2.20.0, < 3.0.0dev\",\n    ],\n    \"pyopenssl\": \"pyopenssl>=20.0.0\",\n    \"reauth\": \"pyu2f>=0.1.5\",\n}\n\nwith io.open(\"README.rst\", \"r\") as fh:\n    long_description = fh.read()\n\npackage_root = os.path.abspath(os.path.dirname(__file__))\n\nversion = {}\nwith open(os.path.join(package_root, \"google/auth/version.py\")) as fp:\n    exec(fp.read(), version)\nversion = version[\"__version__\"]\n\nsetup(\n    name=\"google-auth\",\n    version=version,\n    author=\"Google Cloud Platform\",\n    author_email=\"googleapis-packages@google.com\",\n    description=\"Google Authentication Library\",\n    long_description=long_description,\n    url=\"https://github.com/googleapis/google-auth-library-python\",\n    packages=find_packages(exclude=(\"tests*\", \"system_tests*\")),\n    namespace_packages=(\"google\",),\n    install_requires=DEPENDENCIES,\n    extras_require=extras,\n    python_requires=\">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*\",\n    license=\"Apache 2.0\",\n    keywords=\"google auth oauth client\",\n    classifiers=[\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: 3.9\",\n        \"Development Status :: 5 - Production/Stable\",\n        \"Intended Audience :: Developers\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"Operating System :: POSIX\",\n        \"Operating System :: Microsoft :: Windows\",\n        \"Operating System :: MacOS :: MacOS X\",\n        \"Operating System :: OS Independent\",\n        \"Topic :: Internet :: WWW/HTTP\",\n    ],\n)\n", "path": "setup.py"}]}