Skip to main content

a python library for building web applications

Project description

Pyonir Web Framework

A static website generator and flat file web framework written in Python.

Install Pyonir

From pypi:

pip install pyonir

Create a new project

Manually create a main.py file from an empty directory with the following values.

Example

your_project/
    └─ main.py

Example main.py file

import pyonir
app = pyonir.init(__file__)

app.run()

or scaffold a demo web application from the cli:

> pyonir-create

This will generate the following directory structure

your_project/
    ├─ backend/
    ├─ contents/
    ├─ frontend/
    └─ main.py

Configure Contents

Site content is stored in special markdown files within the contents directory. Each sub directory within the contents folder represents the content type for any contained markdown files.

Content Types

Organizes a collection of files by specified types in a directory.

Configs: contents/configs

Represents mutable site configurations that can change while app is running.

Pages: contents/pages

Represents routes accessible from a URL. A file from contents/pages/about.md can be accessed from a URL of https:0.0.0.0/about All pages files are served as text/html resources. You can configure your pages to be serverd from a different directory by overriding the Site.PAGES_DIRNAME default value.

API: contents/api

Files within this folder represents API endpoints. Files here can define the response of the request and call python functions. A file from contents/api/new_post.md can be accessed from a URL of https:0.0.0.0/api/new_post. You can configure your api pages to be serverd from a different directory by overriding the Site.API_DIRNAME default value.

Generate static site

import pyonir
app = pyonir.init(__file__)

app.generate_static_website()

Run Web server

Pyonir uses the starlette webserver by default.

import pyonir
app = pyonir.init(__file__)

app.run(routes=[])

Configure Virtual Page Routes

Virtual routes

A virtual route can generate a page from aggregated data sources and giving more control on request response. Virtual routes can be defined within the contents/pages directory within a hidden .routes.md file. virtual routes can return the following response types:

  • HTML response
  • JSON response
  • WebSocket
  • Sever-Sent Events
  • Static file

JSON response

any pattern that begins with the default API url are automatically returning JSON.

/api/some_data/{data_id:str}: 
    GET.response: application/json
    data: hello {request.path_param.data_id} world

results from request http:0.0.0.0/api/some_data/a3b3c3

{
  "data": "hello a3b3c3 world"
}

HTML response

The page attribute value will be passed into the page request. The page url and slug are auto set from the request. Any scalar values will be passed as the page contents value. Only GET requests permitted by default.

/products/tags: 
    page:
        title: Products grouped by tags.
        contents: Listing of all products grouped by tags.
        template: product-tags.html
        entries: $dir/../products?groupby=tags

Server-sent events

/api/sse/user/notifications:
    GET.call: reference.path.to.sse.notifications.controller
    GET.headers.accept: text/event-stream

Websockets

/api/ws/user/chat:
    GET.call: path/to/websocket.py#module
    GET.headers.accept: text/event-stream

Configure Route Controllers

Configuration based routing defined at startup. All routes live in one place — easier for introspection or auto-generation. This allows flexibility for functions to be access from virtual routes and registered at startup.

def find_user(user_id: int):
    # perform logic using the typed arguments passed to this function on request
    pass

routes: list[PyonirRoute] = [
    ['/user/{user_id:int}', find_user, ["GET"]],
]

Configure Frontend

The frontend directory organizes your application themes. Each theme uses jinja template logic to generate data into HTML. Theme templates are stored in frontend/themes/{THEME_NAME}/layouts directory.

Configure Static Assets

...

Configure Plugins

...

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

pyonir-0.0.23.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

pyonir-0.0.23-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file pyonir-0.0.23.tar.gz.

File metadata

  • Download URL: pyonir-0.0.23.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyonir-0.0.23.tar.gz
Algorithm Hash digest
SHA256 8fd3d683e8100c0594724f8e8dbc4fe1af7ff262660d426ce4cdde272183e209
MD5 6525ec8cc804e83368bc35c9e15c2f5b
BLAKE2b-256 f8fbf7fad4c8b1309332c9d5d8694ba6fb4e87508494f0c5b82da340ded91251

See more details on using hashes here.

File details

Details for the file pyonir-0.0.23-py3-none-any.whl.

File metadata

  • Download URL: pyonir-0.0.23-py3-none-any.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyonir-0.0.23-py3-none-any.whl
Algorithm Hash digest
SHA256 aba1b8bba3a280015e4c9f59e744da9c0f037f1a161fc217f75191ff0677e43b
MD5 c0bc6579a8538502a79389d2fe14c29e
BLAKE2b-256 29596cebf9717a39aab0ea668b997d6517790d492e1b0e77e9ab979087f4a196

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