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

Side by Side Diff: cms/bin/translate.py

Issue 29756692: Noissue - Adapt best practices for trailing commas (cms) (Closed)
Patch Set: Manual cleanup Created April 19, 2018, 1:48 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cms/converters.py » ('j') | cms/sources.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-present eyeo GmbH 2 # Copyright (C) 2006-present 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
(...skipping 27 matching lines...) Expand all
38 38
39 def __init__(self, api_key, project_name): 39 def __init__(self, api_key, project_name):
40 self.api_key = api_key 40 self.api_key = api_key
41 self.project_name = project_name 41 self.project_name = project_name
42 self.connection = urllib3.connection_from_url('https://api.crowdin.com/' ) 42 self.connection = urllib3.connection_from_url('https://api.crowdin.com/' )
43 43
44 def raw_request(self, request_method, api_endpoint, query_params=(), **kwarg s): 44 def raw_request(self, request_method, api_endpoint, query_params=(), **kwarg s):
45 url = '/api/project/%s/%s?%s' % ( 45 url = '/api/project/%s/%s?%s' % (
46 urllib.quote(self.project_name), 46 urllib.quote(self.project_name),
47 urllib.quote(api_endpoint), 47 urllib.quote(api_endpoint),
48 urllib.urlencode((('key', self.api_key),) + query_params) 48 urllib.urlencode((('key', self.api_key),) + query_params),
49 ) 49 )
50 try: 50 try:
51 response = self.connection.request( 51 response = self.connection.request(
52 request_method, str(url), **kwargs 52 request_method, str(url), **kwargs
Sebastian Noack 2018/04/19 13:51:19 Apparently flake8-commas insist on comma after var
Sebastian Noack 2018/04/19 14:23:34 It turned out we can just ignore C815 to avoid tha
53 ) 53 )
54 except urllib3.exceptions.HTTPError: 54 except urllib3.exceptions.HTTPError:
55 logger.error('Connection to API endpoint %s failed', url) 55 logger.error('Connection to API endpoint %s failed', url)
56 raise 56 raise
57 if response.status < 200 or response.status >= 300: 57 if response.status < 200 or response.status >= 300:
58 logger.error('API call to %s failed:\n%s', url, response.data) 58 logger.error('API call to %s failed:\n%s', url, response.data)
59 raise urllib3.exceptions.HTTPError(response.status) 59 raise urllib3.exceptions.HTTPError(response.status)
60 return response 60 return response
61 61
62 def request(self, request_method, api_endpoint, data=None, files=None): 62 def request(self, request_method, api_endpoint, data=None, files=None):
63 fields = [] 63 fields = []
64 if data: 64 if data:
65 for name, value in data.iteritems(): 65 for name, value in data.iteritems():
66 if isinstance(value, basestring): 66 if isinstance(value, basestring):
67 fields.append((name, value)) 67 fields.append((name, value))
68 else: 68 else:
69 fields.extend((name + '[]', v) for v in value) 69 fields.extend((name + '[]', v) for v in value)
70 if files: 70 if files:
71 fields.extend(('files[%s]' % f[0], f) for f in files) 71 fields.extend(('files[%s]' % f[0], f) for f in files)
72 72
73 response = self.raw_request( 73 response = self.raw_request(
74 request_method, api_endpoint, (('json', '1'),), 74 request_method, api_endpoint, (('json', '1'),),
75 fields=fields, preload_content=False 75 fields=fields, preload_content=False,
76 ) 76 )
77 77
78 try: 78 try:
79 return json.load(response) 79 return json.load(response)
80 except ValueError: 80 except ValueError:
81 logger.error('Invalid response returned by API endpoint %s', url) 81 logger.error('Invalid response returned by API endpoint %s', url)
82 raise 82 raise
83 83
84 84
85 def grouper(iterable, n): 85 def grouper(iterable, n):
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 required_locales[locale] = crowdin_locale 141 required_locales[locale] = crowdin_locale
142 else: 142 else:
143 logger.warning("Ignoring locale '%s', which Crowdin doesn't support" , 143 logger.warning("Ignoring locale '%s', which Crowdin doesn't support" ,
144 locale) 144 locale)
145 145
146 required_crowdin_locales = set(required_locales.values()) 146 required_crowdin_locales = set(required_locales.values())
147 if not required_crowdin_locales.issubset(enabled_locales): 147 if not required_crowdin_locales.issubset(enabled_locales):
148 logger.info('Enabling the required locales for the Crowdin project...') 148 logger.info('Enabling the required locales for the Crowdin project...')
149 crowdin_api.request( 149 crowdin_api.request(
150 'POST', 'edit-project', 150 'POST', 'edit-project',
151 data={'languages': enabled_locales | required_crowdin_locales} 151 data={'languages': enabled_locales | required_crowdin_locales},
152 ) 152 )
153 153
154 return required_locales 154 return required_locales
155 155
156 156
157 def list_remote_files(project_info): 157 def list_remote_files(project_info):
158 def parse_file_node(node, path=''): 158 def parse_file_node(node, path=''):
159 if node['node_type'] == 'file': 159 if node['node_type'] == 'file':
160 remote_files.add(path + node['name']) 160 remote_files.add(path + node['name'])
161 elif node['node_type'] == 'directory': 161 elif node['node_type'] == 'directory':
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 os.remove(os.path.join(root, f)) 264 os.remove(os.path.join(root, f))
265 # Then extract the new ones in place 265 # Then extract the new ones in place
266 for member in archive.namelist(): 266 for member in archive.namelist():
267 path, file_name = posixpath.split(member) 267 path, file_name = posixpath.split(member)
268 ext = posixpath.splitext(file_name)[1] 268 ext = posixpath.splitext(file_name)[1]
269 path_parts = path.split(posixpath.sep) 269 path_parts = path.split(posixpath.sep)
270 locale, file_path = path_parts[0], path_parts[1:] 270 locale, file_path = path_parts[0], path_parts[1:]
271 if ext.lower() == '.json' and locale in inverted_required_locales: 271 if ext.lower() == '.json' and locale in inverted_required_locales:
272 output_path = os.path.join( 272 output_path = os.path.join(
273 locale_path, inverted_required_locales[locale], 273 locale_path, inverted_required_locales[locale],
274 *file_path + [file_name] 274 *file_path + [file_name],
275 ) 275 )
276 with archive.open(member) as source_file: 276 with archive.open(member) as source_file:
277 locale_file_contents = json.load(source_file) 277 locale_file_contents = json.load(source_file)
278 if len(locale_file_contents): 278 if len(locale_file_contents):
279 with codecs.open(output_path, 'wb', 'utf-8') as target_f ile: 279 with codecs.open(output_path, 'wb', 'utf-8') as target_f ile:
280 json.dump(locale_file_contents, target_file, ensure_ ascii=False, 280 json.dump(locale_file_contents, target_file, ensure_ ascii=False,
281 sort_keys=True, indent=2, separators=(',', ': ')) 281 sort_keys=True, indent=2, separators=(',', ': '))
282 282
283 283
284 def crowdin_sync(source_dir, crowdin_api_key): 284 def crowdin_sync(source_dir, crowdin_api_key):
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 if __name__ == '__main__': 329 if __name__ == '__main__':
330 if len(sys.argv) < 3: 330 if len(sys.argv) < 3:
331 print >>sys.stderr, 'Usage: python -m cms.bin.translate www_directory cr owdin_project_api_key [logging_level]' 331 print >>sys.stderr, 'Usage: python -m cms.bin.translate www_directory cr owdin_project_api_key [logging_level]'
332 sys.exit(1) 332 sys.exit(1)
333 333
334 logging.basicConfig() 334 logging.basicConfig()
335 logger.setLevel(sys.argv[3] if len(sys.argv) > 3 else logging.INFO) 335 logger.setLevel(sys.argv[3] if len(sys.argv) > 3 else logging.INFO)
336 336
337 source_dir, crowdin_api_key = sys.argv[1:3] 337 source_dir, crowdin_api_key = sys.argv[1:3]
338 crowdin_sync(source_dir, crowdin_api_key) 338 crowdin_sync(source_dir, crowdin_api_key)
OLDNEW
« no previous file with comments | « no previous file | cms/converters.py » ('j') | cms/sources.py » ('J')

Powered by Google App Engine
This is Rietveld