| Index: sitescripts/stats/common.py | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/sitescripts/stats/common.py | 
| @@ -0,0 +1,147 @@ | 
| +# coding: utf-8 | 
| + | 
| +# This file is part of the Adblock Plus web scripts, | 
| +# Copyright (C) 2006-2013 Eyeo GmbH | 
| +# | 
| +# Adblock Plus is free software: you can redistribute it and/or modify | 
| +# it under the terms of the GNU General Public License version 3 as | 
| +# published by the Free Software Foundation. | 
| +# | 
| +# Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| + | 
| +import re | 
| + | 
| +def filename_encode(name): | 
| + """ | 
| + This encodes any string to a valid file name while ensuring that the | 
| + original string can still be reconstructed. All characters except 0-9, A-Z, | 
| + the period and underscore are encoded as "-12cd" where "12cd" stands for the | 
| + hexadecimal representation of the character's ordinal. | 
| + """ | 
| + return re.sub(r"[^\w\.]", lambda match: "-%04x" % ord(match.group(0)), name) | 
| + | 
| +def filename_decode(path): | 
| + """ | 
| + This reconstructs a string encoded with filename_encode(). | 
| + """ | 
| + return re.sub(r"-([0-9a-f]{4})", lambda match: unichr(int(match.group(1), 16)), path) | 
| + | 
| +basic_fields = [ | 
| + { | 
| + "name": "day", | 
| + "title": "Days of month", | 
| + "coltitle": "Day", | 
| + "showaverage": True, | 
| + "sort": lambda obj: sorted(obj.items(), key=lambda (k,v): int(k)), | 
| + }, | 
| + { | 
| + "name": "weekday", | 
| + "title": "Days of week", | 
| + "coltitle": "Weekday", | 
| + "showaverage": True, | 
| + "sort": lambda obj: sorted(obj.items(), key=lambda (k,v): int(k)), | 
| + "isspecial": lambda weekday: weekday == 5 or weekday == 6, | 
| + }, | 
| + { | 
| + "name": "hour", | 
| + "title": "Hours of day", | 
| + "coltitle": "Hour", | 
| + "showaverage": True, | 
| + "sort": lambda obj: sorted(obj.items(), key=lambda (k,v): int(k)), | 
| + }, | 
| + { | 
| + "name": "country", | 
| + "title": "Countries", | 
| + "coltitle": "Country", | 
| + }, | 
| + { | 
| + "name": "ua", | 
| + "title": "Browsers", | 
| + "coltitle": "Browser", | 
| + }, | 
| + { | 
| + "name": "fullua", | 
| + "title": "Browser versions", | 
| + "coltitle": "Browser version", | 
| + }, | 
| + { | 
| + "name": "mirror", | 
| + "title": "Download mirrors", | 
| + "coltitle": "Download mirror", | 
| + }, | 
| +] | 
| + | 
| +downloader_fields = [ | 
| + { | 
| + "name": "addonName", | 
| + "title": "Extensions", | 
| + "coltitle": "Extension", | 
| + }, | 
| + { | 
| + "name": "fullAddon", | 
| + "title": "Extension versions", | 
| + "coltitle": "Extension version", | 
| + }, | 
| + { | 
| + "name": "application", | 
| + "title": "Host applications", | 
| + "coltitle": "Host application", | 
| + }, | 
| + { | 
| + "name": "fullApplication", | 
| + "title": "Host application versions", | 
| + "coltitle": "Host application version", | 
| + }, | 
| + { | 
| + "name": "platform", | 
| + "title": "Platforms", | 
| + "coltitle": "Platform", | 
| + }, | 
| + { | 
| + "name": "fullPlatform", | 
| + "title": "Platform versions", | 
| + "coltitle": "Platform version", | 
| + }, | 
| + { | 
| + "name": "downloadInterval", | 
| + "title": "Download intervals", | 
| + "coltitle": "Download interval", | 
| + }, | 
| + { | 
| + "name": "firstDownload", | 
| + "title": "Initial download", | 
| + "filter": True, | 
| + }, | 
| + { | 
| + "name": "firstInDay", | 
| + "title": "First download this day", | 
| + "filter": True, | 
| + }, | 
| + { | 
| + "name": "firstInWeek", | 
| + "title": "First download this week", | 
| + "filter": True, | 
| + }, | 
| + { | 
| + "name": "firstInMonth", | 
| + "title": "First download this month", | 
| + "filter": True, | 
| + }, | 
| +] | 
| + | 
| +install_fields = [ | 
| + { | 
| + "name": "installType", | 
| + "title": "Install types", | 
| + "coltitle": "Install type", | 
| + }, | 
| +] | 
| + | 
| + | 
| +fields = basic_fields + downloader_fields + install_fields |