Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: client/isolated_format.py

Issue 2993643002: Include more information when json parsing fails (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The LUCI Authors. All rights reserved. 1 # Copyright 2014 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0 2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file. 3 # that can be found in the LICENSE file.
4 4
5 """Understands .isolated files and can do local operations on them.""" 5 """Understands .isolated files and can do local operations on them."""
6 6
7 import hashlib 7 import hashlib
8 import json 8 import json
9 import logging 9 import logging
10 import os 10 import os
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 """Verifies the .isolated file is valid and loads this object with the json 429 """Verifies the .isolated file is valid and loads this object with the json
430 data. 430 data.
431 431
432 Arguments: 432 Arguments:
433 - content: raw serialized content to load. 433 - content: raw serialized content to load.
434 - algo: hashlib algorithm class. Used to confirm the algorithm matches the 434 - algo: hashlib algorithm class. Used to confirm the algorithm matches the
435 algorithm used on the Isolate Server. 435 algorithm used on the Isolate Server.
436 """ 436 """
437 try: 437 try:
438 data = json.loads(content) 438 data = json.loads(content)
439 except ValueError: 439 except ValueError as v:
440 raise IsolatedError('Failed to parse: %s...' % content[:100]) 440 raise IsolatedError('Failed to parse (%s): %s...' % (v, content[:100]))
441 441
442 if not isinstance(data, dict): 442 if not isinstance(data, dict):
443 raise IsolatedError('Expected dict, got %r' % data) 443 raise IsolatedError('Expected dict, got %r' % data)
444 444
445 # Check 'version' first, since it could modify the parsing after. 445 # Check 'version' first, since it could modify the parsing after.
446 value = data.get('version', '1.0') 446 value = data.get('version', '1.0')
447 if not isinstance(value, basestring): 447 if not isinstance(value, basestring):
448 raise IsolatedError('Expected string, got %r' % value) 448 raise IsolatedError('Expected string, got %r' % value)
449 try: 449 try:
450 version = tuple(map(int, value.split('.'))) 450 version = tuple(map(int, value.split('.')))
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 data['files'] = dict( 574 data['files'] = dict(
575 (k.replace(wrong_path_sep, os.path.sep), v) 575 (k.replace(wrong_path_sep, os.path.sep), v)
576 for k, v in data['files'].iteritems()) 576 for k, v in data['files'].iteritems())
577 for v in data['files'].itervalues(): 577 for v in data['files'].itervalues():
578 if 'l' in v: 578 if 'l' in v:
579 v['l'] = v['l'].replace(wrong_path_sep, os.path.sep) 579 v['l'] = v['l'].replace(wrong_path_sep, os.path.sep)
580 if 'relative_cwd' in data: 580 if 'relative_cwd' in data:
581 data['relative_cwd'] = data['relative_cwd'].replace( 581 data['relative_cwd'] = data['relative_cwd'].replace(
582 wrong_path_sep, os.path.sep) 582 wrong_path_sep, os.path.sep)
583 return data 583 return data
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698