Skip to main content

Nebula is a lightweight Python backend framework with middleware and routing, built on top of the standard http.server module. It allows you to create web applications quickly with simple, decorator-based routing.

Project description

Nebula

PyPI Stars Contributors

Nebula is a lightweight Python backend framework with middleware and routing, built on top of the werkzeug module. It allows you to create web applications quickly with simple, decorator-based routing.

Features

  • Decorator-based Routing: Define your routes with simple and intuitive decorators.
  • Template Loading: Easily load and serve HTML templates from a designated directory.
  • Statics Loading: Easily load and serve files from designated directory.
  • Middleware Support: before_request and after_request hooks for flexible request handling.
  • Easy to Use: Get a server up and running in just a few lines of code.

Installation

Install Nebula from PyPI:

pip install nebula-core

or clone and install from GitHub.

git clone https://github.com/VxidDev/nebula.git
cd nebula
pip install .

Usage

Here's a basic example of creating a simple web server with Nebula.

main.py:

from werkzeug.wrappers import Response

from nebula import Nebula 
from nebula.utils import jsonify, init_static_serving , load_template , render_template , init_template_renderer , render_template_string
from pathlib import Path 

app = Nebula("localhost", 8000, False)
app.templates_dir = Path(__file__).resolve().parent / "templates"
app.statics_dir = Path(__file__).resolve().parent / "statics"

init_static_serving(app, "statics")
init_template_renderer(app)

jinja_template = """
    <h1>{{ APP.host + ":" + APP.port|string }}</h1>
"""

@app.route("/" , methods=["GET" , "POST"])
def main(request):
    if request.method == "POST":    
        data = request.get_json()

        return jsonify({"greet": f"Hi, {data.get('name', 'default')}!"})

    return Response(load_template(app, "index.html"), 200, content_type="text/html")

@app.route("/greet/<name>")
def greet(request, name):
    return Response(f"Hi, {name}!", 200)

@app.route("/fruits")
def jsonTest(request):
    return jsonify({
        "fruits": {
            "apples": 6,
            "pears": 10,
            "mangos": 9
        } 
    })

@app.error_handler(405)
def method_not_allowed(request):
    return Response("<h1>Cant do that :[</h1>", 405, headers={"Content-Type": "text/html"})

@app.error_handler(404)
def not_found(request):
    return Response("<h1>Cant find that :(</h1>", 404, headers={"Content-Type": "text/html"})

@app.error_handler(500)
def doesnt_work(request):
    return Response("<h1>Internal Error!</h1>", 500, headers={"Content-Type": "text/html"})

@app.route("/internal-error")
def error(request):
    return Response(f"Error!", 500)

@app.route("/api", methods=["POST"])
def api(request):
    return jsonify({"a": 1, "b": 2, "c": 3}[request.get_json().get("item", "a")])

@app.route("/jinja")
def jinja(request):
    return render_template(app, "jinja_template.html", APP=app) # same as jinja_template variable, but as a file.

@app.route("/jinja/string")
def jinja_string(request):
    return Response(render_template_string(app, jinja_template, APP=app), 200 , headers={"Content-Type": "text/html"})

app.run()

templates/index.html:

<!DOCTYPE html>
<html>
<head>
    <title>Hello from Nebula!</title>
</head>
<body>
    <h1>Welcome to Nebula</h1>
    <p>This is a page served by the Nebula web server.</p>
</body>
</html>

Run your app:

python main.py

Open your browser and navigate to http://localhost:8000 to see your page.

Contributions <3

amogus-gggy - refactoring Nebula 0.2.0. Huge thank you!

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

nebula_core-1.1.0.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

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

nebula_core-1.1.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file nebula_core-1.1.0.tar.gz.

File metadata

  • Download URL: nebula_core-1.1.0.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for nebula_core-1.1.0.tar.gz
Algorithm Hash digest
SHA256 9c0a1c0b7ebbbb1d8fa0bfe2441d653c2c09d2e95109d9eb36984ae215157207
MD5 e2e0af664717899764c61eca4d352420
BLAKE2b-256 b720ac3479edbc7a856862be285b0ce852bff86acae72ba965d59a4327f37886

See more details on using hashes here.

File details

Details for the file nebula_core-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: nebula_core-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for nebula_core-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94114802f9930b36b45baea1874d46122bc2dbde003e92784eb17d2286c3a2ed
MD5 dcc3fd80143eeb9f7028f196f853e67e
BLAKE2b-256 39069082707a59e49a2fb2adfeab362e334ef8d217cc9471afefd584289f115d

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