Skip to content

Rizzler creates a parallel front-end dev-server using ViteJS for ASGI Frameworks

License

Notifications You must be signed in to change notification settings

aekasitt/rizzler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rizzler

Package vesion Format Python version License Code size Top Languages Repository size Last commit Rizzler Banner

Installation

Install using pip

$ pip install rizzler
> ...

Usage

Integrate with lifespan protocol.

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.requests impor Request
from fastapi.responses import HTMLResponse
from rizzler import RizzleTemplates, Rizzler
from typing import AsyncIterator, List, Tuple

@Rizzler.load_config
def rizzler_settings() -> List[Tuple[str, str]]:
  return [
    ("command", "pnpm"),
    ("framework", "vue")
  ]

@asynccontextmanager
async def lifespan(_: FastAPI) -> AsyncIterator[None, None]:
  await Rizzler.serve()
  yield
  Rizzler.shutdown()

app: FastAPI = FastAPI(lifespan=lifespan)
templates: RizzleTemplates = RizzleTemplates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def index(request: Request) -> HTMLResponse:
  return templates.TemplateResponse("index.html", {"request": request})

Templating

RizzleTemplates is an extension on top of Jinja2Templates class found under starlette However, has two overriding methods that must be placed inside the template HTML-file as such:

<!DOCTYPE html>
<html>
  <head><!-- ... --></head>
  <body>
    {{ vite_hmr_client() }}
    {{ vite_asset('pages/main.js') }}
  </body>
</html>

Build

You can run the following command once you are done customizing the front-end code under pages/ directory to your liking.

rzl build
Example outputs for `rzl build`
$ rzl build
> INFO     ⚡Building Rizzler front-end…
> INFO
> INFO     > [email protected] build /Users/user/workspaces/rzl-react
> INFO     > vite build                                       
> INFO                                                       
> INFO     vite v5.3.3 building for production...           
> INFO     transforming...                                 
> INFO     ✓ 32 modules transformed.                      
> INFO     rendering chunks...                           
> INFO     computing gzip size...                       
> INFO     dist/rizz.svg    4.13 kB │ gzip:  2.14 kB   
> INFO     dist/rizz.css    1.39 kB │ gzip:  0.72 kB  
> INFO     dist/rizz.js   142.63 kB │ gzip: 45.74 kB 
> INFO     ✓ built in 390ms

Now you can stop using RizzleTemplates and revert back to serving front-end with Jinja2Templates as such

#!/usr/bin/env python3
from fastapi import FastAPI
from fastapi.requests import Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="dist")

@app.get("/", response_class=HTMLResponse)
def index(request: Request) -> HTMLResponse:
  return templates.TemplateResponse("index.html", {"request": request})

app.mount("/", StaticFiles(directory="dist"), name="dist")

Now you have a production front-end to go with your FastAPI application when you need. There will probably be bugs when it comes to relative versus absolute paths in the future. But this is good enough for many prototyping use-case and with a bit of tinkering, can replace

Dependencies and Disclosures

This library relies on the following Python dependencies.

  • click - Python composable command line interface toolkit GitHub PyPI Docs
  • jinja2 - A very fast and expressive template engine GitHub PyPI Docs
  • markupsafe - Safely add untrusted strings to HTML/XML markup GitHub PyPI Docs
  • pydantic - Data validation using Python type hints GitHub PyPI Docs
  • PyYAML - Full-featured YAML framework for the Python GitHub PyPI Docs
  • rich - Rich text and beautiful formatting in the terminal GitHub PyPI Docs
  • starlette - Lightweight ASGI framework / toolkit GitHub PyPI Docs
  • tree-sitter - An incremental parsing system for programming tools GitHub PyPI Docs
    • tree-sitter-html GitHub PyPI
    • tree-sitter-javascript GitHub PyPI

Contributions

Prerequisites

I recommend using pyenv and uv as the preferred tools to managing this project.

  • pyenv - Simple Python version management GitHub PyPI OpenCollective
  • uv - An extremely fast Python package and project manager, written in Rust. GitHub PyPI Uv

Setup development environment

To contribute to the project, fork the repository and clone to your local device and development dependencies including four extra libraries not included in final builds as such: Alternatively, run the following command on your terminal to do so:

uv sync --dev
  • mypy Optional static typing for Python GitHub PyPI Docs
  • ruff An extremely fast Python linter and code formatter, written in Rust. GitHub PyPI Docs

Acknowledgements

License

This project is licensed under the terms of the MIT license.

About

Rizzler creates a parallel front-end dev-server using ViteJS for ASGI Frameworks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages