Watson - Dev¶
Work with WSGI applications locally.
Build Status¶
Installation¶
pip install watson-dev
Testing¶
Watson can be tested with py.test. Simply activate your virtualenv and run python setup.py test
.
Contributing¶
If you would like to contribute to Watson, please feel free to issue a pull request via Github with the associated tests for your code. Your name will be added to the AUTHORS file under contributors.
Table of Contents¶
Reference Library¶
watson.dev.middleware¶
-
class
watson.dev.middleware.
StaticFileMiddleware
(app, initial_dir=None)[source]¶ A WSGI compatibile Middleware class that allows content to be retrieved from the directory that the __main__ is called from.
Example:
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b'Hello World!'] my_app = StaticFileMiddleware(app)
watson.dev.reloader¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # -*- coding: utf-8 -*-
import sys
import os
import time
import _thread as thread
_mtimes = {}
def code_changed():
global _mtimes
filenames = [getattr(m, "__file__", None) for m in sys.modules.values()]
for filename in filter(None, filenames):
if filename.endswith(".pyc") or filename.endswith(".pyo"):
filename = filename[:-1]
if filename.endswith("$py.class"):
filename = filename[:-9] + ".py"
if not os.path.exists(filename):
continue
stat = os.stat(filename)
mtime = stat.st_mtime
if filename not in _mtimes:
_mtimes[filename] = mtime
continue
if mtime != _mtimes[filename]:
_mtimes = {}
return True
return False
def main(main_func, args=None, kwargs=None, script_dir=None):
import __main__
thread.start_new_thread(main_func, args or (), kwargs or {})
while True:
if code_changed():
script = __main__.__file__
print('\nCode changed, reloading...\n')
if script_dir:
script = os.path.join(script_dir, script)
script = os.path.abspath(script)
python = sys.executable
args = [script] + sys.argv[1:]
os.execl(python, python, *args)
sys.exit(3)
try:
time.sleep(1)
except KeyboardInterrupt:
print('\nTerminated.')
sys.exit(0)
|
watson.dev.server¶
-
watson.dev.server.
make_dev_server
(app, host='0.0.0.0', port=8000, noreload=False, script_dir=None, public_dir=None)[source]¶ A simple local development server utilizing the existing simple_server module, but allows for serving of static files.
Never use this in production. EVER.
Example:
def my_app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello World!</h1>'] if __name__ == '__main__': make_dev_server(my_app)
Parameters: - app – A WSGI callable
- host – The host to bind to
- port – The port
- noreload – Whether or not to automatically reload the application when source code changes.