Run aiohttp server in subprocess ,automatically reload while dependencies/statics modified , debugtoolbar included. - GoodManWEN/aiohttp-debugmode
Project description
aiohttp-debugmode
This package helps you easily start a aiohttp develpment server in subprocess ,everytime dependencies/statics are modified ,daemon process will automatically reload server thus helps you automation your workflow. Aiohttp-debugtoolbar included.
- Based on watchdog.
- Works on Python3.7+
- aiohttp-debugtoolbar included ,thus you can get a full report of traceback if exception raised.
(* Screenshot from aio-libs/aiohttp-debugtoolbar *)
Install
pip install aiohttp-debugmode
Usage
quick_start.py
# here's a demo script from aiohttp.doc\quickstart
from aiohttp import web
routes = web.RouteTableDef()
@routes.get('/')
async def hello(request):
return web.Response(text="Hello, world")
app = web.Application()
app.add_routes(routes)
web.run_app(app)
Simply modify severl lines like this
# Add import
from aiohttp_debugmode import Debugmode
# Let Debugmode take over control of run_app
Debugmode.run_app(app)
By default ,templates
& static
floder is added to observing list of watchdog. You can manually set observe file/floder using append_observe.
Debugmode.append_observe(['other/login.html' ,'assets'])
If you need some kind of process when a aiohttp server starts up:
def stup():
... # do something
Debugmode.on_startup(stup) # accepts callable.
Examples
aiohttp-debugmode with Vue
Assume that you are usiung vue-cli and have a directory structure like this:
...
├── Project
│ ├── static
│ ├── templates
│ ├── app.py # aiohttp app entry
│ └── frontend # vue frontend folder
│ ├── dist # webpack output directory
│ │ ├── css
│ │ ├── js
│ │ └── index.html
│ ├── node_modules
│ │ └── ...
│ ├── src # vue source
│ │ └── ...
│ └── vue.config.js
│ └── ...
Assume that webpack outputs built file into /Project/frontend/dist
floder while your aiohttp app collects templates & statics from /Project/templates
& /Project/static
folder.
Here's a sample code:
from aiohttp import web
from aiohttp_debugmode import Debugmode
import aiohttp_jinja2
# Pretended doing some tempate rander stuff.
# @aiohttp_jinja2.template('index.html')
async def hello(request):
return web.Response(text="Randered.")
# Debugtoolbar included thus you can get
# a full report of traceback.
async def error(request):
raise Exception('Testing.')
app = web.Application()
app.router.add_route('GET', '/', hello)
app.router.add_route('GET', '/err', error)
app.add_routes([web.static('/', 'static')])
def initialize():
import shutil , os , glob
# You may use os.path.abspath to get absolute path in some situation.
if os.path.exists('frontend\dist\index.html'):
shutil.move('frontend\dist\index.html' , 'templates')
try:
shutil.rmtree(filepath)
os.mkdir(filepath)
for filepath in glob.glob('frontend\dist\*'):
shutil.move(filepath , 'static')
except Exception as e:
raise e
Debugmode.append_observe(['frontend\dist']) # backslashes on windows.
Debugmode.on_startup(initialize)
# Debugmode takes over run_app instead of web.run_app
Debugmode.run_app(app , host = '127.0.0.1' , port = 8080)
Thus every time you run npm run build
,debugmode will catch file modified event ,init file directory and restart aiohttp server with new generated html/js/css file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aiohttp_debugmode-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0455e1b2bee958da6a34f1b510502240be156ad4a6149e4d6bbd2537c27f487 |
|
MD5 | de4c757d02429397118a00fd8ed7bced |
|
BLAKE2b-256 | 264658712e7a98229ddfdc040368bb9b339d5d7e2791785e27064ef7fe9137cb |