Skip to main content

Cruet

Cruet is a simple toolkit for building microservices with flask. It works with both, function based and class based views.

It is built on top of:

  • flask
  • marshmallow
  • webargs

Example

from flask import Flask
from marshmallow import fields
from cruet import Cruet, use_args, ApiError, ApiResponse

app = Flask(__name__)
cruet = Cruet(app)

@app.route('/')
@use_args({'name': fields.Str(required=True)})
def index(args):
    if len(args['name']) < 3:
        raise ApiError('Name has to be at least 3 characters', 400)

    return ApiResponse({'msg': 'Hello ' + args['name']})

if __name__ == '__main__':
    app.run()

# curl http://localhost:5000/?name='World'
# {"data": {"msg": "Hello World"}}

Installation

Cruet is available from PyPi

pip install cruet

Response

Cruet provides the ApiResponse class for building json responses that are formatted consistently across all endpoints.

Error Handling

Cruet provides the ApiError exception class for raising an exception and returning a formatted json response with the error message.

Input Validation

Cruet uses the excellent webargs library for validating HTTP requests. It integrates the library in a very transparent way, which doesn't change the way webargs is being used and their documentation should be used as the reference. Cruet only adds its own error handling to webargs and provides convenient decorators for different HTTP request input types.

For general use, the use_args and use_kwargs decorators can be used. The example above uses use_args to check for a parameter called name. The webargs library uses the concept of locations to define where it should look for the HTTP request data. Cruet provides a few convenient decorators for the most common locations.

Query

The query decorator looks for the data as part of the arguments in the URL query string.

from cruet import query

@app.route('/')
@query({'name': fields.Str(required=True)})
def index(args):
    if len(args['name']) < 3:
        raise ApiError('Name has to be at least 3 characters', 400)

    return ApiResponse({'msg': 'Hello ' + args["name"]})

# curl http://localhost:5000/?name='World'
# {"data": {"msg": "Hello World"}}

Body

The body decorator looks for json formatted data in the request body.

from cruet import body

@app.route('/', methods=['POST'])
@body({'name': fields.Str(required=True)})
def index(args):
    if len(args['name']) < 3:
        raise ApiError('Name has to be at least 3 characters', 400)

    return ApiResponse({'msg': 'Hello ' + args["name"]})

# curl -d '{"name":"World"}' -H "Content-Type: application/json" -X POST http://localhost:5000
# {"data": {"msg": "Hello World"}}

Form

The form decorator looks for form-urlencoded data.

from cruet import form

@app.route('/', methods=['POST'])
@form({'name': fields.Str(required=True)})
def index(args):
    if len(args['name']) < 3:
        raise ApiError('Name has to be at least 3 characters', 400)

    return ApiResponse({'msg': 'Hello ' + args["name"]})

# curl -d "name=World" -X POST http://localhost:5000
# {"data": {"msg": "Hello World"}}

Metadata

Release files for cruet 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cruet 0.0.3
File Size Uploaded
cruet-0.0.3.tar.gz 4.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cruet 0.0.3
File Interpreter ABI Platform
cruet-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 11.5 kB

Release files / cruet-0.0.3.tar.gz

Download URL cruet-0.0.3.tar.gz
Size 4.3 kB
Tags Source
SHA-256 checksum
How to use checksums
553ef0dfc0ef2f0e8f84b04c142deb89fa8bd5df1ac4368031a959dc20fa4d2c
BLAKE2b-256 checksum
How to use checksums
d31de4e3d16a1cd1bb7e5c7a3973f271460854f7e6d7323c42306e2173ad5d3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

Release files / cruet-0.0.3-py3-none-any.whl

Download URL cruet-0.0.3-py3-none-any.whl
Size 7.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2310011e3541dd35fcaac9ed3097f812f7e882a2c1383c6672e80951ba139b4
BLAKE2b-256 checksum
How to use checksums
0e2a3b99b05f67ae3c67688491fab4bd27d3064b4672b00d8b216656ac4f59d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page