class ReferrersHandler(BaseHandler):
    @web.authenticated
    @cache(CACHE_EXPIRES)  # set the cache expires
    @unblock
    def get(self):
        """
        Returns your referrers list

        example:
        headers:
        [
          {
           "name": "ga:fullReferrer",
           "columnType": "DIMENSION",
           "dataType": "STRING"
          },
          {
           "name": "ga:users",
           "columnType": "METRIC",
           "dataType": "INTEGER"
          },
          {
           "name": "ga:bounces",
           "columnType": "METRIC",
           "dataType": "INTEGER"
          }
         ],

        rows:
        [
          [
           "linkplug",
           "216",
           "273"
          ],
          [
           "4webmasters.org/",
           "189",
           "194"
          ],
          [
           "reddit.com/",
           "152",
           "173"
          ],
        :return:
        """
        try:
            service_account = self.settings['service_account_email']
            self.service = GAcess(service_account_email=service_account,
                                  key_file_location=self.settings['key_file_location'])

            query_result = self.service.get_referrers(profile_id=self.settings['ga_profile_id'],
                                                      days=self.settings['start_days_ago'])
            try:
                data = query_result['rows']
            except KeyError:
                self.set_status(400, reason='Failed to fetch referrers data')
            else:
                # formatting decimal values to percentage
                for row in data:
                    row[2] = ("%.2f" % float(row[2])) + "%"

                table_title = 'Who is linking to us?'
                headers = ['Full referrer', 'Users', 'Bounces']
                return self.render_string('webhandler/data_table.html',
                                          data=data,
                                          table_title=table_title,
                                          headers=headers)
        except Exception as ex:
            self.set_status(403)
            return self.render_string('error.html',
                                      error=ex)
class ReferrersHandler(BaseHandler):
    @web.authenticated
    @cache(CACHE_EXPIRES)  # set the cache expires
    @unblock
    def get(self):
        """
        Returns your referrers list

        example:
        headers:
        [
          {
           "name": "ga:fullReferrer",
           "columnType": "DIMENSION",
           "dataType": "STRING"
          },
          {
           "name": "ga:users",
           "columnType": "METRIC",
           "dataType": "INTEGER"
          },
          {
           "name": "ga:bounces",
           "columnType": "METRIC",
           "dataType": "INTEGER"
          }
         ],

        rows:
        [
          [
           "linkplug",
           "216",
           "273"
          ],
          [
           "4webmasters.org/",
           "189",
           "194"
          ],
          [
           "reddit.com/",
           "152",
           "173"
          ],
        :return:
        """
        try:
            service_account = self.settings['service_account_email']
            self.service = GAcess(service_account_email=service_account,
                                  key_file_location=self.settings['key_file_location'])

            query_result = self.service.get_referrers(profile_id=self.settings['ga_profile_id'],
                                                      days=self.settings['start_days_ago'])
            try:
                data = query_result['rows']
            except KeyError:
                self.set_status(400, reason='Failed to fetch referrers data')
            else:
                # formatting decimal values to percentage
                for row in data:
                    row[2] = ("%.2f" % float(row[2])) + "%"

                table_title = 'Who is linking to us?'
                headers = ['Full referrer', 'Users', 'Bounces']
                return self.render_string('webhandler/data_table.html',
                                          data=data,
                                          table_title=table_title,
                                          headers=headers)
        except Exception as ex:
            self.set_status(403)
            return self.render_string('error.html',
                                      error=ex)