Skip to main content

A service management framework

Project description

Nautica V3

PyPI Version Python License PyPI Downloads

Nautica V3 (or N3) is a backend platform for Python. It gives you a managed runtime environment with a service registry, lifecycle system, CLI, and built-in tools, saving you time from putting your app together and giving you more time to build it.

hjkl rsdfgkhjlfgjkl

What's Included

  • Service Registry with dependency resolver
  • Lifecycle hooks for install, start and shutdown
  • TOML Config system with key management
  • Logger with file output and memory
  • Shell for interacting with services
  • TUI for live logs, thread and worker inspection (optional)
  • Plugin system for extending projects without modifying core code
  • Many Built-in Services, including HTTP API

I made N3 because I was solving the same problems in my projects, those being: configs, logging, figuring out startup orders, not to mention the validation boilerplate on every route. Because of this I made Nautica V2, which solved many of these issues, and V3 to improve on the idea.

Get Started

Firstly, install Nautica:

pip install nautica

To create a project, use the CLI (docs):

nautica create my-project
cd my-project
nautica run

To setup an existing project:

cd my-project
nautica install
nautica run

How HTTP API Compares

Benchmark Performance

Library Requests/Second Avg Latency Overall
Nautica3 2271 4.4ms -
FastAPI 2259 4.4ms 0.5% slower
Flask 75 132.6ms 96% slower

Ran with 10 workers, for 10 seconds. Nautica3 matches FastAPI despite running additional middleware, requirement parsing, and logging on every request.

Code Complexity

Similarly to SvelteKit, Nautica defines the route names for you. This helps to reduce boilerplate (see Flask and FastAPI examples), improve readability, and helps with naming conventions

Nautica3

# file: src/http/api/v1/auth.py
from napi.http import HTTP, Context, Reply
from somewhere import username, password

@HTTP.POST()
@HTTP.Require(body = {"username": str, "password": str})
def login(ctx: Context):
    if ctx.body["username"] == username and ctx.body["password"] == password:
        return Reply(ok=True)
    return Reply(ok=False, error="Invalid credentials"), 401

Flask

# file: main.py
from flask import Flask, request
from flask.blueprints import Blueprint
import json
from somewhere import username, password

app = Flask(__name__)
v1auth = Blueprint("v1auth", __name__, url_prefix="/api/v1/auth")

@v1auth.post("/login")
def login():
    data = request.get_json(silent=True) or {}
    if data.get("username") == username and data.get("password") == password:
        return json.dumps({"ok": True})
    return json.dumps({"ok": False, "error": "Invalid credentials"}), 401

app.register_blueprint(v1auth)
app.run(port=8101)

FastAPI

# file: main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
from somewhere import username, password

app = FastAPI()

class LoginRequest(BaseModel):
    username: str
    password: str

@app.post("/api/v1/auth/login")
def login(body: LoginRequest):
    if body.username == username and body.password == password:
        return {"ok": True}
    raise HTTPException(status_code=401, detail="Invalid credentials")

uvicorn.run(app, port=8101)

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

nautica-3.1.3.tar.gz (45.0 kB view details)

Uploaded Source

Built Distribution

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

nautica-3.1.3-py3-none-any.whl (57.5 kB view details)

Uploaded Python 3

File details

Details for the file nautica-3.1.3.tar.gz.

File metadata

  • Download URL: nautica-3.1.3.tar.gz
  • Upload date:
  • Size: 45.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for nautica-3.1.3.tar.gz
Algorithm Hash digest
SHA256 65e7611631c9e3d426d3fe034e55a8d9b749a765007aa7958e48dfd9f8266dbd
MD5 794338600d5820123bfac2c8d38c862e
BLAKE2b-256 9931febe2f4dc7a6e0ccddcf813ff539dd830c2f9b5dd0322e7bd9a4a8c8552c

See more details on using hashes here.

File details

Details for the file nautica-3.1.3-py3-none-any.whl.

File metadata

  • Download URL: nautica-3.1.3-py3-none-any.whl
  • Upload date:
  • Size: 57.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for nautica-3.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f1ad9f110f22c15bb3bb2a7ad8e39be1ef7d12bd9e700c37e1c4f0dbe789709f
MD5 c0fbdd62cbfebfd152956416e3aab76c
BLAKE2b-256 b9c66dd84a8b2c7dd8664a1353e4588567b8ab0bb3f415847dc51c60c5043325

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