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

Side by Side Diff: chrome/common/extensions/docs/server2/rietveld_patcher.py

Issue 448823002: Docserver: Remove instances of _GetAsyncFetchCallback() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import json 5 import json
6 import tarfile 6 import tarfile
7 from StringIO import StringIO 7 from StringIO import StringIO
8 8
9 from file_system import FileNotFoundError 9 from file_system import FileNotFoundError
10 from future import Future 10 from future import Future
11 from patcher import Patcher 11 from patcher import Patcher
12 12
13 13
14 _CHROMIUM_REPO_BASEURLS = [ 14 _CHROMIUM_REPO_BASEURLS = [
15 'https://src.chromium.org/svn/trunk/src/', 15 'https://src.chromium.org/svn/trunk/src/',
16 'http://src.chromium.org/svn/trunk/src/', 16 'http://src.chromium.org/svn/trunk/src/',
17 'svn://svn.chromium.org/chrome/trunk/src', 17 'svn://svn.chromium.org/chrome/trunk/src',
18 'https://chromium.googlesource.com/chromium/src.git@master', 18 'https://chromium.googlesource.com/chromium/src.git@master',
19 'http://git.chromium.org/chromium/src.git@master', 19 'http://git.chromium.org/chromium/src.git@master',
20 ] 20 ]
21 21
22 22
23 class RietveldPatcherError(Exception): 23 class RietveldPatcherError(Exception):
24 def __init__(self, message): 24 def __init__(self, message):
25 self.message = message 25 self.message = message
26 26
27 27
28 def _GetAsyncFetchCallback(issue, patchset, files, fetcher):
29 tarball = fetcher.FetchAsync('tarball/%s/%s' % (issue, patchset))
30
31 def resolve():
32 tarball_result = tarball.Get()
33 if tarball_result.status_code != 200:
34 raise RietveldPatcherError(
35 'Failed to download tarball for issue %s patchset %s. Status: %s' %
36 (issue, patchset, tarball_result.status_code))
37
38 try:
39 tar = tarfile.open(fileobj=StringIO(tarball_result.content))
40 except tarfile.TarError as e:
41 raise RietveldPatcherError(
42 'Error loading tarball for issue %s patchset %s.' % (issue, patchset))
43
44 value = {}
45 for path in files:
46 tar_path = 'b/%s' % path
47
48 patched_file = None
49 try:
50 patched_file = tar.extractfile(tar_path)
51 data = patched_file.read()
52 except tarfile.TarError as e:
53 # Show appropriate error message in the unlikely case that the tarball
54 # is corrupted.
55 raise RietveldPatcherError(
56 'Error extracting tarball for issue %s patchset %s file %s.' %
57 (issue, patchset, tar_path))
58 except KeyError as e:
59 raise FileNotFoundError(
60 'File %s not found in the tarball for issue %s patchset %s' %
61 (tar_path, issue, patchset))
62 finally:
63 if patched_file:
64 patched_file.close()
65
66 value[path] = data
67
68 return value
69
70 return resolve
71
72
73 class RietveldPatcher(Patcher): 28 class RietveldPatcher(Patcher):
74 ''' Class to fetch resources from a patchset in Rietveld. 29 ''' Class to fetch resources from a patchset in Rietveld.
75 ''' 30 '''
76 def __init__(self, 31 def __init__(self,
77 issue, 32 issue,
78 fetcher): 33 fetcher):
79 self._issue = issue 34 self._issue = issue
80 self._fetcher = fetcher 35 self._fetcher = fetcher
81 self._cache = None 36 self._cache = None
82 37
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 modified.append(f) 89 modified.append(f)
135 else: 90 else:
136 raise RietveldPatcherError('Unknown file status for file %s: "%s."' % 91 raise RietveldPatcherError('Unknown file status for file %s: "%s."' %
137 (key, status)) 92 (key, status))
138 93
139 return (added, deleted, modified) 94 return (added, deleted, modified)
140 95
141 def Apply(self, paths, file_system, version=None): 96 def Apply(self, paths, file_system, version=None):
142 if version is None: 97 if version is None:
143 version = self.GetVersion() 98 version = self.GetVersion()
144 return Future(callback=_GetAsyncFetchCallback(self._issue, 99
145 version, 100 def apply_(tarball_result):
146 paths, 101 if tarball_result.status_code != 200:
147 self._fetcher)) 102 raise RietveldPatcherError(
103 'Failed to download tarball for issue %s patchset %s. Status: %s' %
104 (self._issue, version, tarball_result.status_code))
105
106 try:
107 tar = tarfile.open(fileobj=StringIO(tarball_result.content))
108 except tarfile.TarError as e:
109 raise RietveldPatcherError(
110 'Error loading tarball for issue %s patchset %s.' % (self._issue,
111 version))
112
113 value = {}
114 for path in paths:
115 tar_path = 'b/%s' % path
116
117 patched_file = None
118 try:
119 patched_file = tar.extractfile(tar_path)
120 data = patched_file.read()
121 except tarfile.TarError as e:
122 # Show appropriate error message in the unlikely case that the tarball
123 # is corrupted.
124 raise RietveldPatcherError(
125 'Error extracting tarball for issue %s patchset %s file %s.' %
126 (self._issue, version, tar_path))
127 except KeyError as e:
128 raise FileNotFoundError(
129 'File %s not found in the tarball for issue %s patchset %s' %
130 (tar_path, self._issue, version))
131 finally:
132 if patched_file:
133 patched_file.close()
134
135 value[path] = data
136
137 return value
138 return self._fetcher.FetchAsync('tarball/%s/%s' % (self._issue,
139 version)).Then(apply_)
148 140
149 def GetIdentity(self): 141 def GetIdentity(self):
150 return self._issue 142 return self._issue
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698