From a38597314ca279c6c40980a9186585a9a5e4899e Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Sun, 28 Dec 2014 18:07:57 +0100 Subject: [PATCH] Add generic interface istats_diff --- plugins/display/istats_diff.py | 98 ++++++++++++++++++++++++++++++++ plugins/display/referers.py | 2 +- plugins/display/referers_diff.py | 35 ++---------- 3 files changed, 105 insertions(+), 30 deletions(-) create mode 100644 plugins/display/istats_diff.py diff --git a/plugins/display/istats_diff.py b/plugins/display/istats_diff.py new file mode 100644 index 0000000..897d2c4 --- /dev/null +++ b/plugins/display/istats_diff.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# +# Copyright Grégory Soutadé 2015 + +# This file is part of iwla + +# iwla is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# iwla is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with iwla. If not, see . +# + +from iwla import IWLA +from iplugin import IPlugin +from display import * +import logging + +""" +Display hook itnerface + +Enlight new and updated statistics + +Plugin requirements : + None + +Conf values needed : + None + +Output files : + None + +Statistics creation : + None + +Statistics update : + None + +Statistics deletion : + None +""" + +class IWLADisplayStatsDiff(IPlugin): + def __init__(self, iwla): + super(IWLADisplayStatsDiff, self).__init__(iwla) + self.API_VERSION = 1 + self.month_stats_key = None + # Set >= if month_stats[self.month_stats_key] is a list or a tuple + self.stats_index = -1 + self.filename = None + self.block_name = None + self.logger = logging.getLogger(__name__) + + def load(self): + if not self.month_stats_key or not self.filename or\ + not self.block_name: + self.logger('Bad parametrization') + return False + month_stats = self.iwla.getMonthStats() + self.cur_stats = {k:v for (k,v) in month_stats.get(self.month_stats_key, {}).items()} + return True + + def hook(self): + display = self.iwla.getDisplay() + month_stats = self.iwla.getMonthStats() + + path = self.iwla.getCurDisplayPath(self.filename) + page = display.getPage(path) + if not page: return + title = self.iwla._(self.block_name) + block = page.getBlock(title) + if not block: + self.logger.error('Block %s not found' % (title)) + return + + stats_diff = {} + for (k, v) in month_stats[self.month_stats_key].items(): + new_value = self.cur_stats.get(k, 0) + if new_value: + if self.stats_index != -1: + if new_value[self.stats_index] != v[self.stats_index]: + stats_diff[k] = 'iwla_update' + else: + if new_value != v: + stats_diff[k] = 'iwla_update' + else: + stats_diff[k] = 'iwla_new' + + for (idx, row) in enumerate(block.rows): + if row[0] in stats_diff.keys(): + block.setCellCSSClass(idx, 0, stats_diff[row[0]]) diff --git a/plugins/display/referers.py b/plugins/display/referers.py index b7a14fb..1c4847a 100644 --- a/plugins/display/referers.py +++ b/plugins/display/referers.py @@ -197,7 +197,7 @@ class IWLADisplayReferers(IPlugin): total_search = [0]*2 page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'All key phrases'), [self.iwla._(u'Key phrase'), self.iwla._(u'Search')]) + table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Key phrases'), [self.iwla._(u'Key phrase'), self.iwla._(u'Search')]) table.setColsCSSClass(['', 'iwla_search']) new_list = self.max_key_phrases and top_key_phrases[:self.max_key_phrases] or top_key_phrases for phrase in new_list: diff --git a/plugins/display/referers_diff.py b/plugins/display/referers_diff.py index f90c94d..8e63ecb 100644 --- a/plugins/display/referers_diff.py +++ b/plugins/display/referers_diff.py @@ -19,7 +19,7 @@ # from iwla import IWLA -from iplugin import IPlugin +from istats_diff import IWLADisplayStatsDiff from display import * """ @@ -46,39 +46,16 @@ Statistics deletion : None """ -class IWLADisplayReferersDiff(IPlugin): +class IWLADisplayReferersDiff(IWLADisplayStatsDiff): def __init__(self, iwla): super(IWLADisplayReferersDiff, self).__init__(iwla) self.API_VERSION = 1 self.requires = ['IWLADisplayReferers'] + self.month_stats_key = 'key_phrases' + self.filename = 'key_phrases.html' + self.block_name = u'Key phrases' def load(self): if not self.iwla.getConfValue('create_all_key_phrases_page', True): return False - month_stats = self.iwla.getMonthStats() - self.cur_key_phrases = {k:v for (k,v) in month_stats.get('key_phrases', {}).items()} - return True - - def hook(self): - display = self.iwla.getDisplay() - month_stats = self.iwla.getMonthStats() - - filename = 'key_phrases.html' - path = self.iwla.getCurDisplayPath(filename) - page = display.getPage(path) - if not page: return - title = self.iwla._(u'Key phrases') - referers_block = page.getBlock(title) - - kp_diff = {} - for (k, v) in month_stats['key_phrases'].items(): - new_value = self.cur_key_phrases.get(k, 0) - if new_value: - if new_value != v: - kp_diff[k] = 'iwla_update' - else: - kp_diff[k] = 'iwla_new' - - for (idx, row) in enumerate(referers_block.rows): - if row[0] in kp_diff.keys(): - referers_block.setCellCSSClass(idx, 0, kp_diff[row[0]]) + return super(IWLADisplayReferersDiff, self).load()