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
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_requestandafter_requesthooks 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c0a1c0b7ebbbb1d8fa0bfe2441d653c2c09d2e95109d9eb36984ae215157207
|
|
| MD5 |
e2e0af664717899764c61eca4d352420
|
|
| BLAKE2b-256 |
b720ac3479edbc7a856862be285b0ce852bff86acae72ba965d59a4327f37886
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94114802f9930b36b45baea1874d46122bc2dbde003e92784eb17d2286c3a2ed
|
|
| MD5 |
dcc3fd80143eeb9f7028f196f853e67e
|
|
| BLAKE2b-256 |
39069082707a59e49a2fb2adfeab362e334ef8d217cc9471afefd584289f115d
|