Skip to main content

Micro framework for azure functions with optional json schema validation

Project description

functionapprest

Build Status Latest Version Python Support

Python routing mini-framework for MS Azure Functions with optional JSON-schema validation.

** This repository is based heavily on lambdarest project

Features

  • functionapp_handler function constructor with built-in dispatcher
  • Decorator to register functions to handle HTTP methods
  • Optional JSON-schema input validation using same decorator

Installation

Install the package from PyPI using pip:

pip install functionapprest

Getting Started

This module helps you to handle different HTTP methods in your Azure Functions.

from functionapprest import functionapp_handler

@functionapp_handler.handle('get')
def my_own_get(event):
    return {'this': 'will be json dumped'}

Advanced Usage

Optionally you can validate an incoming JSON body against a JSON schema:

my_schema = {
    '$schema': 'http://json-schema.org/draft-04/schema#',
    'type': 'object',
    'properties': {
        'body':{
            'type': 'object',
            'properties': {
                'foo': {
                    'type': 'string'
                }
            }
        }
    }
}

@functionapp_handler.handle('get', path='/with-schema/', schema=my_schema)
def my_own_get(event):
    return {'this': 'will be json dumped'}

Query Params

Query params are also analyzed and validate with JSON schemas. Query arrays are expected to be comma separated, all numbers are converted to floats.

my_schema = {
    '$schema': 'http://json-schema.org/draft-04/schema#',
    'type': 'object',
    'properties': {
        'query':{
            'type': 'object',
            'properties': {
                'foo': {
                    'type': 'array',
                    'items': {
                        'type': 'number'
                    }
                }
            }
        }
    }
}

@functionapp_handler.handle('get', path='/with-params/', schema=my_schema)
def my_own_get(event):
    return event.json['query']

Routing

You can also specify which path to react on for individual handlers using the path param:

@functionapp_handler.handle('get', path='/foo/bar/baz')
def my_own_get(event):
    return {'this': 'will be json dumped'}

And you can specify path parameters as well, which will be passed as keyword arguments:

@functionapp_handler.handle('get', path='/foo/<int:id>/')
def my_own_get(event, id):
    return {'my-id': id}

Or use the proxy endpoint:

@functionapp_handler.handle('get', path='/bar/<path:path>')
def my_own_get(event, path):
    return {'path': path}

Using within Function App

function.json

{
  "scriptFile": "handler.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get"
      ],
      "route": "products/{product_id}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

handler.py

from functionapprest import functionapp_handler, Request

@functionapp_handler.handle('get', path='/products/<path:product_id>/')
def list_products(req: Request, product_id):
    query = req.json.get('query', {})
    body = req.json.get('body', {})
    headers = req.get('headers', {})
    params = req.get('params', {})
    response = {
        'method': req.method,
        'url': req.url,
        'headers': headers,
        'params': params,
        'query': query,
        'body': body
    }
    return response

main = functionapp_handler

Tests

You can use pytest to run tests against your current Python version. To run tests for current python version run pytest

See setup.py for test dependencies and install them with pipenv install --dev.

Contributors

eduardomourar

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

functionapprest-0.2.0.tar.gz (9.9 kB view details)

Uploaded Source

File details

Details for the file functionapprest-0.2.0.tar.gz.

File metadata

  • Download URL: functionapprest-0.2.0.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using 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.6.7

File hashes

Hashes for functionapprest-0.2.0.tar.gz
Algorithm Hash digest
SHA256 67133dd34a248cb23afa4dc8fd5b690ae021810b23f3b02c2fc1d93c1618086a
MD5 17176077dc5ec79f3a494f9573b4f78b
BLAKE2b-256 af203ffd89d5145dc11e0950062824cefd823ff826e90d05a025764819a96604

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