Minimal web backend framework
Project description
blite
- minimal web backend framework
Usage
- first step is to import the library and instantiate a
Serverobject, passing the host and port to bind to the server
from blite import Server, renderFile
HOST = '0.0.0.0'
PORT = 8080
server = Server(HOST, PORT)
-
logging level can be set to:
- silent executing
server.setLogLevel(LogLevel.SILENT) - concise executing
server.setLogLevel(LogLevel.CONCISE) - verbose executing
server.setLogLevel(LogLevel.VERBOSE)
- silent executing
-
then define the routes, using the
@server.setRoute()decorator- the decorator requires a route parameter, which is the URI relative to the callback function
@server.setRoute('/')
def root():
return renderFile('index.html')
-
additional parameters can be given to the decorator, such as
methods: [str]which defaults to['GET']- methods must be specified to be accepted by the framework, otherwise it will answer to the client with a
405 Method Now AllowedHTTP response
- methods must be specified to be accepted by the framework, otherwise it will answer to the client with a
regex: boolwhich defaults toFalse- indicates that the route is specified as a regex pattern
allowOptions: boolwhich defaults toTrue- tells the framework if it should answer to
OPTIONSrequests for the given route
- tells the framework if it should answer to
giveMethod: boolwhich defaults toFalse- if set to True, the framework will provide the callback function with the method used by the client
giveUri: boolwhich defaults toFalse- if set to True, the framework will provide the callback function with the uri called by the client
giveRequest: boolwhich defaults toFalse- if set to True, the framework will provide the callback with the request bytes
kwargs: tuple(str)which defaults to()- if the tuple is populated, the framework will expect parameters to be given into the URI
- e.g.
http://HOST:PORT/URI?key=value&other_key=other_value
-
callback functions can either return someting or
None -
allowed return values (different from
None) arestring, which is intended as response bodybytes, which is indended as response bodytuple(headers: dict, responseBody: Any)dict, which is intended as json response bodyResponse- custom class which allows to set HTTP code, response headers and response body
-
for full usage example, take a look at the following code
Usage Example
from blite import Server, Response, renderFile, HttpCode, LogLevel
import json
HOST = '0.0.0.0'
PORT = 8080
server = Server(HOST, PORT)
# set the headers to be used in every HTTP response
server.setStandardHeaders({'Access-Control-Allow-Origin' : '*'})
# sets concise logging level
server.setLogLevel(LogLevel.CONCISE)
@server.setRoute('/')
def root():
renderFile('index.html')
@server.setRoute('/auth', kwargs=('wants_token'), methods=['POST'], allowOptions=False)
def authUser(requestBody, wants_token):
try:
jData = json.loads(requestBody.decode())
except:
return Response(code=HttpCode.NOT_FOUND)
uname = jData.get('username')
passwd = jData.get('password')
if uname is None or passwd is None:
return Response(code=HttpCode.NOT_FOUND)
authenticated = checkCredentials(uname, passwd) # function defined elsewhere
if not authenticated:
return 'failed'
if wants_token == 'true':
token = makeToken(uname, passwd) # function defined elsewhere
return {'token': token}
return 'ok'
@server.setRoute('/get_data', methods=['POST'], giveMethod=True)
def getData(requestBody, method):
try:
jData = json.loads(requestBody.decode())
except:
return Response(code=HttpCode.NOT_FOUND)
authenticated = checkAuthentication(jData) # function defined elsewhere
if not authenticated:
return Response(code=HttpCode.FORBIDDEN)
jsonData = fetchData() # function defined elsewhere, which returns a dict
return jsonData
@server.setRoute('^/get_image/[0-9a-zA-Z]*\.(jpg|png|jpeg)\/?$', regex=True, giveUri=True)
def getImage(uri):
imagePath = findImagePath(uri) # function defined elsewhere
imageBytes = getImageBytes(imagePath) # function defined elsewhere
if not imageBytes:
return Response(code=HttpCode.NOT_FOUND)
imageExtension = imagePath.split('.')[-1]
return {'Content-Type': f'image/{imageExtension}'}, imageBytes
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blite-1.1.1.tar.gz.
File metadata
- Download URL: blite-1.1.1.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77c252a839942b62ffb23f1c8e820454816846f62d206f6bcf89f6c001ffe936
|
|
| MD5 |
1dc7c1df9f3ced5174f4398ef461f978
|
|
| BLAKE2b-256 |
9931388328419affae6b8554a57bbea0a74b23e78e6e8de8ccfe555ea091b897
|
File details
Details for the file blite-1.1.1-py3-none-any.whl.
File metadata
- Download URL: blite-1.1.1-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2006ce222ae454c1079fae74deca8bdb4f11f2fadec984ebe74ab8f09542eb0d
|
|
| MD5 |
a911edfab2dc2aa2b7f44ef19b5ffefe
|
|
| BLAKE2b-256 |
165530a2ef5f41a33971c870cda4641059108ae1193ed2c528f643f437e6eeca
|