Implement oauth2 for accessing google analytics
[ckanext-ga-report.git] / ckanext / ga_report / command.py
blob:a/ckanext/ga_report/command.py -> blob:b/ckanext/ga_report/command.py
import logging import logging
   
from ckan.lib.cli import CkanCommand from ckan.lib.cli import CkanCommand
# No other CKAN imports allowed until _load_config is run, or logging is disabled # No other CKAN imports allowed until _load_config is run, or logging is disabled
   
class InitDB(CkanCommand): class InitDB(CkanCommand):
"""Initialise the extension's database tables """Initialise the extension's database tables
""" """
summary = __doc__.split('\n')[0] summary = __doc__.split('\n')[0]
usage = __doc__ usage = __doc__
max_args = 0 max_args = 0
min_args = 0 min_args = 0
   
def command(self): def command(self):
self._load_config() self._load_config()
   
import ckan.model as model import ckan.model as model
model.Session.remove() model.Session.remove()
model.Session.configure(bind=model.meta.engine) model.Session.configure(bind=model.meta.engine)
log = logging.getLogger('ckanext.ga-report') log = logging.getLogger('ckanext.ga-report')
   
import ga_model import ga_model
ga_model.init_tables() ga_model.init_tables()
log.info("DB tables are setup") log.info("DB tables are setup")
   
   
  class GetAuthToken(CkanCommand):
  """ Get's the Google auth token
  """
  summary = __doc__.split('\n')[0]
  usage = __doc__
  max_args = 0
  min_args = 0
   
  def command(self):
  from ga_auth import initialize_service
  initialize_service('token.dat',
  self.args[0] if self.args
  else 'credentials.json')
   
class LoadAnalytics(CkanCommand): class LoadAnalytics(CkanCommand):
"""Get data from Google Analytics API and save it """Get data from Google Analytics API and save it
in the ga_model in the ga_model
   
Usage: paster loadanalytics <time-period> Usage: paster loadanalytics <tokenfile> <time-period>
   
Where <time-period> is: Where <tokenfile> is the name of the auth token file from
  the getauthtoken step.
   
  And where <time-period> is:
all - data for all time all - data for all time
latest - (default) just the 'latest' data latest - (default) just the 'latest' data
YYYY-MM-DD - just data for all time periods going YYYY-MM-DD - just data for all time periods going
back to (and including) this date back to (and including) this date
""" """
summary = __doc__.split('\n')[0] summary = __doc__.split('\n')[0]
usage = __doc__ usage = __doc__
max_args = 1 max_args = 2
min_args = 0 min_args = 1
   
def command(self): def command(self):
self._load_config() self._load_config()
   
  from ga_auth import initialize_service
  try:
  svc = initialize_service(self.args[0], None)
  except TypeError:
  print 'Have you correctly run the getauthtoken task and specified the correct file here'
  return
   
from download_analytics import DownloadAnalytics from download_analytics import DownloadAnalytics
downloader = DownloadAnalytics() from ga_auth import get_profile_id
  downloader = DownloadAnalytics(svc, profile_id=get_profile_id(svc))
time_period = self.args[0] if self.args else 'latest'  
  time_period = self.args[1] if self.args and len(self.args) > 1 else 'latest'
if time_period == 'all': if time_period == 'all':
downloader.all_() downloader.all_()
elif time_period == 'latest': elif time_period == 'latest':
downloader.latest() downloader.latest()
else: else:
since_date = datetime.datetime.strptime(time_period, '%Y-%m-%d') since_date = datetime.datetime.strptime(time_period, '%Y-%m-%d')
downloader.since_date(since_date) downloader.since_date(since_date)