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

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

Issue 26418002: Docserver: Pull knowledge of host file systems into a single (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 7 years, 2 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 | Annotate | Revision Log
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 from fnmatch import fnmatch 5 from fnmatch import fnmatch
6 import logging 6 import logging
7 from urlparse import urlparse 7 from urlparse import urlparse
8 8
9 from appengine_url_fetcher import AppEngineUrlFetcher 9 from appengine_url_fetcher import AppEngineUrlFetcher
10 from appengine_wrappers import IsDevServer 10 from appengine_wrappers import IsDevServer
11 from caching_file_system import CachingFileSystem 11 from caching_file_system import CachingFileSystem
12 from caching_rietveld_patcher import CachingRietveldPatcher 12 from caching_rietveld_patcher import CachingRietveldPatcher
13 from chained_compiled_file_system import ChainedCompiledFileSystem 13 from chained_compiled_file_system import ChainedCompiledFileSystem
14 from compiled_file_system import CompiledFileSystem 14 from compiled_file_system import CompiledFileSystem
15 from host_file_system_creator import HostFileSystemCreator 15 from host_file_system_provider import HostFileSystemProvider
16 from instance_servlet import InstanceServlet 16 from instance_servlet import InstanceServlet
17 from render_servlet import RenderServlet 17 from render_servlet import RenderServlet
18 from rietveld_patcher import RietveldPatcher, RietveldPatcherError 18 from rietveld_patcher import RietveldPatcher, RietveldPatcherError
19 from object_store_creator import ObjectStoreCreator 19 from object_store_creator import ObjectStoreCreator
20 from patched_file_system import PatchedFileSystem 20 from patched_file_system import PatchedFileSystem
21 from server_instance import ServerInstance 21 from server_instance import ServerInstance
22 from servlet import Request, Response, Servlet 22 from servlet import Request, Response, Servlet
23 import svn_constants 23 import svn_constants
24 import url_constants 24 import url_constants
25 25
26 class _PatchServletDelegate(RenderServlet.Delegate): 26 class _PatchServletDelegate(RenderServlet.Delegate):
27 def __init__(self, issue, delegate): 27 def __init__(self, issue, delegate):
28 self._issue = issue 28 self._issue = issue
29 self._delegate = delegate 29 self._delegate = delegate
30 30
31 def CreateServerInstance(self): 31 def CreateServerInstance(self):
32 # start_empty=False because a patch can rely on files that are already in
33 # SVN repository but not yet pulled into data store by cron jobs (a typical
34 # example is to add documentation for an existing API).
32 object_store_creator = ObjectStoreCreator(start_empty=False) 35 object_store_creator = ObjectStoreCreator(start_empty=False)
33 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) 36
34 host_file_system_creator = self._delegate.CreateHostFileSystemCreator( 37 unpatched_host_file_system_provider = (
38 self._delegate.CreateHostFileSystemProvider(object_store_creator))
39 unpatched_trunk_host_file_system = (
40 unpatched_host_file_system_provider.GetTrunk())
41 unpatched_compiled_fs_factory = CompiledFileSystem.Factory(
42 unpatched_trunk_host_file_system,
35 object_store_creator) 43 object_store_creator)
36 # offline=False because a patch can rely on files that are already in SVN
37 # repository but not yet pulled into data store by cron jobs (a typical
38 # example is to add documentation for an existing API).
39 base_file_system = CachingFileSystem(
40 host_file_system_creator.Create(offline=False),
41 object_store_creator)
42 base_compiled_fs_factory = CompiledFileSystem.Factory(base_file_system,
43 object_store_creator)
44 44
45 rietveld_patcher = CachingRietveldPatcher( 45 rietveld_patcher = CachingRietveldPatcher(
46 RietveldPatcher(svn_constants.EXTENSIONS_PATH, 46 RietveldPatcher(svn_constants.EXTENSIONS_PATH,
47 self._issue, 47 self._issue,
48 AppEngineUrlFetcher(url_constants.CODEREVIEW_SERVER)), 48 AppEngineUrlFetcher(url_constants.CODEREVIEW_SERVER)),
49 object_store_creator) 49 object_store_creator)
50 patched_file_system = PatchedFileSystem(base_file_system, 50
51 patched_file_system = PatchedFileSystem(unpatched_trunk_host_file_system,
51 rietveld_patcher) 52 rietveld_patcher)
53 patched_host_file_system_provider = (
54 self._delegate.CreateHostFileSystemProvider(
55 object_store_creator,
56 # The patched file system needs to be online otherwise it'd be
57 # impossible to add files in the patches.
58 offline=False,
59 # The trunk file system for this creator should be the patched one.
Jeffrey Yasskin 2013/10/08 17:46:05 "the patched one" doesn't match "unpatched_trunk_h
not at google - send to devlin 2013/10/08 18:27:37 gah. thank you. it's... very odd that this didn't
Jeffrey Yasskin 2013/10/08 20:49:39 Write more tests! ;-)
60 default_trunk_instance=unpatched_trunk_host_file_system))
52 patched_compiled_fs_factory = CompiledFileSystem.Factory( 61 patched_compiled_fs_factory = CompiledFileSystem.Factory(
53 patched_file_system, object_store_creator) 62 patched_file_system,
63 object_store_creator)
54 64
55 compiled_fs_factory = ChainedCompiledFileSystem.Factory( 65 combined_compiled_fs_factory = ChainedCompiledFileSystem.Factory(
56 [(patched_compiled_fs_factory, patched_file_system), 66 [(patched_compiled_fs_factory, patched_file_system),
57 (base_compiled_fs_factory, base_file_system)]) 67 (unpatched_compiled_fs_factory, unpatched_trunk_host_file_system)])
68
69 branch_utility = self._delegate.CreateBranchUtility(object_store_creator)
58 70
59 return ServerInstance(object_store_creator, 71 return ServerInstance(object_store_creator,
60 patched_file_system,
61 self._delegate.CreateAppSamplesFileSystem( 72 self._delegate.CreateAppSamplesFileSystem(
62 object_store_creator), 73 object_store_creator),
63 compiled_fs_factory, 74 combined_compiled_fs_factory,
64 branch_utility, 75 branch_utility,
65 host_file_system_creator, 76 patched_host_file_system_provider,
66 base_path='/_patch/%s/' % self._issue) 77 base_path='/_patch/%s/' % self._issue)
67 78
68 class PatchServlet(Servlet): 79 class PatchServlet(Servlet):
69 '''Servlet which renders patched docs. 80 '''Servlet which renders patched docs.
70 ''' 81 '''
71 def __init__(self, request, delegate=None): 82 def __init__(self, request, delegate=None):
72 self._request = request 83 self._request = request
73 self._delegate = delegate or InstanceServlet.Delegate() 84 self._delegate = delegate or InstanceServlet.Delegate()
74 85
75 def Get(self): 86 def Get(self):
(...skipping 23 matching lines...) Expand all
99 # Disable cache for patched content. 110 # Disable cache for patched content.
100 response.headers.pop('cache-control', None) 111 response.headers.pop('cache-control', None)
101 except RietveldPatcherError as e: 112 except RietveldPatcherError as e:
102 response = Response.NotFound(e.message, {'Content-Type': 'text/plain'}) 113 response = Response.NotFound(e.message, {'Content-Type': 'text/plain'})
103 114
104 redirect_url, permanent = response.GetRedirect() 115 redirect_url, permanent = response.GetRedirect()
105 if redirect_url is not None: 116 if redirect_url is not None:
106 response = Response.Redirect('/_patch/%s%s' % (issue, redirect_url), 117 response = Response.Redirect('/_patch/%s%s' % (issue, redirect_url),
107 permanent) 118 permanent)
108 return response 119 return response
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698