| import os |
| from wptserve import pipes |
| |
| from wptserve.utils import isomorphic_decode |
| |
| def run_other(request, response, path): |
| #This is a terrible hack |
| environ = {u"__file__": path} |
| exec(compile(open(path, u"r").read(), path, u'exec'), environ, environ) |
| rv = environ[u"main"](request, response) |
| return rv |
| |
| def main(request, response): |
| origin = request.GET.first(b"origin", request.headers[b"origin"]) |
| credentials = request.GET.first(b"credentials", b"true") |
| |
| response.headers.update([(b"Access-Control-Allow-Origin", origin), |
| (b"Access-Control-Allow-Credentials", credentials)]) |
| |
| handler = request.GET.first(b'run') |
| if handler in [b"status-reconnect", |
| b"message", |
| b"redirect", |
| b"cache-control"]: |
| if handler == b"cache-control": |
| response.headers.set(b"Content-Type", b"text/event-stream") |
| rv = open(os.path.join(request.doc_root, u"eventsource", u"resources", u"cache-control.event_stream"), u"r").read() |
| response.content = rv |
| pipes.sub(request, response) |
| return |
| elif handler == b"redirect": |
| return run_other(request, response, os.path.join(request.doc_root, u"common", u"redirect.py")) |
| else: |
| return run_other(request, response, os.path.join(os.path.dirname(isomorphic_decode(__file__)), isomorphic_decode(handler) + u".py")) |
| else: |
| return |