Example #1
0
class OAuth2EventsUtility(object):
    flow = None
    credentials = None
    http_auth = None
    service = None
    PROJECT_NUMBER = None
    KEY_FILE = None
    SERVICE_ACCOUNT_EMAIL = None

    def __init__(self, **kwargs):
        self.PROJECT_NUMBER = kwargs.get('projectNumber', '774436620412')
        self.KEY_FILE = kwargs.get('keyFile', 'ssl/antenna_events.p12')
        self.SERVICE_ACCOUNT_EMAIL = kwargs.get(
            'serviceEmail',
            '*****@*****.**'
        )
        self.authorize()

    def authorize(self):
        with open(self.KEY_FILE, 'r') as fd:
            key = fd.read()

        self.credentials = SignedJwtAssertionCredentials(
            self.SERVICE_ACCOUNT_EMAIL,
            key,
            scope="https://www.googleapis.com/auth/bigquery")

        assertion = self.credentials._generate_assertion()

        self.http_auth = self.credentials.authorize(httplib2.Http())
        self.service = build('bigquery', 'v2', http=self.http_auth)

    def refresh(self):
        self.credentials._do_refresh_request(self.http_auth.request)

    def get_top_reaction_view_hash_counts(self,
                                          group,
                                          start,
                                          end,
                                          maxResults=100):
        query = 'select ch, count(ch) as counts  from %s where ch != "null" and et = "rs" and ev="rd" and %s group by ch order by counts desc'
        body = self.get_request_body(
            self.mod_query_for_dates(query, group, start, end), maxResults)
        try:
            result = self.service.jobs().query(projectId=int(
                self.PROJECT_NUMBER),
                                               body=body).execute()
            rows = result['rows']
            hash_tuples = []
            for row in rows:
                hash_tuples.append(
                    (row['f'][0]['v'], row['f'][1]['v']))  #hash, count
            return hash_tuples
        except Exception, ex:
            logger.warn(ex)