Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 import logging | |
| 6 from operator import itemgetter | |
| 7 import posixpath | |
| 8 | |
| 9 from chroot_file_system import ChrootFileSystem | |
| 10 from content_provider import ContentProvider | |
| 11 from svn_constants import JSON_PATH | |
| 12 from third_party.json_schema_compiler.memoize import memoize | |
| 13 | |
| 14 | |
| 15 _CONFIG_PATH = '%s/content_providers.json' % JSON_PATH | |
| 16 | |
| 17 | |
| 18 class ContentProviders(object): | |
| 19 '''Implements the content_providers.json configuration. Returns | |
|
Jeffrey Yasskin
2013/11/04 21:21:18
Document or link to documentation of the format of
not at google - send to devlin
2013/11/04 23:34:49
Done. Documentation added to content_providers.jso
| |
| 20 ContentProvider instances based on how they're configured there. | |
| 21 ''' | |
| 22 | |
| 23 def __init__(self, compiled_fs_factory, host_file_system): | |
| 24 self._compiled_fs_factory = compiled_fs_factory | |
| 25 self._host_file_system = host_file_system | |
| 26 self._cache = compiled_fs_factory.ForJson(host_file_system) | |
| 27 | |
| 28 @memoize | |
| 29 def GetByName(self, name): | |
| 30 config = self._GetConfig().get(name) | |
| 31 if config is None: | |
| 32 logging.error('No content provider found with name "%s"' % name) | |
| 33 return None | |
| 34 return self._CreateContentProvider(name, config) | |
| 35 | |
| 36 @memoize | |
| 37 def GetByServlet(self, path): | |
|
Jeffrey Yasskin
2013/11/04 21:21:18
Docstring what this function means, as opposed to
not at google - send to devlin
2013/11/04 23:34:49
Done.
| |
| 38 serve_from_to_config = dict( | |
| 39 (config['serveFrom'], (name, config)) | |
| 40 for name, config in self._GetConfig().iteritems()) | |
| 41 path_parts = path.split('/') | |
| 42 for i in xrange(len(path_parts), -1, -1): | |
| 43 name_and_config = serve_from_to_config.get('/'.join(path_parts[:i])) | |
| 44 if name_and_config is not None: | |
| 45 return (self._CreateContentProvider(name_and_config[0], | |
| 46 name_and_config[1]), | |
| 47 '/'.join(path_parts[i:])) | |
| 48 return None, path | |
| 49 | |
| 50 @memoize | |
| 51 def GetDefault(self): | |
| 52 for name, config in self._GetConfig().iteritems(): | |
| 53 if config.get('default', False): | |
| 54 return self._CreateContentProvider(name, config) | |
| 55 logging.error('No default content provider') | |
| 56 return None | |
| 57 | |
| 58 def _GetConfig(self): | |
| 59 return self._cache.GetFromFile(_CONFIG_PATH).Get() | |
| 60 | |
| 61 def _CreateContentProvider(self, name, config): | |
| 62 type_ = config.get('type') | |
| 63 chroot = config.get('chroot', '') | |
| 64 supports_templates = config.get('supportsTemplates', False) | |
| 65 supports_zip = config.get('supportsZip', False) | |
| 66 | |
| 67 if type_ == 'host': | |
| 68 file_system = self._host_file_system | |
| 69 else: | |
| 70 logging.error('Content provider type "%s" not supported', type_) | |
| 71 return None | |
| 72 | |
| 73 return ContentProvider(name, | |
| 74 self._compiled_fs_factory, | |
| 75 ChrootFileSystem(file_system, chroot), | |
| 76 self._host_file_system, | |
| 77 supports_templates=supports_templates, | |
| 78 supports_zip=supports_zip) | |
| 79 | |
| 80 def Cron(self): | |
| 81 for name, config in self._GetConfig().iteritems(): | |
| 82 self._CreateContentProvider(name, config).Cron() | |
| OLD | NEW |