A http server with fluent interface decorators, and plain text configuration
Project description
HTTP Server
Server which runs Hyper Text Transport Protocol
Server parameters
config=CONFIG_PATH
Specify config file. Will be used in Configurator moduleloglevel=LogLevel.logging
Choose logging or console form reportingrefresh_rate=0.1
Socket connection refresh ratecache_max_size=4e9
Max cache size
Starting the server
python3 httpserver.py -c config.json --loglevel console
type -h
option to specify parameters
Running the tests
Simply run
python3 -m pytest tests_server.py
Config settings
-
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
Dynamic handlers configuration
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
Dynamic handlers usage
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
Logging and debug
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
Author
- Ruslan Sirazhetdinov - Project creator, UrFU Student
Supervisor
- Viktor Samun - UrFU Python headquaters
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.