Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: sitescripts/extensions/pad/__init__.py

Issue 5723465818570752: Issue 520 - Generate PAD files for download portals when updating download links (Closed)
Left Patch Set: Addressed comments Created May 26, 2014, 12:04 p.m.
Right Patch Set: Addressed comments Created June 4, 2014, 4:35 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « sitescripts/extensions/bin/updateDownloadLinks.py ('k') | sitescripts/extensions/pad/language.py » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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-2014 Eyeo GmbH 2 # Copyright (C) 2006-2014 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 subprocess 16 import subprocess
17 import os 17 import os
18 import re 18 import re
19 import time 19 import time
20 from datetime import datetime 20 from datetime import datetime
21 from urlparse import urljoin 21 from urlparse import urljoin
22 22
23 from sitescripts.utils import get_template 23 from sitescripts.utils import get_template
24 from sitescripts.extensions.android import get_min_android_version 24 from sitescripts.extensions.android import get_min_android_version
25 from sitescripts.extensions.pad.language import iso2pad 25 from sitescripts.extensions.pad.language import iso2pad
26 from sitescripts.extensions.pad.validation import validate_pad 26 from sitescripts.extensions.pad.validation import validate_pad
27 27
28 OS_WINDOWS = ['Win7 x32', 'Win7 x64', 'WinVista', 'WinVista x64', 'WinXP'] 28 OS_WINDOWS = ['Windows 8', 'Win7 x32', 'Win7 x64', 'WinVista', 'WinVista x64', ' WinXP']
29 OS_LINUX = ['Linux'] 29 OS_LINUX = ['Linux']
30 OS_MAC = ['Mac OS X'] 30 OS_MAC = ['Mac OS X']
31 OS_ANDROID = ['Android'] 31 OS_ANDROID = ['Android']
32 32
33 class PadFile: 33 class PadFile:
34 def __init__(self, repo, version, download_url): 34 def __init__(self, repo, version, download_url):
35 self.repo = repo 35 self.repo = repo
36 self.version = version 36 self.version = version
37 self.download_url = re.sub(r'(?<=^http)s(?=:)', '', download_url) 37 self.download_url = download_url
38 38
39 self.first_release = True
39 for i, (filename, version) in enumerate(repo.getDownloads()): 40 for i, (filename, version) in enumerate(repo.getDownloads()):
40 self.first_release = (i == 0) 41 if i > 0:
42 self.first_release = False
41 43
42 if version == self.version: 44 if version == self.version:
43 self.download_filename = filename 45 self.download_filename = filename
44 46
45 @property 47 @property
46 def release_status(self): 48 def release_status(self):
47 if self.first_release: 49 if self.first_release:
48 return 'New Release' 50 return 'New Release'
49 51
50 if self.version.rstrip('.0').count('.') < 2: 52 if self.version.rstrip('.0').count('.') < 2:
51 return 'Major Update' 53 return 'Major Update'
52 54
53 return 'Minor Update' 55 return 'Minor Update'
54 56
55 @property 57 @property
56 def release_date(self): 58 def release_date(self):
57 command = ['hg', 'log', '-l', '1', self.download_filename, '--template', '{d ate}'] 59 command = ['hg', 'log', '-l', '1', self.download_filename, '--template', '{d ate}']
58 result = subprocess.check_output(command, cwd=self.repo.downloadsRepo) 60 result = subprocess.check_output(command, cwd=self.repo.downloadsRepo)
59 timestamp, offset = re.match(r'(.*)([-+].*)', result).groups() 61 timestamp, offset = re.match(r'(.*)([-+].*)', result).groups()
60 return datetime(*time.gmtime(float(timestamp) + float(offset))[:6]) 62 return datetime(*time.gmtime(float(timestamp) + float(offset))[:6])
61 63
62 @property 64 @property
63 def download_size(self): 65 def download_size(self):
64 return len(subprocess.check_output( 66 return len(subprocess.check_output(
65 ['hg', 'cat', self.download_filename], 67 ['hg', 'cat', '-r', 'tip', self.download_filename],
66 cwd=self.repo.downloadsRepo 68 cwd=self.repo.downloadsRepo
67 )) 69 ))
68 70
69 @property 71 @property
70 def browser_min_version(self): 72 def browser_min_version(self):
71 metadata = self.repo.readMetadata(self.version) 73 metadata = self.repo.readMetadata(self.version)
72 compat_option = getattr(self, 'compat_option', self.repo.type) 74 compat_option = getattr(self, 'compat_option', self.repo.type)
73 return metadata.get('compat', compat_option)).split('/')[0].rstrip('.0') 75 return metadata.get('compat', compat_option).split('/')[0].rstrip('.0')
74 76
75 @property 77 @property
76 def languages(self): 78 def languages(self):
77 files = self.repo.listContents(self.version) 79 files = self.repo.listContents(self.version)
78 languages = set() 80 languages = set()
79 skipped = set() 81 skipped = set()
80 82
81 for filename in files: 83 for filename in files:
82 match = re.match(self.translation_files_regex, filename) 84 match = re.match(self.translation_files_regex, filename)
83 85
(...skipping 13 matching lines...) Expand all
97 if groups.get('skip') is not None: 99 if groups.get('skip') is not None:
98 skipped.add(code) 100 skipped.add(code)
99 continue 101 continue
100 102
101 languages.add(code) 103 languages.add(code)
102 104
103 return iso2pad(languages.difference(skipped)) 105 return iso2pad(languages.difference(skipped))
104 106
105 def write(self): 107 def write(self):
106 template = get_template(self.repo.padTemplate) 108 template = get_template(self.repo.padTemplate)
107 filename = self.repo.basename + '.xml' 109 basename = self.repo.basename
110 filename = basename + '.xml'
108 111
109 pad = template.render({ 112 pad = template.render({
113 'name': self.repo.name,
110 'type': self.repo.type, 114 'type': self.repo.type,
115 'basename': basename,
111 'browser_name': self.browser_name, 116 'browser_name': self.browser_name,
112 'browser_min_version': self.browser_min_version, 117 'browser_min_version': self.browser_min_version,
113 'version': self.version, 118 'version': self.version,
114 'release_date': self.release_date, 119 'release_date': self.release_date,
115 'release_status': self.release_status, 120 'release_status': self.release_status,
116 'os_support': ','.join(self.os_support), 121 'os_support': ','.join(self.os_support),
117 'language': ','.join(self.languages), 122 'language': ','.join(self.languages),
118 'download_size': self.download_size, 123 'download_size': self.download_size,
119 'download_url': self.download_url, 124 'download_url': self.download_url,
120 'pad_url': urljoin(self.repo.padURL, filename), 125 'pad_url': urljoin(self.repo.padURL, filename),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 os_support = OS_WINDOWS + OS_MAC + OS_LINUX 159 os_support = OS_WINDOWS + OS_MAC + OS_LINUX
155 translation_files_regex = r'_locales\/(?P<code>.+?)\/' 160 translation_files_regex = r'_locales\/(?P<code>.+?)\/'
156 161
157 class OperaPadFile(PadFile): 162 class OperaPadFile(PadFile):
158 browser_name = 'Opera' 163 browser_name = 'Opera'
159 browser_min_version = '17' 164 browser_min_version = '17'
160 os_support = OS_WINDOWS + OS_MAC + OS_LINUX 165 os_support = OS_WINDOWS + OS_MAC + OS_LINUX
161 translation_files_regex = ChromePadFile.translation_files_regex 166 translation_files_regex = ChromePadFile.translation_files_regex
162 167
163 class SafariPadFile(PadFile): 168 class SafariPadFile(PadFile):
164 borwser_name = 'Safari' 169 browser_name = 'Safari'
165 browser_min_version = '6' 170 browser_min_version = '6'
166 os_support = OS_MAC 171 os_support = OS_MAC
167 translation_files_regex = ChromePadFile.translation_files_regex 172 translation_files_regex = ChromePadFile.translation_files_regex
168 173
169 class InternetExplorerPadFile(PadFile): 174 class InternetExplorerPadFile(PadFile):
170 browser_name = 'Internet Explorer' 175 browser_name = 'Internet Explorer'
171 browser_min_version = '8' 176 browser_min_version = '8'
172 os_support = OS_WINDOWS 177 os_support = OS_WINDOWS
173 translation_files_regex = r'locales\/(?P<code>.+)\.ini$' 178 translation_files_regex = r'locales\/(?P<code>.+)\.ini$'
174 179
175 class AndroidPadFile(PadFile): 180 class AndroidPadFile(PadFile):
176 browser_name = 'Android' 181 browser_name = 'Android'
177 os_support = OS_ANDROID 182 os_support = OS_ANDROID
178 translation_files_regex = r'res\/(?:raw|values)(?:-(?P<code>.+?)|(?P<is_en>))\ /' 183 translation_files_regex = r'res\/(?:raw|values)(?:-(?P<code>.+?)|(?P<is_en>))\ /'
179 184
180 @property 185 @property
181 def browser_min_version(self): 186 def browser_min_version(self):
182 return get_min_android_version(self.repo, self.version) 187 return get_min_android_version(self.repo, self.version)
LEFTRIGHT

Powered by Google App Engine
This is Rietveld