48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
import os
|
|
import pkgutil
|
|
import sys
|
|
|
|
|
|
def _wrap_flask(f):
|
|
if f is None:
|
|
return
|
|
|
|
from packaging.version import Version, InvalidVersion
|
|
from .cs50 import _formatException
|
|
|
|
try:
|
|
if Version(f.__version__) < Version("1.0"):
|
|
return
|
|
except InvalidVersion:
|
|
return
|
|
|
|
if os.getenv("CS50_IDE_TYPE") == "online":
|
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
|
|
_flask_init_before = f.Flask.__init__
|
|
|
|
def _flask_init_after(self, *args, **kwargs):
|
|
_flask_init_before(self, *args, **kwargs)
|
|
self.wsgi_app = ProxyFix(
|
|
self.wsgi_app, x_proto=1
|
|
) # For HTTPS-to-HTTP proxy
|
|
|
|
f.Flask.__init__ = _flask_init_after
|
|
|
|
|
|
# If Flask was imported before cs50
|
|
if "flask" in sys.modules:
|
|
_wrap_flask(sys.modules["flask"])
|
|
|
|
# If Flask wasn't imported
|
|
else:
|
|
flask_loader = pkgutil.get_loader("flask")
|
|
if flask_loader:
|
|
_exec_module_before = flask_loader.exec_module
|
|
|
|
def _exec_module_after(*args, **kwargs):
|
|
_exec_module_before(*args, **kwargs)
|
|
_wrap_flask(sys.modules["flask"])
|
|
|
|
flask_loader.exec_module = _exec_module_after
|