diff options
Diffstat (limited to 'catapult/common/py_vulcanize/py_vulcanize/resource.py')
-rw-r--r-- | catapult/common/py_vulcanize/py_vulcanize/resource.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/catapult/common/py_vulcanize/py_vulcanize/resource.py b/catapult/common/py_vulcanize/py_vulcanize/resource.py new file mode 100644 index 00000000..853dff94 --- /dev/null +++ b/catapult/common/py_vulcanize/py_vulcanize/resource.py @@ -0,0 +1,57 @@ +# Copyright 2013 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. + +"""A Resource is a file and its various associated canonical names.""" + +import codecs +import os + + +class Resource(object): + """Represents a file found via a path search.""" + + def __init__(self, toplevel_dir, absolute_path, binary=False): + self.toplevel_dir = toplevel_dir + self.absolute_path = absolute_path + self._contents = None + self._binary = binary + + @property + def relative_path(self): + """The path to the file from the top-level directory""" + return os.path.relpath(self.absolute_path, self.toplevel_dir) + + @property + def unix_style_relative_path(self): + return self.relative_path.replace(os.sep, '/') + + @property + def name(self): + """The dotted name for this resource based on its relative path.""" + return self.name_from_relative_path(self.relative_path) + + @staticmethod + def name_from_relative_path(relative_path): + dirname = os.path.dirname(relative_path) + basename = os.path.basename(relative_path) + modname = os.path.splitext(basename)[0] + if len(dirname): + name = dirname.replace(os.path.sep, '.') + '.' + modname + else: + name = modname + return name + + @property + def contents(self): + if self._contents: + return self._contents + if not os.path.exists(self.absolute_path): + raise Exception('%s not found.' % self.absolute_path) + if self._binary: + f = open(self.absolute_path, mode='rb') + else: + f = codecs.open(self.absolute_path, mode='r', encoding='utf-8') + self._contents = f.read() + f.close() + return self._contents |