OLD | NEW |
1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
2 # Copyright (C) 2006-2016 Eyeo GmbH | 2 # Copyright (C) 2006-2016 Eyeo GmbH |
3 # | 3 # |
4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
7 # | 7 # |
8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 # GNU General Public License for more details. | 11 # GNU General Public License for more details. |
12 # | 12 # |
13 # You should have received a copy of the GNU General Public License | 13 # You should have received a copy of the GNU General Public License |
14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
15 | 15 |
16 import re | 16 import re |
17 import hashlib | 17 import hashlib |
18 | 18 |
19 | 19 |
20 def filename_encode(name): | 20 def filename_encode(name): |
21 """ | 21 """ |
22 This encodes any string to a valid file name while ensuring that the | 22 This encodes any string to a valid file name while ensuring that the |
23 original string can still be reconstructed. All characters except 0-9, A-Z
, | 23 original string can still be reconstructed. All characters except 0-9, A-Z
, |
24 the period and underscore are encoded as "-12cd" where "12cd" stands for t
he | 24 the period and underscore are encoded as "-12cd" where "12cd" stands for t
he |
25 hexadecimal representation of the character's ordinal. File names longer | 25 hexadecimal representation of the character's ordinal. File names longer |
26 than 150 characters will be still be unique but no longer reversible due t
o | 26 than 150 characters will be still be unique but no longer reversible due t
o |
27 file system limitations. | 27 file system limitations. |
28 """ | 28 """ |
29 result = re.sub(r"[^\w\.]", lambda match: "-%04x" % ord(match.group(0)), nam
e) | 29 result = re.sub(r'[^\w\.]', lambda match: '-%04x' % ord(match.group(0)), nam
e) |
30 if len(result) > 150: | 30 if len(result) > 150: |
31 result = result[:150] + "--%s" % hashlib.md5(result[150:]).hexdigest() | 31 result = result[:150] + '--%s' % hashlib.md5(result[150:]).hexdigest() |
32 return result | 32 return result |
33 | 33 |
34 | 34 |
35 def filename_decode(path): | 35 def filename_decode(path): |
36 """ | 36 """ |
37 This reconstructs a string encoded with filename_encode(). | 37 This reconstructs a string encoded with filename_encode(). |
38 """ | 38 """ |
39 path = re.sub(r"--[0-9A-Fa-f]{32}", u"\u2026", path) | 39 path = re.sub(r'--[0-9A-Fa-f]{32}', u'\u2026', path) |
40 path = re.sub(r"-([0-9a-f]{4})", lambda match: unichr(int(match.group(1), 16
)), path) | 40 path = re.sub(r'-([0-9a-f]{4})', lambda match: unichr(int(match.group(1), 16
)), path) |
41 return path | 41 return path |
42 | 42 |
43 basic_fields = [ | 43 basic_fields = [ |
44 { | 44 { |
45 "name": "day", | 45 'name': 'day', |
46 "title": "Days of month", | 46 'title': 'Days of month', |
47 "coltitle": "Day", | 47 'coltitle': 'Day', |
48 "showaverage": True, | 48 'showaverage': True, |
49 "defaultcount": 31, | 49 'defaultcount': 31, |
50 "sort": lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), | 50 'sort': lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), |
51 }, | 51 }, |
52 { | 52 { |
53 "name": "weekday", | 53 'name': 'weekday', |
54 "title": "Days of week", | 54 'title': 'Days of week', |
55 "coltitle": "Weekday", | 55 'coltitle': 'Weekday', |
56 "showaverage": True, | 56 'showaverage': True, |
57 "sort": lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), | 57 'sort': lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), |
58 "isspecial": lambda weekday: weekday == 5 or weekday == 6, | 58 'isspecial': lambda weekday: weekday == 5 or weekday == 6, |
59 }, | 59 }, |
60 { | 60 { |
61 "name": "hour", | 61 'name': 'hour', |
62 "title": "Hours of day", | 62 'title': 'Hours of day', |
63 "coltitle": "Hour", | 63 'coltitle': 'Hour', |
64 "showaverage": True, | 64 'showaverage': True, |
65 "sort": lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), | 65 'sort': lambda obj: sorted(obj.items(), key=lambda (k, v): int(k)), |
66 }, | 66 }, |
67 { | 67 { |
68 "name": "country", | 68 'name': 'country', |
69 "title": "Countries", | 69 'title': 'Countries', |
70 "coltitle": "Country", | 70 'coltitle': 'Country', |
71 }, | 71 }, |
72 { | 72 { |
73 "name": "ua", | 73 'name': 'ua', |
74 "title": "Browsers", | 74 'title': 'Browsers', |
75 "coltitle": "Browser", | 75 'coltitle': 'Browser', |
76 }, | 76 }, |
77 { | 77 { |
78 "name": "fullua", | 78 'name': 'fullua', |
79 "title": "Browser versions", | 79 'title': 'Browser versions', |
80 "coltitle": "Browser version", | 80 'coltitle': 'Browser version', |
81 }, | 81 }, |
82 { | 82 { |
83 "name": "referrer", | 83 'name': 'referrer', |
84 "title": "Referrers", | 84 'title': 'Referrers', |
85 "coltitle": "Referrer", | 85 'coltitle': 'Referrer', |
86 }, | 86 }, |
87 { | 87 { |
88 "name": "status", | 88 'name': 'status', |
89 "title": "Status codes", | 89 'title': 'Status codes', |
90 "coltitle": "Status code", | 90 'coltitle': 'Status code', |
91 }, | 91 }, |
92 { | 92 { |
93 "name": "mirror", | 93 'name': 'mirror', |
94 "title": "Download mirrors", | 94 'title': 'Download mirrors', |
95 "coltitle": "Download mirror", | 95 'coltitle': 'Download mirror', |
96 }, | 96 }, |
97 ] | 97 ] |
98 | 98 |
99 downloader_fields = [ | 99 downloader_fields = [ |
100 { | 100 { |
101 "name": "addonName", | 101 'name': 'addonName', |
102 "title": "Extensions", | 102 'title': 'Extensions', |
103 "coltitle": "Extension", | 103 'coltitle': 'Extension', |
104 }, | 104 }, |
105 { | 105 { |
106 "name": "fullAddon", | 106 'name': 'fullAddon', |
107 "title": "Extension versions", | 107 'title': 'Extension versions', |
108 "coltitle": "Extension version", | 108 'coltitle': 'Extension version', |
109 }, | 109 }, |
110 { | 110 { |
111 "name": "application", | 111 'name': 'application', |
112 "title": "Host applications", | 112 'title': 'Host applications', |
113 "coltitle": "Host application", | 113 'coltitle': 'Host application', |
114 }, | 114 }, |
115 { | 115 { |
116 "name": "fullApplication", | 116 'name': 'fullApplication', |
117 "title": "Host application versions", | 117 'title': 'Host application versions', |
118 "coltitle": "Host application version", | 118 'coltitle': 'Host application version', |
119 }, | 119 }, |
120 { | 120 { |
121 "name": "platform", | 121 'name': 'platform', |
122 "title": "Platforms", | 122 'title': 'Platforms', |
123 "coltitle": "Platform", | 123 'coltitle': 'Platform', |
124 }, | 124 }, |
125 { | 125 { |
126 "name": "fullPlatform", | 126 'name': 'fullPlatform', |
127 "title": "Platform versions", | 127 'title': 'Platform versions', |
128 "coltitle": "Platform version", | 128 'coltitle': 'Platform version', |
129 }, | 129 }, |
130 { | 130 { |
131 "name": "downloadInterval", | 131 'name': 'downloadInterval', |
132 "title": "Download intervals", | 132 'title': 'Download intervals', |
133 "coltitle": "Download interval", | 133 'coltitle': 'Download interval', |
134 }, | 134 }, |
135 { | 135 { |
136 "name": "previousDownload", | 136 'name': 'previousDownload', |
137 "hidden": True, | 137 'hidden': True, |
138 }, | 138 }, |
139 { | 139 { |
140 "name": "firstDownload", | 140 'name': 'firstDownload', |
141 "title": "Initial download", | 141 'title': 'Initial download', |
142 "filter": True, | 142 'filter': True, |
143 }, | 143 }, |
144 { | 144 { |
145 "name": "firstInDay", | 145 'name': 'firstInDay', |
146 "title": "First download this day", | 146 'title': 'First download this day', |
147 "filter": True, | 147 'filter': True, |
148 }, | 148 }, |
149 { | 149 { |
150 "name": "firstInWeek", | 150 'name': 'firstInWeek', |
151 "title": "First download this week", | 151 'title': 'First download this week', |
152 "filter": True, | 152 'filter': True, |
153 }, | 153 }, |
154 { | 154 { |
155 "name": "firstInMonth", | 155 'name': 'firstInMonth', |
156 "title": "First download this month", | 156 'title': 'First download this month', |
157 "filter": True, | 157 'filter': True, |
158 }, | 158 }, |
159 ] | 159 ] |
160 | 160 |
161 install_fields = [ | 161 install_fields = [ |
162 { | 162 { |
163 "name": "installType", | 163 'name': 'installType', |
164 "title": "Install types", | 164 'title': 'Install types', |
165 "coltitle": "Install type", | 165 'coltitle': 'Install type', |
166 }, | 166 }, |
167 ] | 167 ] |
168 | 168 |
169 | 169 |
170 fields = basic_fields + downloader_fields + install_fields | 170 fields = basic_fields + downloader_fields + install_fields |
OLD | NEW |