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

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

Issue 61393002: Docserver: Enable GitHub content providers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 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 future import Gettable, Future 5 from future import Gettable, Future
6 6
7 7
8 class FileNotFoundError(Exception): 8 class FileNotFoundError(Exception):
9 '''Raised when a file isn't found for read or stat. 9 '''Raised when a file isn't found for read or stat.
10 ''' 10 '''
11 def __init__(self, filename): 11 def __init__(self, filename):
12 Exception.__init__(self, filename) 12 Exception.__init__(self, filename)
13 13
14
14 class FileSystemError(Exception): 15 class FileSystemError(Exception):
15 '''Raised on when there are errors reading or statting files, such as a 16 '''Raised on when there are errors reading or statting files, such as a
16 network timeout. 17 network timeout.
17 ''' 18 '''
18 def __init__(self, filename): 19 def __init__(self, filename):
19 Exception.__init__(self, filename) 20 Exception.__init__(self, filename)
20 21
22
21 class StatInfo(object): 23 class StatInfo(object):
22 '''The result of calling Stat on a FileSystem. 24 '''The result of calling Stat on a FileSystem.
23 ''' 25 '''
24 def __init__(self, version, child_versions=None): 26 def __init__(self, version, child_versions=None):
25 self.version = version 27 self.version = version
26 self.child_versions = child_versions 28 self.child_versions = child_versions
27 29
28 def __eq__(self, other): 30 def __eq__(self, other):
29 return (isinstance(other, StatInfo) and 31 return (isinstance(other, StatInfo) and
30 self.version == other.version and 32 self.version == other.version and
31 self.child_versions == other.child_versions) 33 self.child_versions == other.child_versions)
32 34
33 def __ne__(self, other): 35 def __ne__(self, other):
34 return not (self == other) 36 return not (self == other)
35 37
36 def __str__(self): 38 def __str__(self):
37 return '{version: %s, child_versions: %s}' % (self.version, 39 return '{version: %s, child_versions: %s}' % (self.version,
38 self.child_versions) 40 self.child_versions)
39 41
40 def __repr__(self): 42 def __repr__(self):
41 return str(self) 43 return str(self)
42 44
45
43 def ToUnicode(data): 46 def ToUnicode(data):
44 '''Returns the str |data| as a unicode object. It's expected to be utf8, but 47 '''Returns the str |data| as a unicode object. It's expected to be utf8, but
45 there are also latin-1 encodings in there for some reason. Fall back to that. 48 there are also latin-1 encodings in there for some reason. Fall back to that.
46 ''' 49 '''
47 try: 50 try:
48 return unicode(data, 'utf-8') 51 return unicode(data, 'utf-8')
49 except: 52 except:
50 return unicode(data, 'latin-1') 53 return unicode(data, 'latin-1')
51 54
55
52 class FileSystem(object): 56 class FileSystem(object):
53 '''A FileSystem interface that can read files and directories. 57 '''A FileSystem interface that can read files and directories.
54 ''' 58 '''
55 def Read(self, paths, binary=False): 59 def Read(self, paths, binary=False):
56 '''Reads each file in paths and returns a dictionary mapping the path to the 60 '''Reads each file in paths and returns a dictionary mapping the path to the
57 contents. If a path in paths ends with a '/', it is assumed to be a 61 contents. If a path in paths ends with a '/', it is assumed to be a
58 directory, and a list of files in the directory is mapped to the path. 62 directory, and a list of files in the directory is mapped to the path.
59 63
60 If binary=False, the contents of each file will be unicode parsed as utf-8, 64 If binary=False, the contents of each file will be unicode parsed as utf-8,
61 and failing that as latin-1 (some extension docs use latin-1). If 65 and failing that as latin-1 (some extension docs use latin-1). If
62 binary=True then the contents will be a str. 66 binary=True then the contents will be a str.
63 67
64 If any path cannot be found, raises a FileNotFoundError. This is guaranteed 68 If any path cannot be found, raises a FileNotFoundError. This is guaranteed
65 to only happen once the Future has been resolved (Get() called). 69 to only happen once the Future has been resolved (Get() called).
66 70
67 For any other failure, raises a FileSystemError. 71 For any other failure, raises a FileSystemError.
68 ''' 72 '''
69 raise NotImplementedError(self.__class__) 73 raise NotImplementedError(self.__class__)
70 74
71 def ReadSingle(self, path, binary=False): 75 def ReadSingle(self, path, binary=False):
72 '''Reads a single file from the FileSystem. Returns a Future with the same 76 '''Reads a single file from the FileSystem. Returns a Future with the same
73 rules as Read(). 77 rules as Read().
74 ''' 78 '''
75 read_single = self.Read([path], binary=binary) 79 read_single = self.Read([path], binary=binary)
76 return Future(delegate=Gettable(lambda: read_single.Get()[path])) 80 return Future(delegate=Gettable(lambda: read_single.Get()[path]))
77 81
78 def Refresh(self): 82 def Refresh(self):
79 raise NotImplementedError(self.__class__) 83 '''Asynchronously refreshes the content of the FileSystem, returning a
84 future to its completion.
85 '''
86 return Future(value=())
80 87
81 # TODO(cduvall): Allow Stat to take a list of paths like Read. 88 # TODO(cduvall): Allow Stat to take a list of paths like Read.
82 def Stat(self, path): 89 def Stat(self, path):
83 '''Returns a |StatInfo| object containing the version of |path|. If |path| 90 '''Returns a |StatInfo| object containing the version of |path|. If |path|
84 is a directory, |StatInfo| will have the versions of all the children of 91 is a directory, |StatInfo| will have the versions of all the children of
85 the directory in |StatInfo.child_versions|. 92 the directory in |StatInfo.child_versions|.
86 93
87 If the path cannot be found, raises a FileNotFoundError. 94 If the path cannot be found, raises a FileNotFoundError.
88 For any other failure, raises a FileSystemError. 95 For any other failure, raises a FileSystemError.
89 ''' 96 '''
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 yield walkinfo 133 yield walkinfo
127 134
128 for walkinfo in walk(root): 135 for walkinfo in walk(root):
129 yield walkinfo 136 yield walkinfo
130 137
131 def __repr__(self): 138 def __repr__(self):
132 return '<%s>' % type(self).__name__ 139 return '<%s>' % type(self).__name__
133 140
134 def __str__(self): 141 def __str__(self):
135 return repr(self) 142 return repr(self)
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/server2/cron.yaml ('k') | chrome/common/extensions/docs/server2/server_instance.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698