Index: tracing/third_party/tvcm/tvcm/resource_loader.py |
diff --git a/tracing/third_party/tvcm/tvcm/resource_loader.py b/tracing/third_party/tvcm/tvcm/resource_loader.py |
deleted file mode 100644 |
index 165ba16f46ef4b4c0f17e773d8d67d9075fb598d..0000000000000000000000000000000000000000 |
--- a/tracing/third_party/tvcm/tvcm/resource_loader.py |
+++ /dev/null |
@@ -1,225 +0,0 @@ |
-# Copyright (c) 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""ResourceFinder is a helper class for finding resources given their name.""" |
- |
-import codecs |
-import os |
- |
-from tvcm import module |
-from tvcm import style_sheet as style_sheet_module |
-from tvcm import resource as resource_module |
-from tvcm import html_module |
-from tvcm import strip_js_comments |
- |
- |
-class ResourceLoader(object): |
- """Manges loading modules and their dependencies from files. |
- |
- Modules handle parsing and the construction of their individual dependency |
- pointers. The loader deals with bookkeeping of what has been loaded, and |
- mapping names to file resources. |
- """ |
- def __init__(self, project): |
- self.project = project |
- self.stripped_js_by_filename = {} |
- self.loaded_modules = {} |
- self.loaded_raw_scripts = {} |
- self.loaded_style_sheets = {} |
- self.loaded_images = {} |
- |
- @property |
- def source_paths(self): |
- """A list of base directories to search for modules under.""" |
- return self.project.source_paths |
- |
- def FindResource(self, some_path, binary=False): |
- """Finds a Resource for the given path. |
- |
- Args: |
- some_path: A relative or absolute path to a file. |
- |
- Returns: |
- A Resource or None. |
- """ |
- if os.path.isabs(some_path): |
- return self.FindResourceGivenAbsolutePath(some_path, binary) |
- else: |
- return self.FindResourceGivenRelativePath(some_path, binary) |
- |
- def FindResourceGivenAbsolutePath(self, absolute_path, binary=False): |
- """Returns a Resource for the given absolute path.""" |
- candidate_paths = [] |
- for source_path in self.source_paths: |
- if absolute_path.startswith(source_path): |
- candidate_paths.append(source_path) |
- if len(candidate_paths) == 0: |
- return None |
- |
- # Sort by length. Longest match wins. |
- candidate_paths.sort(lambda x, y: len(x) - len(y)) |
- longest_candidate = candidate_paths[-1] |
- return resource_module.Resource(longest_candidate, absolute_path, binary) |
- |
- def FindResourceGivenRelativePath(self, relative_path, binary=False): |
- """Returns a Resource for the given relative path.""" |
- absolute_path = None |
- for script_path in self.source_paths: |
- absolute_path = os.path.join(script_path, relative_path) |
- if os.path.exists(absolute_path): |
- return resource_module.Resource(script_path, absolute_path, binary) |
- return None |
- |
- def _FindResourceGivenNameAndSuffix( |
- self, requested_name, extension, return_resource=False): |
- """Searches for a file and reads its contents. |
- |
- Args: |
- requested_name: The name of the resource that was requested. |
- extension: The extension for this requested resource. |
- |
- Returns: |
- A (path, contents) pair. |
- """ |
- pathy_name = requested_name.replace('.', os.sep) |
- filename = pathy_name + extension |
- |
- resource = self.FindResourceGivenRelativePath(filename) |
- if return_resource: |
- return resource |
- if not resource: |
- return None, None |
- return _read_file(resource.absolute_path) |
- |
- def FindModuleResource(self, requested_module_name): |
- """Finds a module javascript file and returns a Resource, or none.""" |
- js_resource = self._FindResourceGivenNameAndSuffix( |
- requested_module_name, '.js', return_resource=True) |
- html_resource = self._FindResourceGivenNameAndSuffix( |
- requested_module_name, '.html', return_resource=True) |
- if js_resource and html_resource: |
- if html_module.IsHTMLResourceTheModuleGivenConflictingResourceNames( |
- js_resource, html_resource): |
- return html_resource |
- return js_resource |
- elif js_resource: |
- return js_resource |
- return html_resource |
- |
- def LoadModule(self, module_name=None, module_filename=None): |
- assert bool(module_name) ^ bool(module_filename), ( |
- 'Must provide either module_name or module_filename.') |
- if module_filename: |
- resource = self.FindResource(module_filename) |
- if not resource: |
- raise Exception('Could not find %s in %s' % ( |
- module_filename, repr(self.source_paths))) |
- module_name = resource.name |
- else: |
- resource = None # Will be set if we end up needing to load. |
- |
- if module_name in self.loaded_modules: |
- assert self.loaded_modules[module_name].contents |
- return self.loaded_modules[module_name] |
- |
- if not resource: # happens when module_name was given |
- resource = self.FindModuleResource(module_name) |
- if not resource: |
- raise module.DepsException('No resource for module "%s"' % module_name) |
- |
- m = html_module.HTMLModule(self, module_name, resource) |
- self.loaded_modules[module_name] = m |
- |
- # Fake it, this is probably either polymer.min.js or platform.js which are |
- # actually .js files.... |
- if resource.absolute_path.endswith('.js'): |
- return m |
- |
- m.Parse() |
- m.Load() |
- return m |
- |
- def LoadRawScript(self, relative_raw_script_path): |
- resource = None |
- for source_path in self.source_paths: |
- possible_absolute_path = os.path.join( |
- source_path, os.path.normpath(relative_raw_script_path)) |
- if os.path.exists(possible_absolute_path): |
- resource = resource_module.Resource(source_path, possible_absolute_path) |
- break |
- if not resource: |
- raise module.DepsException( |
- 'Could not find a file for raw script %s in %s' % |
- (relative_raw_script_path, self.source_paths)) |
- assert relative_raw_script_path == resource.unix_style_relative_path, ( |
- 'Expected %s == %s' % (relative_raw_script_path, |
- resource.unix_style_relative_path)) |
- |
- if resource.absolute_path in self.loaded_raw_scripts: |
- return self.loaded_raw_scripts[resource.absolute_path] |
- |
- raw_script = module.RawScript(resource) |
- self.loaded_raw_scripts[resource.absolute_path] = raw_script |
- return raw_script |
- |
- def LoadStyleSheet(self, name): |
- if name in self.loaded_style_sheets: |
- return self.loaded_style_sheets[name] |
- |
- resource = self._FindResourceGivenNameAndSuffix( |
- name, '.css', return_resource=True) |
- if not resource: |
- raise module.DepsException( |
- 'Could not find a file for stylesheet %s' % name) |
- |
- style_sheet = style_sheet_module.StyleSheet(self, name, resource) |
- style_sheet.load() |
- self.loaded_style_sheets[name] = style_sheet |
- return style_sheet |
- |
- def LoadImage(self, abs_path): |
- if abs_path in self.loaded_images: |
- return self.loaded_images[abs_path] |
- |
- if not os.path.exists(abs_path): |
- raise module.DepsException("url('%s') did not exist" % abs_path) |
- |
- res = self.FindResourceGivenAbsolutePath(abs_path, binary=True) |
- if res is None: |
- raise module.DepsException("url('%s') was not in search path" % abs_path) |
- |
- image = style_sheet_module.Image(res) |
- self.loaded_images[abs_path] = image |
- return image |
- |
- def GetStrippedJSForFilename(self, filename, early_out_if_no_tvcm): |
- if filename in self.stripped_js_by_filename: |
- return self.stripped_js_by_filename[filename] |
- |
- with open(filename, 'r') as f: |
- contents = f.read(4096) |
- if early_out_if_no_tvcm and ('tvcm' not in contents): |
- return None |
- |
- s = strip_js_comments.StripJSComments(contents) |
- self.stripped_js_by_filename[filename] = s |
- return s |
- |
- |
-def _read_file(absolute_path): |
- """Reads a file and returns a (path, contents) pair. |
- |
- Args: |
- absolute_path: Absolute path to a file. |
- |
- Raises: |
- Exception: The given file doesn't exist. |
- IOError: There was a problem opening or reading the file. |
- """ |
- if not os.path.exists(absolute_path): |
- raise Exception('%s not found.' % absolute_path) |
- f = codecs.open(absolute_path, mode='r', encoding='utf-8') |
- contents = f.read() |
- f.close() |
- return absolute_path, contents |