Server which runs Hyper Text Transport Protocol
Check it out at PYPI
config=Configurator
Specify a configurator. UseFluentConfigurator
for type hints orConfigurator
for plain textloglevel=LogLevel.logging
Choose a logging or console form reportingrefresh_rate=0.1
Socket connection refresh ratecache_max_size=4e9
Max cache size
pip install ihttpy
import ...
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/
-
rules
Is 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].png
localhost:8000/27-me/09/2000
will display a photo/pictures/2000/09/27/me.png
if exists
-
host
Chose server host- use
localhost
to run locally
- use
-
port
Specify port for server to listen- default is
8000
- default is
-
error-pages
used by Errors class
if you want more handling control:
- specify
path
field for static file response - use
handler
object description assource
to choose handler pathpost
name of function to handle POST requestget
name of function to handle GET request
- specify
headers
for additional headers to be added
-
static file response
localhost:8000/my_guest_book
url"/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/posts
url"/posts": { "handler": { "source": "handlers/my_guest_book.py", "get": "get_posts" } }
this will start loaded
source
handler search for url and callget_posts
function -
custom POST handler for
localhost:8000/post
url"/post": { "handler": { "source": "handlers/my_guest_book.py", "post": "handle_post" } }
it will call
handle_post
function fromsource
found 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