#!/usr/bin/env python
import subprocess
import os
from os import path

from twisted.internet import reactor
from twisted.web      import proxy, server, resource

"""
Starts the app listening on localhost, for local development.

This script launches the Django and Tornado servers, then runs a reverse proxy
which serves to both of them.  After it's all up and running, browse to

    http://localhost:9991/

Note that, while runserver and runtornado have the usual auto-restarting
behavior, the reverse proxy itself does *not* automatically restart on changes
to this file.
"""

proxy_port = 9991
proxy_host = 'localhost:%d' % (proxy_port,)

os.chdir(path.join(path.dirname(__file__), '..'))

procs = []
for cmd in ['python manage.py runserver  localhost:9992',
            'python manage.py runtornado localhost:9993']:
    procs.append(subprocess.Popen(cmd, shell=True))

class Resource(resource.Resource):
    def getChild(self, name, request):
        request.requestHeaders.setRawHeaders('X-Forwarded-Host', [proxy_host])

        if request.uri in ['/get_updates', '/api/v1/get_messages']:
            return proxy.ReverseProxyResource('localhost', 9993, '/'+name)

        return proxy.ReverseProxyResource('localhost', 9992, '/'+name)

reactor.listenTCP(proxy_port, server.Site(Resource()), interface='127.0.0.1')

try:
    reactor.run()
finally:
    for proc in procs:
        proc.terminate()

#!/usr/bin/env python
import subprocess
import os
from os import path

from twisted.internet import reactor
from twisted.web      import proxy, server, resource

"""
Starts the app listening on localhost, for local development.

This script launches the Django and Tornado servers, then runs a reverse proxy
which serves to both of them.  After it's all up and running, browse to

    http://localhost:9991/

Note that, while runserver and runtornado have the usual auto-restarting
behavior, the reverse proxy itself does *not* automatically restart on changes
to this file.
"""

proxy_port = 9991
proxy_host = 'localhost:%d' % (proxy_port,)

os.chdir(path.join(path.dirname(__file__), '..'))

procs = []
for cmd in ['python manage.py runserver  localhost:9992',
            'python manage.py runtornado localhost:9993']:
    procs.append(subprocess.Popen(cmd, shell=True))

class Resource(resource.Resource):
    def getChild(self, name, request):
        request.requestHeaders.setRawHeaders('X-Forwarded-Host', [proxy_host])

        if request.uri in ['/json/get_updates', '/api/v1/get_messages']:
            return proxy.ReverseProxyResource('localhost', 9993, '/'+name)

        return proxy.ReverseProxyResource('localhost', 9992, '/'+name)

reactor.listenTCP(proxy_port, server.Site(Resource()), interface='127.0.0.1')

try:
    reactor.run()
finally:
    for proc in procs:
        proc.terminate()

Update for new get_updates URL