Skip to main content

StarMallow framework

Project description

StarMallow

StarMallow is a starlette based web framework for building robust APIs with Python and Marshmallow. It's been inspired by FastAPI, but uses Marshmallow instead of Pydantic for it's schema definitions. It's reason for existing is simply because marshmallow is a much more powerful serialization engine, and in most cases it's fast enough. An example of Pydantic's limitations can be found in Issue 2277

Example

Create it

Create a file main.py with:

from typing import Annotated
from marshmallow_dataclass2 import dataclass
from starmallow import Body, Path, StarMallow

app = StarMallow()

# Minimum example
@app.get("/path/{item_id}")
def get_id(item_id):
    return item_id


# Example with explicit location option
@dataclass
class MyBody:
    item_id: int
    sub_item_id: int


@app.get("/body")
async def get_body(body: MyBody = Body()) -> int:
    return body.item_id


# Example with explicit marshmallow schema
class MyBodySchema(ma.Schema):
    item_id = mf.Integer()

@app.get("/path/body_schema")
def get_body_from_schema(body: Dict[str, int] = Body(model=MyBodySchema)) -> int:
    return body['item_id']


# Example with Annotated

@app.get("/body_annotated")
async def get_body_annotated(body: Annotated[MyBody, Body()]) -> int:
    return body.item_id

Run it

Run the server with:

 uvicorn sample_server:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [84092]
INFO:     Started server process [87944]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

View the docs

HTTP Endpoints

You can also use class-based views. This can make it easier to organize your code and gives you an easy migration path if you use flask-smorest

from marshmallow_dataclass2 import dataclass
from starmallow import StarMallow
from starmallow.decorators import route
from starmallow.endpoints import APIHTTPEndpoint


app = StarMallow()


@dataclass
class Pet:
    name: str


@app.api_route('/')
class Pets(APIHTTPEndpoint):
    def get(self) -> Pet:
        return Pet.get()

    def post(self, pet: Pet) -> Pet:
        pet.create()
        return pet


@app.api_route('/id/{pet_id}')
class PetById(ApiHttpEndpoint):
    @route(deprecated=True)  # Specify @route if you need to override parameters
    def get(self, pet_id: int) -> Pet:
        return Pet.get(pet_id)


    @route(status_code=204)  # Specify @route if you need to override parameters
    def get(self, pet_id: int):
        Pet.get(pet_id).delete()

Optional Dependencies

  • uvicorn - for the server that loads and serves your application.
  • orjson - Required if you want to use ORJSONResponse.
  • ujson - Required if you want to use UJSONResponse.

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

starmallow-0.9.3.tar.gz (141.3 kB view details)

Uploaded Source

Built Distribution

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

starmallow-0.9.3-py3-none-any.whl (59.4 kB view details)

Uploaded Python 3

File details

Details for the file starmallow-0.9.3.tar.gz.

File metadata

  • Download URL: starmallow-0.9.3.tar.gz
  • Upload date:
  • Size: 141.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for starmallow-0.9.3.tar.gz
Algorithm Hash digest
SHA256 fe7eb4e58bedf61543e1b2bad7b2fba62cd2a85f4548a1ed54eb430ee2eb6c50
MD5 fc1b7b1b56ff315c4ee7e6b74c075646
BLAKE2b-256 8545e4f53ef8247e4b31bb597e44b096e76b9f6a4c153fa28f08231bd9fe07fa

See more details on using hashes here.

File details

Details for the file starmallow-0.9.3-py3-none-any.whl.

File metadata

  • Download URL: starmallow-0.9.3-py3-none-any.whl
  • Upload date:
  • Size: 59.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for starmallow-0.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d1b626a3eae9a11b7d032bb61d408d7ae6046bd90325f3a6c5b8ff12b6323df6
MD5 21b57714751e65056577a30375a8f50f
BLAKE2b-256 577dcbd8227266f86411f30c16931bf03dbcb03a6cb1a507ec5edf87edc3fd1d

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