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 "htagweb" module provides two htag's "runners":

  • WebServer : for http only exchanges
  • WebServerWS : for http/ws exchanges (first rendering is on http)

Theses runners are a lot more complete than the defaults ones (WebHTTP & WebWS, provided nativly with htag) If you want to expose your HTag apps on the web : they are the only real/official solutions. Theses are a lot robust and IRL tested.

  • based on starlette
  • compatible with uvloop !!!
  • compatible with multiple gunicorn webworkers !!!
  • works on gnu/linux or windows !
  • Each user has its own process (for session, and htag app)
  • real starlette session available (in htag instance, and starlette request)
  • compatible with oauth2 authent ( authlib )
  • real process managments (interactions timeout, process expirations, ...)
  • NOT READY YET parano mode (can aes encrypt all communications between client & server ... to avoid mitm'proxies)

But be aware : it's production ready (at least, for me). It may not be free of bugs or security holes: USE AT YOUR OWN RISK. Htag and this module are youngs, and not widely tested (by experts/hackers). But due to the nature of htag, and theses runners, the risk may be minimal (only DoS), stealing datas may not be possible.

The concepts are the same :

  • one user can run only one instance of an htag app at one time (like in desktop mode).
  • All user processes are destroyed, after an inactivity timeout (not like in desktop mode, to preserve healthy of the webserver)
  • the "session" live as long as the server live (may not be a problem on many hosting service (where they shutdown the server after inactivities))

architecture

Here is a rapid map ;-)

Roadmap / futur

  • ? replace starlette by fastapi ?
  • better logging !!!!
  • more parameters (session size, etc ...)
  • parano mode
  • perhaps a bi-modal version (use ws, and fallback to http when ws com error)

Examples

A "hello world" could be :

from htag import Tag

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

from htagweb import WebServer # or WebServerWS
WebServer( App ).run()

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

from htag import Tag

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

from htagweb import WebServer # or WebServerWS
app=WebServer( 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

htagweb.HtagServer

This is a new beast, which is available in this module, and it's COMPLETLY different from ALL others htag runners. See it like an "htag server", very useful during development phase. In console, type :

$ python3 -m htagweb

htagweb will look for an "index:App" (a file index.py (wich contains a htag.Tag subclass 'App').), and if it can't found it : expose its own htag app to let user browse pythons files in the browser (/!\)

or

$ python3 -m htagweb main:App

if you want to point the "/" (home path) to a file main.py (wich contains a htag.Tag subclass 'App').

It will run a solid http/ws, with all htag/web features (and compatible with uvicorn/webworkers), and you can browse htag's apps in an html page.

It's not the official way to expose htag's apps on the web. But I'm currently exploring that (because it's a lot lot simpler ;-). Like ANY OTHERS htag runners : the live of a Htag's app is between the websocket open and the websocket close. So if you refresh the page : it will always rebuild all. Others runners avoid this, and make a lot of magics (on web side) to keep the same instance running for the same user.

BTW, it's the only "web runner", with WebWS, which works with the new Tag.update feature !

htagweb.AppServer

A new runner ;-) ... fully compatible with WebServer/WebServerWS/WebHTTP/WebWS ... but using same concepts as "HtagServer".

Except: tags should use "self.root.state" to maintain a state (because F5 will destroy/recreate instances)

TODO: doc will come later ... for tests only, now ;-)

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.7.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

htagweb-0.7.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: htagweb-0.7.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.2 Linux/5.15.0-1041-azure

File hashes

Hashes for htagweb-0.7.0.tar.gz
Algorithm Hash digest
SHA256 10e515765a760efe859634420eccf84150c2d6877d27231a8980a7a934637c65
MD5 76abf4c8c54a8da96cbb769ac1957499
BLAKE2b-256 4426bd0b5024ace28acffa34d4d2a433ab61d56567e2b1054f9b6a70751e9e4e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: htagweb-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.2 Linux/5.15.0-1041-azure

File hashes

Hashes for htagweb-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9bd3d1a9841d728af3e32c835025138d394861b6c1286a136b5f967964235798
MD5 59d3f61dec44bf14154cae1a916b729e
BLAKE2b-256 70f941b0743c0152a375473a6ea704311faa2321b6b0c143006a255ec760ac81

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