Skip to main content

Various Helper Tools to make working with azure functions easier

Project description

🎷 FuncTown 🎷

PyPI Version PyPI downloads Packaging Supported Python versions Code style: Black

FuncTown is a python library that is designed to make your life with Azure Functions easier.

The core features of FuncTown are:

  • Error handling - automatically handle errors and return a response to the user
  • Debugging - Set debug flags that automatically return logs and traces as part of error responses from your function
  • JWT token validation - automatically validate JWT tokens and provide the user information
  • Request argument parsing - automatically parse arguments from the HttpRequest and provide them to your function
  • Metrics - Handle connections to Application Insights and gives you easy to use metrics objects
  • Logging, Tracing & Events - Log your functions data directly into Application Insights

For detailed features see the docs.

Getting Started

You can install FuncTown using pip:

pip install functown

Note that some dependencies are hidden behind sub-packages (e.g. functown[jwt] for JWT token validation).

Almost all functionality of FuncTown is provided through decorators. If you want to add error handling to your function:

from logging import Logger
from functown import ErrorHandler

@ErrorHandler(debug=True, enable_logger=True)
def main(req: func.HttpRequest, logger: Logger, **kwargs) -> func.HttpResponse:
    logger.info('Python HTTP trigger function processed a request.')

    # ...
    # exception will be caught and handled by the decorator (returning a 500)
    raise ValueError("something went wrong")

    return func.HttpResponse("success", status_code=200)

Note: Decorators might pass down additional arguments to your function, so it is generally a good idea to modify your function signature to accept these arguments (see docs for more information) and add a **kwargs to the end.

Decorators are also stackable, so we could parse function arguments and handle a JWT Token in the same function:

from functown import ArgsHandler, RequestArgHandler, AuthHandler
from functown.auth import Token

@ArgsHandler()
@AuthHandler(scopes=["user.read"])
def main(
    req: func.HttpRequest, args: RequestArgHandler, token: Token
) -> func.HttpResponse:
    # retrieve some arguments
    data = args.get_body_query("data_name", required=True, allowed=["foo", "bar"])
    switch = args.get_body("bool_name", map_fct='bool')
    file = args.get_file('file_name', required=True)

    # check the user id
    user_id = token.user_id

    # ...

This would also directly fail with a 400 message if there is no token provided, or the token does not contain the required scopes.

Be sure to check out the docs for a full overview of all decorators.

If you want to test it on your own Azure Subscription, you can check out the example guide in the dev section of the docs.

🎷 Welcome to FuncTown! 🎷

Note

‼️ If you find this library helpful or have suggestions please let me know. Also any contributions are welcome! ‼️

"Buy Me A Coffee"

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

functown-2.0.0.tar.gz (30.0 kB view details)

Uploaded Source

Built Distribution

functown-2.0.0-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

Details for the file functown-2.0.0.tar.gz.

File metadata

  • Download URL: functown-2.0.0.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for functown-2.0.0.tar.gz
Algorithm Hash digest
SHA256 aaaf2251c1d30b3ebffb0c8c230a2cd031361455540ab13926b9dc8604037c85
MD5 a4de0a0d0490526a66edbd7ef8832482
BLAKE2b-256 68e50f9cc15301c98e702868e9b1f28be0b04c89c85f0f73bc1388c26048bf84

See more details on using hashes here.

File details

Details for the file functown-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: functown-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for functown-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bd21da0b649b6a1be2094b89c77441b6e7c6b0222b6da1e654fdda0d238a354
MD5 23b08a362047b5f9a7d660716a4e66b9
BLAKE2b-256 f53ae49a227c96dc4e741a66170a8ea2fbaf23a5d5bba6695fff5425c17f6893

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