Server which runs Hyper Text Transport Protocol
Check it out at PYPI
config=ConfiguratorSpecify a configurator. UseFluentConfiguratorfor type hints orConfiguratorfor plain textloglevel=LogLevel.loggingChoose a logging or console form reportingrefresh_rate=0.1Socket connection refresh ratecache_max_size=4e9Max cache size
pip install ihttpyimport ...
config = FluentConfigurator()
@config.on(Method.GET).at('/')
def index(req: Request, srv: Server)
return Response(200, 'OK')
config._host = '0.0.0.0'
config._port = 8000
server = Server(config, loglevel=LogLevel.CONSOLE)
with server as s:
s.run()python3 -m unittests discover tests/-
rulesIs a map with regular language- use square braces for any match (same as .*? in re)
- type [
name] inside braces to set named group - use match names in found path
example:
query
"/[day]-[n]/[month]/[year]" : "/pictures/[year]/[month]/[day]/[n].pnglocalhost:8000/27-me/09/2000will display a photo/pictures/2000/09/27/me.pngif exists
-
hostChose server host- use
localhostto run locally
- use
-
portSpecify port for server to listen- default is
8000
- default is
-
error-pagesused by Errors class
if you want more handling control:
- specify
pathfield for static file response - use
handlerobject description assourceto choose handler pathpostname of function to handle POST requestgetname of function to handle GET request
- specify
headersfor additional headers to be added
-
static file response
localhost:8000/my_guest_bookurl"/my_guest_book": "tmp/my_guest_book.html",router will match this url and send file
tmp/my_guest_book.html -
custom GET handler for
localhost:8000/postsurl"/posts": { "handler": { "source": "handlers/my_guest_book.py", "get": "get_posts" } }this will start loaded
sourcehandler search for url and callget_postsfunction -
custom POST handler for
localhost:8000/posturl"/post": { "handler": { "source": "handlers/my_guest_book.py", "post": "handle_post" } }it will call
handle_postfunction fromsourcefound handler and process request in that module
Handlers should be added as modules with 1 or 2 functions (which are
configured if config.json as it was described in
here)
Its signature needs to be
def function(request: Request, server: Server) -> Response:
Here you can use Server and Request that is being processed
Request structure:
self.method- request method (GET/POST)self.target- urlself.version- HTTP versionself.headers- headers dictionaryself.body- request body
Use this properties as you need to process the request
If you want std.out as primary output use -l console
If you want file as output use -l logging
There is a logger.py for server info logging and debug, configure
LOGGER_PATH and LOG_DEBUG_PATH in defenitions.py
- Ruslan Sirazhetdinov - Project creator, UrFU Student
- Viktor Samun - UrFU Python headquaters
