Skip to main content

Minimal web backend framework

Project description

blite

  • minimal web backend framework

Usage

  • first step is to import the library and instantiate a Server object, 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)
  • 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 Allowed HTTP response
    • regex: bool which defaults to False
      • indicates that the route is specified as a regex pattern
    • allowOptions: bool which defaults to True
      • tells the framework if it should answer to OPTIONS requests for the given route
    • giveMethod: bool which defaults to False
      • if set to True, the framework will provide the callback function with the method used by the client
    • giveUri: bool which defaults to False
      • if set to True, the framework will provide the callback function with the uri called by the client
    • giveRequest: bool which defaults to False
      • 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) are

    • string, which is intended as response body
    • bytes, which is indended as response body
    • tuple(headers: dict, responseBody: Any)
    • dict, which is intended as json response body
    • Response
      • 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

blite-1.1.1.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

blite-1.1.1-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

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

Hashes for blite-1.1.1.tar.gz
Algorithm Hash digest
SHA256 77c252a839942b62ffb23f1c8e820454816846f62d206f6bcf89f6c001ffe936
MD5 1dc7c1df9f3ced5174f4398ef461f978
BLAKE2b-256 9931388328419affae6b8554a57bbea0a74b23e78e6e8de8ccfe555ea091b897

See more details on using hashes here.

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

Hashes for blite-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2006ce222ae454c1079fae74deca8bdb4f11f2fadec984ebe74ab8f09542eb0d
MD5 a911edfab2dc2aa2b7f44ef19b5ffefe
BLAKE2b-256 165530a2ef5f41a33971c870cda4641059108ae1193ed2c528f643f437e6eeca

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page