Skip to main content

Fire up your API with this flamethrower

Project description

Flama

🔥 Fire up your API with this flamethrower.

Build Status Coverage Package version


Documentation: https://flama.perdy.io


Flama

Flama aims to bring a layer on top of Starlette to provide an easy to learn and fast to develop approach for building highly performant GraphQL and REST APIs. In the same way of Starlette is, Flama is a perfect option for developing asynchronous and production-ready services.

Among other characteristics it provides the following:

  • Generic classes for API resources that provides standard CRUD methods over SQLAlchemy tables.
  • Schema system based on Marshmallow that allows to declare the inputs and outputs of endpoints and provides a reliable way of validate data against those schemas.
  • Dependency Injection that ease the process of managing parameters needed in endpoints. Flama ASGI objects like Request, Response, Session and so on are defined as components and ready to be injected in your endpoints.
  • Components as the base of the plugin ecosystem, allowing you to create custom or use those already defined in your endpoints, injected as parameters.
  • Auto generated API schema using OpenAPI standard. It uses the schema system of your endpoints to extract all the necessary information to generate your API Schema.
  • Auto generated docs providing a Swagger UI or ReDoc endpoint.
  • Pagination automatically handled using multiple methods such as limit and offset, page numbers...

Requirements

Installation

$ pip install flama

Example

from marshmallow import Schema, fields, validate
from flama.applications import Flama


# Data Schema
class Puppy(Schema):
    id = fields.Integer()
    name = fields.String()
    age = fields.Integer(validate=validate.Range(min=0))


# Database
puppies = [
    {"id": 1, "name": "Canna", "age": 6},
    {"id": 2, "name": "Sandy", "age": 12},
]


# Application
app = Flama(
    components=[],      # Without custom components
    title="Foo",        # API title
    version="0.1",      # API version
    description="Bar",  # API description
    schema="/schema/",  # Path to expose OpenAPI schema
    docs="/docs/",      # Path to expose Swagger UI docs
    redoc="/redoc/",    # Path to expose ReDoc docs
)


# Views
@app.route("/", methods=["GET"])
def list_puppies(name: str = None) -> Puppy(many=True):
    """
    description:
        List the puppies collection. There is an optional query parameter that 
        specifies a name for filtering the collection based on it.
    responses:
        200:
            description: List puppies.
    """
    return [puppy for puppy in puppies if puppy["name"] == name]
    

@app.route("/", methods=["POST"])
def create_puppy(puppy: Puppy) -> Puppy:
    """
    description:
        Create a new puppy using data validated from request body and add it 
        to the collection.
    responses:
        200:
            description: Puppy created successfully.
    """
    puppies.append(puppy)
    
    return puppy

Dependencies

Following Starlette philosophy Flama reduce the number of hard dependencies to those that are used as the core:

It does not have any more hard dependencies, but some of them are necessaries to use some features:

  • pyyaml - Required for API Schema and Docs auto generation.
  • apispec - Required for API Schema and Docs auto generation.
  • python-forge - Required for pagination.
  • sqlalchemy - Required for Generic API resources.
  • databases - Required for Generic API resources.

You can install all of these with pip3 install flama[full].

Credits

That library is heavily inspired by APIStar server in an attempt to bring a good amount of it essence to work with Starlette as the ASGI framework and Marshmallow as the schema system.

Contributing

This project is absolutely open to contributions so if you have a nice idea, create an issue to let the community discuss it.

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

flama-0.8.2.tar.gz (38.4 kB view details)

Uploaded Source

Built Distribution

flama-0.8.2-py3-none-any.whl (134.1 kB view details)

Uploaded Python 3

File details

Details for the file flama-0.8.2.tar.gz.

File metadata

  • Download URL: flama-0.8.2.tar.gz
  • Upload date:
  • Size: 38.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.3 Linux/4.15.0-1035-aws

File hashes

Hashes for flama-0.8.2.tar.gz
Algorithm Hash digest
SHA256 d11133001e02121c470e53d3c8285c3a6c494c88ca75b57376fb5fe881c7cee2
MD5 a65cfa04d687d0218949af902dceb4dc
BLAKE2b-256 4d004aa18dd41b8ef7f72712687b1cfd0c2333f8bb56b5c44fff7fd1981afbda

See more details on using hashes here.

File details

Details for the file flama-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: flama-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 134.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.3 Linux/4.15.0-1035-aws

File hashes

Hashes for flama-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ba25ec9b1f8d49b39e0f772c6e7c2eaed1b11c9bbb9d4c9f05d9c4261c62ed22
MD5 3972bee221fb6c24a9fb5aec4fe93bb0
BLAKE2b-256 9d1f893fafaf3b62f6665e343a35dceaa5c835836c91638c8a774c10f9e0b7a8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page