Skip to main content

It's a robust webserver (http/ws) for hosting htag apps on the web (a process by user)

Project description

htagweb

Test

Package version

This module exposes htag's runners for the web. It's the official runners to expose htag apps on the web, to handle multiple clients/session in the right way.

Runner

It's the real runner to expose htag apps in a real production environment, and provide all features, while maintaining tag instances like classical/desktop htag runners.

All htag apps are runned in its own process, and an user can only have an instance of an htag app. (so process are recreated when query params changes) Process live as long as the server live

Features

  • based on starlette
  • use session
  • compatible with uvloop !!!
  • compatible with multiple gunicorn/uvicorn/webworkers !!!
  • compatible with tag.update()
  • works on gnu/linux, ios or windows (from py3.8 to py3.11)! (not py3.7 anymore ;-()
  • real starlette session available (in tag.state, and starlette request.session)
  • compatible with oauth2 authent ( authlib )
  • 'parano mode' (can aes encrypt all communications between client & server ... to avoid mitm'proxies on ws/http interactions)
  • auto reconnect websocket

Instanciate

Like a classical starlette'app :

from htagweb import Runner
from yourcode import YourApp # <-- your htag class

app=Runner( YourApp, ... )
if __name__=="__main__":
    app.run()

You can use the following parameters :

host (str)

The host to bind to. (default is "0.0.0.0")

port (int)

The port to bind to. (default is 8000)

debug (bool)

  • When False: (default) no debugging facilities
  • When True: use starlette debugger.

ssl (bool)

  • When False: (default) use "ws://" to connect the websocket
  • When True: use "wss://" to connect the websocket

non-sense in http_only mode.

parano (bool)

  • When False: (default) interactions between front/ui and back are in clear text (json), readable by a MITM.
  • When True: interactions will be encrypted (less readable by a MITM, TODO: will try to use public/private keys in future)

this parameter is available on app.handle(request, obj, ... parano=True|False ...) too, to override defaults !

http_only (bool)

  • When False: (default) it will use websocket interactions (between front/ui and back), with auto-reconnect feature.
  • When True: it will use http interactions (between front/ui and back). But "tag.update" feature will not be available.

this parameter is available on app.handle(request, obj, ... http_only=True|False ...) too, to override defaults !

timeout_interaction (int)

It's the time (in seconds) for an interaction (or an initialization) for answering. If the timeout happens : the process/instance is killed. By default, it's 60 seconds (1 minute).

timeout_inactivity (int)

It's the time (in seconds) of inactivities, after that : the process is detroyed. By default, it's 0 (process lives as long as the server lives).

IMPORTANT : the "tag.update" feature doesn't reset the inactivity timeout !

to add an endpoint (add_route)

Example to add a static endpoint :

async def serve(req):
    return open("...","r").read()

app=Runner( App, debug=False, ssl=True )
app.add_route("/my.css", serve)

Example to add another htag app on another endpoint :

async def serve(req):
    return await req.app.handle(req, App2 )

app=Runner( App, debug=False, ssl=True )
app.add_route("/my_other_app", serve)

Roadmap / futur

  • more unittests !!!!!!!!!!!!!!!!
  • better logging !!!!!!!!!!!!!!!!
  • parano mode : use public/private keys ?

Examples

A "hello world" could be :

from htag import Tag

class App(Tag.div):
    def init(self):
        self<= "hello world"

from htagweb import Runner
Runner( App ).run()

or, with gunicorn (in a server.py file, as following):

from htag import Tag

class App(Tag.div):
    def init(self):
        self<= "hello world"

from htagweb import Runner
app=Runner( App )

and run server :

gunicorn -w 4 -k uvicorn.workers.UvicornH11Worker -b localhost:8000 --preload server:app

See a more advanced example in examples folder

python3 examples/main.py

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

htagweb-0.30.4.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

htagweb-0.30.4-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file htagweb-0.30.4.tar.gz.

File metadata

  • Download URL: htagweb-0.30.4.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.2 Linux/6.5.0-1021-azure

File hashes

Hashes for htagweb-0.30.4.tar.gz
Algorithm Hash digest
SHA256 d90c9c6a54f8f83daca7350c56275d8c357a57ab2fac11b8f7bba2421c26f1d4
MD5 6050bd749f9f2b640f48e4684fa43242
BLAKE2b-256 a470858314de3c1786cb0d92192724f0ab933a4a1d62b4791b56fb689bd74abb

See more details on using hashes here.

File details

Details for the file htagweb-0.30.4-py3-none-any.whl.

File metadata

  • Download URL: htagweb-0.30.4-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.2 Linux/6.5.0-1021-azure

File hashes

Hashes for htagweb-0.30.4-py3-none-any.whl
Algorithm Hash digest
SHA256 aa21d8a4c84389209159d6e61bd51d7badced77a80b481edb99df27aa15586de
MD5 3673a144e621dc02a0e3f63ef4559d4d
BLAKE2b-256 1c072fe4cc6af6d2669a61c1e7c8c6ecf23a1b82fa9e54b31bb03012d97aaf16

See more details on using hashes here.

Supported by

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