def get(self, campaign_id, platform_name): """ Handles incoming clicks for given campaign_id and platform_name. If click is valid then user is redirected to url defined in the campaign and statistic about this click is saved. All invalid clicks (e.g. for non existing campaigns, platforms) users are redirected to http://outfit7.com. """ # cast campaign_id, type checking is done through route definition try: campaign_id = int(campaign_id) except ValueError: return webapp2.redirect("http://outfit7.com", permanent=True) platform_id = "%d-%s" % (campaign_id, platform_name) platform = Platform.get_by_id(platform_id) if platform: memcache.incr(platform_id, 1, namespace="counters", initial_value=0) try: deferred.defer(Platform.increment, platform_id, _countdown=TRACKER_COUNTER_UPDATE_INTERVAL_LENGTH, _name="%s-%d" % (platform_id, get_interval_index())) except (taskqueue.TaskAlreadyExistsError, taskqueue.TombstonedTaskError), e: pass # TODO: optimize with async operations campaign = Campaign.get_by_id(campaign_id) return webapp2.redirect(campaign.link.encode("utf8"))
def get(self, campaign_id, platform_name): """Retrieves the number of clicks for given campaign on the given platform.""" campaign_id = int(campaign_id) platform = Platform.get_by_id("%d-%s" % (campaign_id, platform_name)) return platform_to_dict(platform)