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

Side by Side Diff: chrome/common/extensions/docs/server2/host_file_system_provider.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
(Empty)
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
3 # found in the LICENSE file.
4
5 from caching_file_system import CachingFileSystem
6 from local_file_system import LocalFileSystem
7 from offline_file_system import OfflineFileSystem
8 from subversion_file_system import SubversionFileSystem
9 from third_party.json_schema_compiler.memoize import memoize
10
not at google - send to devlin 2013/10/08 15:48:39 no amount of --similarity=? will convince git cl t
Jeffrey Yasskin 2013/10/08 17:46:05 Half the time I try to increase the --similarity a
not at google - send to devlin 2013/10/08 18:27:37 hm ok I'll give it a go.
11
12 class HostFileSystemProvider(object):
Jeffrey Yasskin 2013/10/08 17:46:05 What's the difference between a "Creator" and a "P
not at google - send to devlin 2013/10/08 18:27:37 the memoization is an implementation detail, thoug
13 '''Provides cached instances of host file systems for trunk or any branch.
14 '''
15 def __init__(self,
16 object_store_creator,
17 max_trunk_revision=None,
18 default_trunk_instance=None,
19 offline=False,
20 constructor_for_test=None):
21 '''
22 |object_store_creator|
23 Provides caches for file systems that need one.
24 |max_trunk_revision|
25 If not None, the maximum revision that a 'trunk' file system will be
26 created at. If None, 'trunk' file systems will use HEAD.
27 |default_trunk_instance|
28 If not None, 'trunk' file systems provided by this class without a
29 specific revision will return |default_trunk_instance| instead.
30 |offline|
31 If True all provided file systems will be wrapped in an OfflineFileSystem.
32 |constructor_for_test|
33 Provides a custom constructor rather than creating SubversionFileSystems.
34 '''
35 self._object_store_creator = object_store_creator
36 self._max_trunk_revision = max_trunk_revision
37 self._default_trunk_instance = default_trunk_instance
38 self._offline = offline
39 self._constructor_for_test = constructor_for_test
Jeffrey Yasskin 2013/10/08 17:46:05 Don't do it in this change (to keep the diff small
not at google - send to devlin 2013/10/08 18:27:37 SGTM.
40
41 @memoize
Jeffrey Yasskin 2013/10/08 17:46:05 Memoization is dangerous in long-lived servers whe
not at google - send to devlin 2013/10/08 18:27:37 that's not the level that the memoization happens
Jeffrey Yasskin 2013/10/08 20:49:39 'k, sounds good.
42 def GetTrunk(self, revision=None):
Jeffrey Yasskin 2013/10/08 17:46:05 Please describe the meaning of 'revision' on trunk
not at google - send to devlin 2013/10/08 18:27:37 Done.
43 if revision is None:
44 if self._default_trunk_instance is not None:
45 return self._default_trunk_instance
46 return self._Create('trunk', revision=self._max_trunk_revision)
47 if self._max_trunk_revision is not None:
48 revision = min(revision, self._max_trunk_revision)
49 return self._Create('trunk', revision=revision)
50
51 @memoize
Jeffrey Yasskin 2013/10/08 17:46:05 Branches also change over time, but maybe we don't
not at google - send to devlin 2013/10/08 18:27:37 correct, branches change, and it would be seriousl
Jeffrey Yasskin 2013/10/08 20:49:39 Given my misunderstanding about this memoization t
not at google - send to devlin 2013/10/08 21:29:36 Strictly speaking yes. We should be making sure th
52 def GetBranch(self, branch):
53 '''Creates either SVN file systems or specialized file systems from the
Jeffrey Yasskin 2013/10/08 17:46:05 This seems like it still belongs on _Create. You s
not at google - send to devlin 2013/10/08 18:27:37 Done.
54 constructor passed into this instance. Wraps the resulting file system in
55 an Offline file system if the offline flag is set, and finally wraps it in a
56 Caching file system.
57 '''
58 assert isinstance(branch, basestring), 'Branch %s must be a string' % branch
59 assert branch != 'trunk', 'Cannot specify branch=\'trunk\', use GetTrunk()'
60 return self._Create(branch)
61
62 def _Create(self, branch, revision=None):
63 if self._constructor_for_test is not None:
64 file_system = self._constructor_for_test(branch=branch, revision=revision)
65 else:
66 file_system = SubversionFileSystem.Create(branch=branch,
67 revision=revision)
68 if self._offline:
69 file_system = OfflineFileSystem(file_system)
70 return CachingFileSystem(file_system, self._object_store_creator)
71
72 @staticmethod
Jeffrey Yasskin 2013/10/08 17:46:05 If these had been @classmethod, you wouldn't have
not at google - send to devlin 2013/10/08 18:27:37 that sounds like a nice pattern in general, thanks
73 def ForLocal(object_store_creator):
74 '''Used in creating a server instance on localhost.
75 '''
76 return HostFileSystemProvider(
77 object_store_creator,
78 constructor_for_test=lambda **_: LocalFileSystem.Create())
Jeffrey Yasskin 2013/10/08 17:46:05 'constructor_for_test' seems like the wrong name i
not at google - send to devlin 2013/10/08 18:27:37 Local only makes sense when testing (or when runni
79
80 @staticmethod
81 def ForTest(file_system, object_store_creator):
82 '''Used in creating a test server instance. The HostFileSystemProvider
83 returned here will always return |file_system| when its Create() method is
84 called.
85 '''
86 return HostFileSystemProvider(
87 object_store_creator,
88 constructor_for_test=lambda **_: file_system)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698