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

Unified Diff: mojo/devtools/common/devtoolslib/http_server.py

Issue 1269863004: Support mapping multiple local paths under the same url prefix. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Fix typos in tests. Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: mojo/devtools/common/devtoolslib/http_server.py
diff --git a/mojo/devtools/common/devtoolslib/http_server.py b/mojo/devtools/common/devtoolslib/http_server.py
index dc125c835ebd57e000c412ddb7db05c247c1a1c3..6afd6a01ca4375a485bc2ad301ad2b80066af331 100644
--- a/mojo/devtools/common/devtoolslib/http_server.py
+++ b/mojo/devtools/common/devtoolslib/http_server.py
@@ -53,9 +53,11 @@ def _get_handler_class_for_path(mappings):
"""Creates a handler override for SimpleHTTPServer.
Args:
- mappings: List of tuples (prefix, local_base_path), mapping path prefixes
- without the leading slash to local filesystem directory paths. The first
- matching prefix will be used each time.
+ mappings: List of tuples (prefix, local_base_path_list) mapping URLs that
+ start with |prefix| to one or more local directories enumerated in
+ |local_base_path_list|. The prefixes should skip the leading slash.
+ The first matching prefix and the first location that contains the
+ requested file will be used each time.
"""
for prefix, _ in mappings:
assert not prefix.startswith('/'), ('Prefixes for the http server mappings '
@@ -138,23 +140,26 @@ def _get_handler_class_for_path(mappings):
normalized_path = os.path.relpath(
SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(self, path))
- for prefix, local_base_path in mappings:
+ for prefix, local_base_path_list in mappings:
if normalized_path.startswith(prefix):
- result = os.path.join(local_base_path, normalized_path[len(prefix):])
- if os.path.isfile(result):
- if gzipped:
- gz_result = result + '.gz'
- if (not os.path.isfile(gz_result) or
- os.path.getmtime(gz_result) <= os.path.getmtime(result)):
- with open(result, 'rb') as f:
- with gzip.open(gz_result, 'wb') as zf:
- shutil.copyfileobj(f, zf)
- result = gz_result
- return result
-
- # This class is only used internally, and we're adding a catch-all ''
- # prefix at the end of |mappings|.
- assert False
+ for local_base_path in local_base_path_list:
+ candidate = os.path.join(local_base_path,
+ normalized_path[len(prefix):])
+ if os.path.isfile(candidate):
+ if gzipped:
+ gz_result = candidate + '.gz'
+ if (not os.path.isfile(gz_result) or
+ os.path.getmtime(gz_result) <= os.path.getmtime(candidate)):
+ with open(candidate, 'rb') as f:
+ with gzip.open(gz_result, 'wb') as zf:
+ shutil.copyfileobj(f, zf)
+ return gz_result
+ return candidate
+ else:
+ self.send_response(404)
+ return None
+ self.send_response(404)
+ return None
def guess_type(self, path):
# This is needed so that exploded Sky apps without shebang can still run
@@ -177,10 +182,11 @@ def start_http_server(mappings, host_port=0):
"""Starts an http server serving files from |local_dir_path| on |host_port|.
Args:
- mappings: List of tuples (prefix, local_base_path) mapping
- URLs that start with |prefix| to local directory at |local_base_path|.
- The prefixes should skip the leading slash. The first matching prefix
- will be used each time.
+ mappings: List of tuples (prefix, local_base_path_list) mapping URLs that
+ start with |prefix| to one or more local directories enumerated in
+ |local_base_path_list|. The prefixes should skip the leading slash.
+ The first matching prefix and the first location that contains the
+ requested file will be used each time.
host_port: Port on the host machine to run the server on. Pass 0 to use a
system-assigned port.
« no previous file with comments | « mojo/devtools/common/devtoolslib/android_shell.py ('k') | mojo/devtools/common/devtoolslib/http_server_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698