def handle(self, *args, **options): dry_run = options['dry_run'] creds_path = get_creds_path() key_file_location = os.path.join(creds_path, 'open-canada-analytics.p12') if not os.path.isfile(key_file_location): raise ImproperlyConfigured( '{} must be a file which contains your api key.'.format( key_file_location)) scopes = ['https://www.googleapis.com/auth/analytics.readonly'] service_account_email = get_service_account_email() service = utils.get_service('analytics', 'v3', scopes, key_file_location, service_account_email) profile = utils.get_first_profile_id(service) days = options['days'] start_time = now() - datetime.timedelta(days) start_date = start_time.strftime('%Y-%m-%d') data = service.data().ga().get( ids='ga:' + profile, start_date=start_date, end_date='today', dimensions='ga:pagePath', metrics='ga:sessions', sort='-ga:sessions', filters='ga:sessions>=1', ).execute() if dry_run: for row in data['rows']: url, session = row print('{}: {}'.format(url, session)) sys.exit(0) with transaction.atomic(): pages = dict([(page.url, page) for page in Page.objects.live()]) utils.reset_analytics(pages) for row in data['rows']: url, sessions = row if url not in pages: continue page = pages[url] analytics = utils.get_analytics(page) analytics.last_period_views = sessions analytics.save() purge_url_from_cache(settings.BASE_URL + 'most-popular/') for page in HomePage.objects.live(): purge_page_from_cache(page)
def invalidate_frontend_cache_for_blog_index_page(sender, instance, **kwargs): """Invalidate the frontend cache for the parent BlogIndexPage of a BlogPost.""" blog_post = instance # Recommended way to get parent page from # https://github.com/wagtail/wagtail/issues/2779#issuecomment-228472829 blog_index_page = blog_post.get_parent() if blog_index_page: purge_page_from_cache(blog_index_page)
def handle(self, *args, **options): dry_run = options['dry_run'] creds_path = get_creds_path() key_file_location = os.path.join(creds_path, 'open-canada-analytics.p12') if not os.path.isfile(key_file_location): raise ImproperlyConfigured( '{} must be a file which contains your api key.'.format(key_file_location) ) scopes = ['https://www.googleapis.com/auth/analytics.readonly'] service_account_email = get_service_account_email() service = utils.get_service( 'analytics', 'v3', scopes, key_file_location, service_account_email ) profile = utils.get_first_profile_id(service) days = options['days'] start_time = now() - datetime.timedelta(days) start_date = start_time.strftime('%Y-%m-%d') data = service.data().ga().get( ids='ga:' + profile, start_date=start_date, end_date='today', dimensions='ga:pagePath', metrics='ga:sessions', sort='-ga:sessions', filters='ga:sessions>=1', ).execute() if dry_run: for row in data['rows']: url, session = row print('{}: {}'.format(url, session)) sys.exit(0) with transaction.atomic(): pages = dict([(page.url, page) for page in Page.objects.live()]) utils.reset_analytics(pages) for row in data['rows']: url, sessions = row if url not in pages: continue page = pages[url] analytics = utils.get_analytics(page) analytics.last_period_views = sessions analytics.save() purge_url_from_cache(settings.BASE_URL + 'most-popular/') for page in HomePage.objects.live(): purge_page_from_cache(page)
def page_published_signal_handler(instance, **kwargs): purge_page_from_cache(instance)