Advanced#
This sheet contains slightly advanced concepts, (comparative to the others given in the tutorial).
Extending the Router#
The classes on which the framework is based are highly customisable. You can customise them to meet your specific needs.
The Router class actually has a lot. To extend it, you can customise as per your need. For instance, consider that you need a vary fast url-router(C-implementation or Cythonised one) due to some reason.
Then, remember that it must your Router must have a handle method, that accepts a request parameter, and must return an instance of structure.Response.
For more info, see :class:willpyre.Router.
Custom error responses#
If your application is a JSON based API, then you might not want to have errors in the format of test/html. Or, if you are creating a web app, then you might not want to have a plain, default response. Willpyre gives you that liberty. You have to change the config of :class:App.
from willpyre import Router, App, structure, json
router = Router()
# Do your stuff.
class My404Response(structure.Response404):
def __init__(self):
self.status = 404
self.content_type = "application/json"
self.body = json.dumps({"error": 404})
app = App(router)
app.config["router_config"]["404Response"] = My404Response()
Startup and Shutdown tasks#
You can schedule tasks to be performed on startup and shutdown. Eg:
from willpyre import Router, App
router = Router()
# Some routing..
def startup_task():
print("Started")
def shutdown_task():
print("Shutting down.....")
app = App(router)
app.config["startup"] = startup_task
app.config["shutdown"] = shutdown_task
These will be performed when your app starts and when gracefully shuts down. If the process recieves a termination signal(Ctrl +C), then your server, (Hypercorn, Uvicorn or Daphne) will send a shutdown event message which will trigger the shutdown task.