71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
import os
|
|
import wsgi_intercept
|
|
|
|
|
|
class BaseInstalledApp(object):
|
|
def __init__(self, app, host, port=80, script_name='',
|
|
install=None, uninstall=None, proxy=None):
|
|
self.app = app
|
|
self.host = host
|
|
self.port = port
|
|
self.script_name = script_name
|
|
self._install = install or (lambda: None)
|
|
self._uninstall = uninstall or (lambda: None)
|
|
self._hits = 0
|
|
self._internals = {}
|
|
self._proxy = proxy
|
|
|
|
def __call__(self, environ, start_response):
|
|
self._hits += 1
|
|
self._internals = environ
|
|
return self.app(environ, start_response)
|
|
|
|
def success(self):
|
|
return self._hits > 0
|
|
|
|
def get_internals(self):
|
|
return self._internals
|
|
|
|
def install_wsgi_intercept(self):
|
|
wsgi_intercept.add_wsgi_intercept(
|
|
self.host, self.port, self.factory, script_name=self.script_name)
|
|
|
|
def uninstall_wsgi_intercept(self):
|
|
wsgi_intercept.remove_wsgi_intercept(self.host, self.port)
|
|
|
|
def install(self):
|
|
if self._proxy:
|
|
os.environ['http_proxy'] = self._proxy
|
|
self._install()
|
|
self.install_wsgi_intercept()
|
|
|
|
def uninstall(self):
|
|
if self._proxy:
|
|
del os.environ['http_proxy']
|
|
self.uninstall_wsgi_intercept()
|
|
self._uninstall()
|
|
|
|
def factory(self):
|
|
return self
|
|
|
|
def __enter__(self):
|
|
self.install()
|
|
return self
|
|
|
|
def __exit__(self, *args, **kwargs):
|
|
self.uninstall()
|
|
|
|
|
|
def installer_class(module=None, install=None, uninstall=None):
|
|
if module:
|
|
install = install or getattr(module, 'install', None)
|
|
uninstall = uninstall or getattr(module, 'uninstall', None)
|
|
|
|
class InstalledApp(BaseInstalledApp):
|
|
def __init__(self, app, host, port=80, script_name='', proxy=None):
|
|
BaseInstalledApp.__init__(
|
|
self, app=app, host=host, port=port, script_name=script_name,
|
|
install=install, uninstall=uninstall, proxy=proxy)
|
|
|
|
return InstalledApp
|