platypush/platypush/plugins/google/__init__.py

72 lines
2.2 KiB
Python
Raw Normal View History

2018-06-23 01:00:43 +02:00
"""
.. moduleauthor:: Fabio Manganiello <blacklight86@gmail.com>
"""
import os
from platypush.plugins import Plugin
class GooglePlugin(Plugin):
"""
Executes calls to the Google APIs using the google-api-python-client.
2018-06-23 01:00:43 +02:00
This class is extended by ``GoogleMailPlugin``, ``GoogleCalendarPlugin`` etc.
In order to use Google services (like GMail, Maps, Calendar etc.) with
your account you need to:
1. Create your Google application, if you don't have one already, on
the developers console, https://console.developers.google.com
2. Click on "Credentials", then "Create credentials" -> "OAuth client ID"
3 Select "Other", enter whichever description you like, and create
4. Click on the "Download JSON" icon next to your newly created client ID
2018-06-23 01:00:43 +02:00
5. Generate a credentials file for the needed scope::
python -m platypush.plugins.google.credentials 'https://www.googleapis.com/auth/gmail.compose' ~/client_secret.json
Requires:
2018-06-23 01:00:43 +02:00
* **google-api-python-client** (``pip install google-api-python-client``)
2020-01-09 22:07:03 +01:00
* **oauth2client** (``pip install oauth2client``)
"""
def __init__(self, scopes=None, *args, **kwargs):
2018-06-23 01:00:43 +02:00
"""
Initialized the Google plugin with the required scopes.
:param scopes: List of required scopes
:type scopes: list
"""
from platypush.plugins.google.credentials import get_credentials
super().__init__(*args, **kwargs)
self._scopes = scopes or []
if self._scopes:
scopes = ' '.join(sorted(self._scopes))
self.credentials = {
scopes: get_credentials(scopes)
}
else:
self.credentials = {}
def get_service(self, service, version, scopes=None):
import httplib2
from apiclient import discovery
if scopes is None:
scopes = getattr(self, 'scopes') if hasattr(self, 'scopes') else []
scopes = ' '.join(sorted(scopes))
credentials = self.credentials[scopes]
http = credentials.authorize(httplib2.Http())
return discovery.build(service, version, http=http, cache_discovery=False)
# vim:sw=4:ts=4:et: