Fixes to show All Time data
[ckanext-ga-report.git] / ckanext / ga_report / command.py
David Read
Ross Jones
David Read

Ross Jones


David Read




















Ross Jones


Ross Jones





Ross Jones






Ross Jones






Ross Jones



Ross Jones
David Read



Ross Jones



David Read
Ross Jones
David Read

Ross Jones
David Read


Ross Jones

David Read



Ross Jones


Ross Jones
Ross Jones
Ross Jones
Ross Jones

Ross Jones



Ross Jones

David Read



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import logging
 
from ckan.lib.cli import CkanCommand
# No other CKAN imports allowed until _load_config is run, or logging is disabled
 
class InitDB(CkanCommand):
    """Initialise the extension's database tables
    """
    summary = __doc__.split('\n')[0]
    usage = __doc__
    max_args = 0
    min_args = 0
 
    def command(self):
        self._load_config()
 
        import ckan.model as model
        model.Session.remove()
        model.Session.configure(bind=model.meta.engine)
        log = logging.getLogger('ckanext.ga-report')
 
        import ga_model
        ga_model.init_tables()
        log.info("DB tables are setup")
 
 
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__
    max_args = 0
    min_args = 0
 
    def command(self):
        """
        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')
 
class LoadAnalytics(CkanCommand):
    """Get data from Google Analytics API and save it
    in the ga_model
 
    Usage: paster loadanalytics <tokenfile> <time-period>
 
    Where <tokenfile> is the name of the auth token file from
    the getauthtoken step.
 
    And where <time-period> is:
        all         - data for all time
        latest      - (default) just the 'latest' data
        YYYY-MM-DD  - just data for all time periods going
                      back to (and including) this date
    """
    summary = __doc__.split('\n')[0]
    usage = __doc__
    max_args = 2
    min_args = 1
 
    def command(self):
        self._load_config()
 
        from ga_auth import init_service
        try:
            svc = init_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 ga_auth import get_profile_id
        downloader = DownloadAnalytics(svc, profile_id=get_profile_id(svc))
 
        time_period = self.args[1] if self.args and len(self.args) > 1 else 'latest'
        if time_period == 'all':
            downloader.all_()
        elif time_period == 'latest':
            downloader.latest()
        else:
            since_date = datetime.datetime.strptime(time_period, '%Y-%m-%d')
            downloader.since_date(since_date)