mirror of
https://github.com/marcus-alicia/iRedAdmin-Pro-SQL.git
synced 2026-05-26 15:13:38 +00:00
88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
"""
|
|
WSGI Utilities
|
|
(from web.py)
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
from . import httpserver
|
|
from . import webapi as web
|
|
from .net import validaddr
|
|
from .utils import intget, listget
|
|
|
|
|
|
def runfcgi(func, addr=("localhost", 8000)):
|
|
"""Runs a WSGI function as a FastCGI server."""
|
|
import flup.server.fcgi as flups
|
|
|
|
return flups.WSGIServer(func, multiplexed=True, bindAddress=addr, debug=False).run()
|
|
|
|
|
|
def runscgi(func, addr=("localhost", 4000)):
|
|
"""Runs a WSGI function as an SCGI server."""
|
|
import flup.server.scgi as flups
|
|
|
|
return flups.WSGIServer(func, bindAddress=addr, debug=False).run()
|
|
|
|
|
|
def runwsgi(func):
|
|
"""
|
|
Runs a WSGI-compatible `func` using FCGI, SCGI, or a simple web server,
|
|
as appropriate based on context and `sys.argv`.
|
|
"""
|
|
|
|
if "SERVER_SOFTWARE" in os.environ: # cgi
|
|
os.environ["FCGI_FORCE_CGI"] = "Y"
|
|
|
|
# PHP_FCGI_CHILDREN is used by lighttpd fastcgi
|
|
if "PHP_FCGI_CHILDREN" in os.environ or "SERVER_SOFTWARE" in os.environ:
|
|
return runfcgi(func, None)
|
|
|
|
if "fcgi" in sys.argv or "fastcgi" in sys.argv:
|
|
args = sys.argv[1:]
|
|
if "fastcgi" in args:
|
|
args.remove("fastcgi")
|
|
elif "fcgi" in args:
|
|
args.remove("fcgi")
|
|
|
|
if args:
|
|
return runfcgi(func, validaddr(args[0]))
|
|
else:
|
|
return runfcgi(func, None)
|
|
|
|
if "scgi" in sys.argv:
|
|
args = sys.argv[1:]
|
|
args.remove("scgi")
|
|
if args:
|
|
return runscgi(func, validaddr(args[0]))
|
|
else:
|
|
return runscgi(func)
|
|
|
|
server_addr = validaddr(listget(sys.argv, 1, ""))
|
|
if "PORT" in os.environ: # e.g. Heroku
|
|
server_addr = ("0.0.0.0", intget(os.environ["PORT"]))
|
|
|
|
return httpserver.runsimple(func, server_addr)
|
|
|
|
|
|
def _is_dev_mode():
|
|
# Some embedded python interpreters won't have sys.arv
|
|
# For details, see https://github.com/webpy/webpy/issues/87
|
|
argv = getattr(sys, "argv", [])
|
|
|
|
# quick hack to check if the program is running in dev mode.
|
|
if (
|
|
"SERVER_SOFTWARE" in os.environ
|
|
or "PHP_FCGI_CHILDREN" in os.environ
|
|
or "fcgi" in argv
|
|
or "fastcgi" in argv
|
|
or "mod_wsgi" in argv
|
|
):
|
|
return False
|
|
return True
|
|
|
|
|
|
# When running the builtin-server, enable debug mode if not already set.
|
|
web.config.setdefault("debug", _is_dev_mode())
|