summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py')
-rw-r--r--Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py144
1 files changed, 0 insertions, 144 deletions
diff --git a/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py b/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py
deleted file mode 100644
index 954fb56a9..000000000
--- a/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import BaseHTTPServer
-
-import cgi
-import codecs
-import datetime
-import fnmatch
-import json
-import mimetypes
-import os.path
-import shutil
-import threading
-import time
-import urlparse
-import wsgiref.handlers
-import BaseHTTPServer
-
-
-class ReflectionHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- STATIC_FILE_EXTENSIONS = ['.js', '.css', '.html']
- # Subclasses should override.
- STATIC_FILE_DIRECTORY = None
-
- # Setting this flag to True causes the server to send
- # Access-Control-Allow-Origin: *
- # with every response.
- allow_cross_origin_requests = False
-
- def do_GET(self):
- self._handle_request()
-
- def do_POST(self):
- self._handle_request()
-
- def do_HEAD(self):
- self._handle_request()
-
- def read_entity_body(self):
- length = int(self.headers.getheader('content-length'))
- return self.rfile.read(length)
-
- def _read_entity_body_as_json(self):
- return json.loads(self.read_entity_body())
-
- def _handle_request(self):
- if "?" in self.path:
- path, query_string = self.path.split("?", 1)
- self.query = cgi.parse_qs(query_string)
- else:
- path = self.path
- self.query = {}
- function_or_file_name = path[1:] or "index.html"
-
- _, extension = os.path.splitext(function_or_file_name)
- if extension in self.STATIC_FILE_EXTENSIONS:
- self._serve_static_file(function_or_file_name)
- return
-
- function_name = function_or_file_name.replace(".", "_")
- if not hasattr(self, function_name):
- self.send_error(404, "Unknown function %s" % function_name)
- return
- if function_name[0] == "_":
- self.send_error(401, "Not allowed to invoke private or protected methods")
- return
- function = getattr(self, function_name)
- function()
-
- def _serve_static_file(self, static_path):
- self._serve_file(os.path.join(self.STATIC_FILE_DIRECTORY, static_path))
-
- def quitquitquit(self):
- self._serve_text("Server quit.\n")
- # Shutdown has to happen on another thread from the server's thread,
- # otherwise there's a deadlock
- threading.Thread(target=lambda: self.server.shutdown()).start()
-
- def _send_access_control_header(self):
- if self.allow_cross_origin_requests:
- self.send_header('Access-Control-Allow-Origin', '*')
-
- def _serve_text(self, text):
- self.send_response(200)
- self._send_access_control_header()
- self.send_header("Content-type", "text/plain")
- self.end_headers()
- self.wfile.write(text)
-
- def _serve_json(self, json_object):
- self.send_response(200)
- self._send_access_control_header()
- self.send_header('Content-type', 'application/json')
- self.end_headers()
- json.dump(json_object, self.wfile)
-
- def _serve_file(self, file_path, cacheable_seconds=0, headers_only=False):
- if not os.path.exists(file_path):
- self.send_error(404, "File not found")
- return
- with codecs.open(file_path, "rb") as static_file:
- self.send_response(200)
- self._send_access_control_header()
- self.send_header("Content-Length", os.path.getsize(file_path))
- mime_type, encoding = mimetypes.guess_type(file_path)
- if mime_type:
- self.send_header("Content-type", mime_type)
-
- if cacheable_seconds:
- expires_time = (datetime.datetime.now() +
- datetime.timedelta(0, cacheable_seconds))
- expires_formatted = wsgiref.handlers.format_date_time(
- time.mktime(expires_time.timetuple()))
- self.send_header("Expires", expires_formatted)
- self.end_headers()
-
- if not headers_only:
- shutil.copyfileobj(static_file, self.wfile)