Commented the code in ga_auth
--- a/ckanext/ga_report/command.py
+++ b/ckanext/ga_report/command.py
@@ -26,6 +26,12 @@
class GetAuthToken(CkanCommand):
""" Get's the Google auth token
+
+ Usage: paster getauthtoken <credentials_file>
+
+ Where <credentials_file> is the file name containing the details
+ for the service (obtained from https://code.google.com/apis/console).
+ By default this is set to credentials.json
"""
summary = __doc__.split('\n')[0]
usage = __doc__
@@ -33,7 +39,13 @@
min_args = 0
def command(self):
- from ga_auth import initialize_service
+ """
+ In this case we don't want a valid service, but rather just to
+ force the user through the auth flow. We allow this to complete to
+ act as a form of verification instead of just getting the token and
+ assuming it is correct.
+ """
+ from ga_auth import init_service
initialize_service('token.dat',
self.args[0] if self.args
else 'credentials.json')
@@ -61,9 +73,9 @@
def command(self):
self._load_config()
- from ga_auth import initialize_service
+ from ga_auth import init_service
try:
- svc = initialize_service(self.args[0], None)
+ svc = init_service(self.args[0], None)
except TypeError:
print 'Have you correctly run the getauthtoken task and specified the correct file here'
return
--- a/ckanext/ga_report/ga_auth.py
+++ b/ckanext/ga_report/ga_auth.py
@@ -8,6 +8,10 @@
def _prepare_credentials( token_filename, credentials_filename ):
+ """
+ Either returns the user's oauth credentials or uses the credentials
+ file to generate a token (by forcing the user to login in the browser)
+ """
storage = Storage( token_filename )
credentials = storage.get()
@@ -19,7 +23,12 @@
return credentials
-def initialize_service( token_file, credentials_file ):
+def init_service( token_file, credentials_file ):
+ """
+ Given a file containing the user's oauth token (and another with
+ credentials in case we need to generate the token) will return a
+ service object representing the analytics API.
+ """
http = httplib2.Http()
credentials = _prepare_credentials(token_file, credentials_file)
@@ -27,19 +36,23 @@
return build('analytics', 'v3', http=http)
+
def get_profile_id(service):
- # Get a list of all Google Analytics accounts for this user
+ """
+ Get the profile ID for this user and the service specified by the
+ 'googleanalytics.id' configuration option.
+ """
accounts = service.management().accounts().list().execute()
- if accounts.get('items'):
- firstAccountId = accounts.get('items')[0].get('id')
- webPropertyId = config.get('googleanalytics.id')
- profiles = service.management().profiles().list(
- accountId=firstAccountId,
- webPropertyId=webPropertyId).execute()
+ if not accounts.get('items'):
+ return None
- if profiles.get('items'):
- # return the first Profile ID
- return profiles.get('items')[0].get('id')
+ accountId = accounts.get('items')[0].get('id')
+ webPropertyId = config.get('googleanalytics.id')
+ profiles = service.management().profiles().list(
+ accountId=accountId, webPropertyId=webPropertyId).execute()
+
+ if profiles.get('items'):
+ return profiles.get('items')[0].get('id')
return None