A http server with fluent interface decorators, and plain text configuration
Project description
HTTP Server
Server which runs Hyper Text Transport Protocol
Check it out at PYPI
Server parameters
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
Download
pip install ihttpy
Fluent Example
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()
Running the tests
python3 -m unittests discover tests/
Plaintext 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.
Source Distribution
Built Distribution
File details
Details for the file ihttpy-2.1.0.tar.gz
.
File metadata
- Download URL: ihttpy-2.1.0.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f391b7bd07c5d1ad61192f3ecccdff7538cfab7f9a5ee6609c5bb67d0278b93 |
|
MD5 | 6c38288fee375226db46fe7bdfa1341e |
|
BLAKE2b-256 | c03492be29400c2598038aac3ae64adaa64b8bdb4c32a334b416df77a59ff630 |
File details
Details for the file ihttpy-2.1.0-py3-none-any.whl
.
File metadata
- Download URL: ihttpy-2.1.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b19827eed81dd0f857634dd4b9932903375d8ae120531d876d2b299548376c6 |
|
MD5 | a07177c5cd3754203c7a6d093ea7067f |
|
BLAKE2b-256 | 21877b0b65d463d58d48f056c17b5798329414f74b17b733b95b08accceec7cd |