Python helper class to streamlime interaction with Google APIs. Based on python-google-api-client.
google-api-helper helps streamline access to google apis including authentication using oauth2 and factory methods to create an API service. I.e. creating a compute API service is not to bad but still needs some code:
.. code-block:: python
import googleapiclient.discovery from oauth2client.service_account import ServiceAccountCredentials
credentials = ServiceAccountCredentials.from_json_keyfile_name("service_account.json", ["https://www.googleapis.com/auth/compute"]) compute = googleapiclient.discovery.build('compute', 'v1', credentials=credentials)
With google-api-helper that's a oneliner:
.. code-block:: python
from googleapi import GoogleApi compute = GoogleApi.compute().with_service_account_file("service_account.json")
also using the OAUTH2 flow is simple
.. code-block:: python
from googleapi import GoogleApi compute = GoogleApi.compute().with_oauth2_flow("client_secret.json")
python-google-api-client also got retries for server errors included, but not for rate limiting. Therefore every API call you make needs to implement an exponential backoff. This is automatically done by using google-api-helper.
.. code-block:: python
from googleapi import GoogleApi compute = GoogleApi.compute().with_oauth2_flow("client_secret.json")
compute.service.instances().list(project="my-gcp-project", zone="europe-west1-d").execute()
compute.instances().list(project="my-gcp-project", zone="europe-west1-d").execute()
Add google-api-helper
to your requirements.txt or your module requirements or install via pip:
.. code-block:: bash
pip install google-api-helper
Import GoogleApi in your python code
.. code-block:: python
from googleapi import GoogleApi
Create the api from a factory method or specify it by yourself:
.. code-block:: python
compute = GoogleApi.compute() drive = GoogleApi.drive() gmail = GoogleApi("gmail", "v1", ["https://mail.google.com/"])
Authenticate with oauth2
.. code-block:: python
compute.with_application_credentials()
drive.with_service_account_file("service_account.json", "test@example.com")
gmail.with_oauth2_flow("client_secret.json")
And call the api
.. code-block:: python
instances = compute.instances().list(project="project-id", zone="europe-west1-d").execute() drive_files = drive.files().list(q="name='test'").execute() messages = gmail.users().messages().list(userId="me").execute()
.. code-block:: bash
python setup.py bdist_wheel --universal python -m twine upload dist/*