diff options
author | Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> | 2020-04-20 14:05:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-20 14:05:05 -0700 |
commit | f706cfd821ab7457e5db37abfc3619772657dd0e (patch) | |
tree | 5297ee61b90c5679a0134ee32386ebdcf76de920 | |
parent | 8ed729f1d868a8713ab442bf0bf59e77ba36afb6 (diff) | |
download | google-api-python-client-f706cfd821ab7457e5db37abfc3619772657dd0e.tar.gz |
chore: use nox and release-please; drop 3.4 (#852)
Co-authored-by: Kamil Breguła <mik-laj@users.noreply.github.com>
Co-authored-by: Christopher Wilcox <crwilcox@google.com>
-rw-r--r-- | .github/ISSUE_TEMPLATE/bug_report.md | 22 | ||||
-rw-r--r-- | .github/PULL_REQUEST_TEMPLATE.md | 7 | ||||
-rw-r--r-- | .github/release-please.yml | 1 | ||||
-rw-r--r-- | .gitignore | 2 | ||||
-rwxr-xr-x | .kokoro/build.sh | 32 | ||||
-rw-r--r-- | .kokoro/common.cfg | 19 | ||||
-rw-r--r-- | .kokoro/continuous/continuous.cfg | 2 | ||||
-rw-r--r-- | .kokoro/presubmit/presubmit.cfg | 2 | ||||
-rwxr-xr-x | .kokoro/release.sh | 34 | ||||
-rw-r--r-- | .kokoro/release/common.cfg | 64 | ||||
-rw-r--r-- | .kokoro/release/release.cfg | 1 | ||||
-rwxr-xr-x | .kokoro/trampoline.sh | 17 | ||||
-rw-r--r-- | .repo-metadata.json | 11 | ||||
-rw-r--r-- | googleapiclient/__init__.py | 2 | ||||
-rw-r--r-- | googleapiclient/model.py | 5 | ||||
-rw-r--r-- | noxfile.py | 78 | ||||
-rw-r--r-- | setup.py | 18 | ||||
-rw-r--r-- | synth.metadata | 12 | ||||
-rw-r--r-- | synth.py | 30 | ||||
-rw-r--r-- | tests/test_json_model.py | 6 | ||||
-rw-r--r-- | tox.ini | 24 |
21 files changed, 312 insertions, 77 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3d44f3e4b..7d3526577 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,23 +11,33 @@ Thanks for stopping by to let us know something could be better! Please run down the following list and make sure you've tried the usual "quick fixes": - Search the issues already opened: https://github.com/googleapis/google-api-python-client/issues - - If you have a question, post on Stackoverflow under the `google-api` tag. - - If you are reporting an issue or requesting a feature for a G Suite API, please use their [public issue tracker](https://gsuite-developers.googleblog.com/2017/03/a-new-issue-tracker-for-g-suite.html) + - Search StackOverflow: https://stackoverflow.com/questions/tagged/google-cloud-platform+python If you are still having issues, please be sure to include as much information as possible: #### Environment details - - OS: - - Python version: - - pip version: - - `google-api-python-client` version: + - OS type and version: + - Python version: `python --version` + - pip version: `pip --version` + - `google-api-python-client` version: `pip show google-api-python-client` #### Steps to reproduce 1. ? 2. ? +#### Code example + +```python +# example +``` + +#### Stack trace +``` +# example +``` + Making sure to follow these steps will guarantee the quickest resolution possible. Thanks! diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..24c6fa88f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ +Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: +- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/google-api-python-client/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea +- [ ] Ensure the tests and linter pass +- [ ] Code coverage does not decrease (if any source code was changed) +- [ ] Appropriate docs were updated (if necessary) + +Fixes #<issue_number_goes_here> 🦕 diff --git a/.github/release-please.yml b/.github/release-please.yml new file mode 100644 index 000000000..4507ad059 --- /dev/null +++ b/.github/release-please.yml @@ -0,0 +1 @@ +releaseType: python diff --git a/.gitignore b/.gitignore index cf2c4a698..1637b1d3b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ build/ dist/ # Test files -.tox/ +.nox/ # Coverage files .coverage diff --git a/.kokoro/build.sh b/.kokoro/build.sh index e0c966b5a..ab8cebb4b 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -1,4 +1,17 @@ #!/bin/bash +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. set -eo pipefail @@ -7,7 +20,20 @@ cd github/google-api-python-client # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 -python3 -m pip install --upgrade tox +# Debug: show build environment +env | grep KOKORO -# Run tests -tox +# Setup service account credentials. +export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json + +# Setup project id. +export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") + +# Remove old nox +python3.6 -m pip uninstall --yes --quiet nox-automation + +# Install nox +python3.6 -m pip install --upgrade --quiet nox +python3.6 -m nox --version + +python3.6 -m nox diff --git a/.kokoro/common.cfg b/.kokoro/common.cfg deleted file mode 100644 index c21dc6d4f..000000000 --- a/.kokoro/common.cfg +++ /dev/null @@ -1,19 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "google-api-python-client/.kokoro/trampoline.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" -} - -# Tell the trampoline which build file to use. -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/google-api-python-client/.kokoro/build.sh" -} diff --git a/.kokoro/continuous/continuous.cfg b/.kokoro/continuous/continuous.cfg index 18a4c3532..8f43917d9 100644 --- a/.kokoro/continuous/continuous.cfg +++ b/.kokoro/continuous/continuous.cfg @@ -1 +1 @@ -# Format: //devtools/kokoro/config/proto/build.proto +# Format: //devtools/kokoro/config/proto/build.proto
\ No newline at end of file diff --git a/.kokoro/presubmit/presubmit.cfg b/.kokoro/presubmit/presubmit.cfg index 18a4c3532..8f43917d9 100644 --- a/.kokoro/presubmit/presubmit.cfg +++ b/.kokoro/presubmit/presubmit.cfg @@ -1 +1 @@ -# Format: //devtools/kokoro/config/proto/build.proto +# Format: //devtools/kokoro/config/proto/build.proto
\ No newline at end of file diff --git a/.kokoro/release.sh b/.kokoro/release.sh new file mode 100755 index 000000000..b4756d089 --- /dev/null +++ b/.kokoro/release.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash + +set -eo pipefail + +# Start the releasetool reporter +python3 -m pip install gcp-releasetool +python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script + +# Ensure that we have the latest versions of Twine, Wheel, and Setuptools. +python3 -m pip install --upgrade twine wheel setuptools + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Move into the package, build the distribution and upload. +TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google_cloud_pypi_password") +cd github/google-api-python-client +python3 setup.py sdist bdist_wheel +twine upload --username gcloudpypi --password "${TWINE_PASSWORD}" dist/* diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg new file mode 100644 index 000000000..6a8864b88 --- /dev/null +++ b/.kokoro/release/common.cfg @@ -0,0 +1,64 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "google-api-python-client/.kokoro/trampoline.sh" + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" +} +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/google-api-python-client/.kokoro/release.sh" +} + +# Fetch the token needed for reporting release status to GitHub +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "yoshi-automation-github-key" + } + } +} + +# Fetch PyPI password +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "google_cloud_pypi_password" + } + } +} + +# Fetch magictoken to use with Magic Github Proxy +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "releasetool-magictoken" + } + } +} + +# Fetch api key to use with Magic Github Proxy +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "magic-github-proxy-api-key" + } + } +} diff --git a/.kokoro/release/release.cfg b/.kokoro/release/release.cfg new file mode 100644 index 000000000..8f43917d9 --- /dev/null +++ b/.kokoro/release/release.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto
\ No newline at end of file diff --git a/.kokoro/trampoline.sh b/.kokoro/trampoline.sh index 0efc3be38..e8c4251f3 100755 --- a/.kokoro/trampoline.sh +++ b/.kokoro/trampoline.sh @@ -12,13 +12,12 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + set -eo pipefail -# Always run the cleanup script, regardless of the success of bouncing into -# the container. -function cleanup() { - chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh - ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh - echo "cleanup"; -} -trap cleanup EXIT -python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" + +python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" || ret_code=$? + +chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh +${KOKORO_GFILE_DIR}/trampoline_cleanup.sh || true + +exit ${ret_code} diff --git a/.repo-metadata.json b/.repo-metadata.json new file mode 100644 index 000000000..1b810b0be --- /dev/null +++ b/.repo-metadata.json @@ -0,0 +1,11 @@ + +{ + "name": "google-api-python-client", + "name_pretty": "Google API Python Client", + "client_documentation": "https://github.com/googleapis/google-api-python-client/tree/master/docs#google-api-client-library-for-python-docs", + "issue_tracker": "https://github.com/googleapis/google-api-python-client/issues", + "release_level": "ga", + "language": "python", + "repo": "googleapis/google-api-python-client", + "distribution_name": "google-api-python-client" + }
\ No newline at end of file diff --git a/googleapiclient/__init__.py b/googleapiclient/__init__.py index b9db848ef..c9218dd85 100644 --- a/googleapiclient/__init__.py +++ b/googleapiclient/__init__.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.8.0" - # Set default logging handler to avoid "No handler found" warnings. import logging diff --git a/googleapiclient/model.py b/googleapiclient/model.py index 7255ecf39..f58549c49 100644 --- a/googleapiclient/model.py +++ b/googleapiclient/model.py @@ -27,12 +27,13 @@ __author__ = "jcgregorio@google.com (Joe Gregorio)" import json import logging import platform +import pkg_resources from six.moves.urllib.parse import urlencode -from googleapiclient import __version__ from googleapiclient.errors import HttpError +_LIBRARY_VERSION = pkg_resources.get_distribution("google-api-python-client").version _PY_VERSION = platform.python_version() LOGGER = logging.getLogger(__name__) @@ -152,7 +153,7 @@ class BaseModel(Model): else: headers["x-goog-api-client"] = "" headers["x-goog-api-client"] += "gdcl/%s gl-python/%s" % ( - __version__, + _LIBRARY_VERSION, _PY_VERSION, ) diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 000000000..438ff41c5 --- /dev/null +++ b/noxfile.py @@ -0,0 +1,78 @@ + +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import nox + +test_dependencies = [ + "google-auth", + "google-auth-httplib2", + "mox", + "pyopenssl", + "pytest", + "pytest-cov", + "webtest", + "coverage", + "unittest2", + "mock", +] + + +@nox.session(python=["3.7"]) +def lint(session): + session.install("flake8") + session.run( + "flake8", + "googleapiclient", + "tests", + "--count", + "--select=E9,F63,F7,F82", + "--show-source", + "--statistics", + ) + + +@nox.parametrize( + "oauth2client", + [ + "oauth2client<2dev", + "oauth2client>=2,<=3dev", + "oauth2client>=3,<=4dev", + "oauth2client>=4,<=5dev", + ], +) +@nox.session(python=["2.7", "3.5", "3.6", "3.7"]) +def unit(session, oauth2client): + session.install(*test_dependencies) + session.install(oauth2client) + if session.python < "3.0": + session.install("django<2.0.0") + else: + session.install("django>=2.0.0") + + session.install('.') + + # Run py.test against the unit tests. + session.run( + "py.test", + "--quiet", + "--cov=googleapiclient", + "--cov=tests", + "--cov-append", + "--cov-config=.coveragerc", + "--cov-report=", + "--cov-fail-under=85", + "tests", + *session.posargs, + )
\ No newline at end of file @@ -28,6 +28,8 @@ if (3, 1) <= sys.version_info < (3, 4): print("google-api-python-client requires python3 version >= 3.4.", file=sys.stderr) sys.exit(1) +import io +import os from setuptools import setup packages = ["apiclient", "googleapiclient", "googleapiclient/discovery_cache"] @@ -44,19 +46,22 @@ install_requires = [ "uritemplate>=3.0.0,<4dev", ] -long_desc = """The Google API Client for Python is a client library for -accessing the Plus, Moderator, and many other Google APIs.""" +package_root = os.path.abspath(os.path.dirname(__file__)) -import googleapiclient +readme_filename = os.path.join(package_root, "README.md") +with io.open(readme_filename, encoding="utf-8") as readme_file: + readme = readme_file.read() -version = googleapiclient.__version__ +version = "1.8.0" setup( name="google-api-python-client", version=version, description="Google API Client Library for Python", - long_description=long_desc, - author="Google Inc.", + long_description=readme, + long_description_content_type='text/markdown', + author="Google LLC", + author_email="googleapis-packages@google.com", url="http://github.com/google/google-api-python-client/", install_requires=install_requires, python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", @@ -68,7 +73,6 @@ setup( "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", diff --git a/synth.metadata b/synth.metadata new file mode 100644 index 000000000..d06a0f15b --- /dev/null +++ b/synth.metadata @@ -0,0 +1,12 @@ +{ + "updateTime": "2020-03-30T20:47:31.469660Z", + "sources": [ + { + "git": { + "name": "synthtool", + "remote": "https://github.com/googleapis/synthtool.git", + "sha": "f5e8c88d9870d8aa4eb43fa0b39f07e02bfbe4df" + } + } + ] +}
\ No newline at end of file diff --git a/synth.py b/synth.py new file mode 100644 index 000000000..017717db6 --- /dev/null +++ b/synth.py @@ -0,0 +1,30 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import synthtool as s +from synthtool import gcp + +common = gcp.CommonTemplates() + +# ---------------------------------------------------------------------------- +# Add templated files +# ---------------------------------------------------------------------------- +templated_files = common.py_library() + +# Copy kokoro configs. +# Docs are excluded as repo docs cannot currently be generated using sphinx. +s.move(templated_files / '.kokoro', excludes=['**/docs/*', 'publish-docs.sh']) + +# Also move issue templates +s.move(templated_files / '.github')
\ No newline at end of file diff --git a/tests/test_json_model.py b/tests/test_json_model.py index 0064f3fd7..68578039e 100644 --- a/tests/test_json_model.py +++ b/tests/test_json_model.py @@ -26,17 +26,19 @@ __author__ = "jcgregorio@google.com (Joe Gregorio)" import copy import json import os +import pkg_resources import platform import unittest2 as unittest import httplib2 import googleapiclient.model -from googleapiclient import __version__ from googleapiclient.errors import HttpError from googleapiclient.model import JsonModel from six.moves.urllib.parse import parse_qs +_LIBRARY_VERSION = pkg_resources.get_distribution("google-api-python-client").version + class Model(unittest.TestCase): def test_json_no_body(self): @@ -171,7 +173,7 @@ class Model(unittest.TestCase): headers["x-goog-api-client"], "gccl/1.23.4" + " gdcl/" - + __version__ + + _LIBRARY_VERSION + " gl-python/" + platform.python_version(), ) diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 1d9bc1391..000000000 --- a/tox.ini +++ /dev/null @@ -1,24 +0,0 @@ -[tox] -envlist = py{27,34,35,36,37}-oauth2client{1,2,3,4} - -[testenv] -deps = - oauth2client1: oauth2client<2dev - oauth2client2: oauth2client>=2,<=3dev - oauth2client3: oauth2client>=3,<=4dev - oauth2client4: oauth2client>=4,<=5dev - google-auth - google-auth-httplib2 - mox - pyopenssl - django<2.0.0; python_version < '3.0.0' - django>=2.0.0; python_version > '3.0.0' - flake8 - webtest - nose - coverage>=3.6,<3.99 - unittest2 - mock -commands = - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - nosetests --with-coverage --cover-package=googleapiclient --nocapture --cover-erase --cover-tests --cover-branches --cover-min-percentage=85 [] |