HTTPS and HTTP server framework
Project description
Slinn is a HTTPS and HTTP server framework
Create project
Unix-like (Linux, MacOS, FreeBSD...):
python3 -m slinn create helloworld
cd helloworld
venv/bin/python manage.py create localhost host=localhost host=127.0.0.1
venv/bin/python manage.py run
Windows:
py -m slinn create helloworld
cd helloworld
venv\Scripts\activate
py manage.py create localhost host=localhost host=127.0.0.1
py manage.py run
Simple example
# localhost/app.py
from slinn import Dispatcher, AnyFilter, LinkFilter, HttpResponse, HttpAPIResponse
dp = Dispatcher('localhost', '127.0.0.1')
@dp(LinkFilter('api'))
def api(request):
return HttpAPIResponse('{"status": "ok"}')
@dp(AnyFilter)
def helloworld(request):
return HttpResponse('Hello world!')
Excepted output
$ venv/bin/python manage.py run
Loading config...
Apps: firstrun
Debug mode enabled
Smart navigation enabled
Starting server...
HTTP server is available on http://[::1]:8080/
To config project you should edit ./project.json
To config app you should edit ./%app%/config.json
Create classic project
Unix-like (Linux, MacOS, FreeBSD...):
mkdir helloworld
cd helloworld
python3 -m venv venv
venv/bin/activate
Windows:
mkdir helloworld
cd helloworld
python3 -m venv venv
venv\Scripts\activate
You should add this code to example example.py
Server(dp).listen(Address(8080))
then write python example.py
Functions:
from slinn import Server
server = Server(*dispatchers: list[Dispatcher], ssl_cert: str=None, ssl_key: str=None, delay=0.05) # Main class to run server
server.address() -> str # Returns info str
server.reload(*dispatchers: list[Dispatcher]) # Reloads server
server.listen(address: Address) # Start listening address
Server(dp_api, dp_gui, ssl_cert='fullchain.pem', ssl_key='privkey.pem')
from slinn import Address
address = Address(port: int, host: str=None) # A structure containing a port and a host; converts dns-address to ip-address
Address(443, 'google.com')
from slinn import Dispatcher
dispatcher = Dispatcher(hosts: list=None) # A class that contain many handlers
Dispatcher('localhost', '127.0.0.1', '::1')
# To add handler into dispatcher
@dispatcher(filter: Filter)
def handler(request: Request):
...
# handler should return HttpResponse-based object
from slinn import Filter, LinkFilter, AnyFilter
_filter = Filter(filter: str, methods: list[str]=None) # This class is used to choose match handler by link; uses regexp
_filter.check(text: str, method: str) -> bool # Checks for a match by filter
_filter.size(text: str, method: str) -> int # Special method for Smart Navigation
Filter('/user/.+/profile.*')
# LinkFilter inherits from Filter
LinkFilter('user/.+/profile')
# AnyFilter as same as Filter('.*')
from slinn import HttpResponse, HttpRedirect, HttpAPIResponse, HttpJSONResponse, HttpJSONAPIResponse
http_response = HttpResponse(payload, data: list[tuple]=None, status: str='200 OK', content_type: str='text/plain') # This class is used to convert some data to HTTP code
http_response.set_cookie(key: str, value)
http_response.make(type: str='HTTP/2.0') -> str
HttpResponse('<h1>Hello world</h1>', content_type='text/html')
# HttpAPIResponse inherits from HttpResponse
# HttpAPIResponse sets Access-Control-Allow-Origin to '*'
HttpAPIResponse('{"status": "ok", "username": "mrybs"}')
# HttpRedirect inherits from HttpResponse
HttpRedirect(location: str)
HttpRedirect('slinn.miotp.ru')
# HttpJSONResponse for responding JSON
HttpJSONResponse(**payload)
HttpJSONResponse(status='this action is forbidden', _status='403 Forbidden')
# HttpJSONAPIResponse is like HttpJSONResponse, but it sets Access-Control-Allow-Origin to '*'
HttpJSONAPIResponse(code=43657, until=1719931149)
from slinn import Request
request = Request(http_data: str, client_address: tuple[str, int]) # This structure is used in the dispatcher`s handler
# Attributes
request.ip, request.port # Client`s IP and port
request.method # HTTP method
request.version # HTTP version
request.full_link # Full link(path and params)
request.host # Requested host
request.user_agent # Client`s user agent
request.accept # maybe supported technologies
request.encoding # Supported encodings
request.language # Client`s language
request.link # Link(only path)
request.args # GET args
request.cookies # All saved cookies
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
slinn-2.1.2.tar.gz
(15.6 kB
view details)
File details
Details for the file slinn-2.1.2.tar.gz.
File metadata
- Download URL: slinn-2.1.2.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65f18f5c51e6b9fc46c6af77226db73e49d6d8b20732d79c34d48a67e7a91752
|
|
| MD5 |
abab1002e30f762284062769331a2945
|
|
| BLAKE2b-256 |
96670fb725cacd7e6d319ceb362f43b99ac590cfea9b17116e15acd1b06589a9
|