Azure Functions WSGI implementation [deprecated]
Project description
azf-wsgi - WSGI apps on Azure Functions
DEPRECATION NOTICE: The Azure Functions team has built first-class support for WSGI on Azure Functions. I recommend you switch to their implementation.
This was an adapter package to let you run WSGI apps (Django, Flask, etc.) on Azure Functions.
Example:
import azure.functions as func
# note that the package is "azf-wsgi" but the import is "azf_wsgi"
from azf_wsgi import AzureFunctionsWsgi
# Django, for example, but works with any WSGI app
from my_django_app.wsgi import application
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
return AzureFunctionsWsgi(application).main(req, context)
Usage
Install Azure Functions
Follow the instructions here to get set up locally. I created a Function called "DjangoTrigger", but you can call yours whatever.
Install your WSGI app
I found it's easiest if you package your WSGI app using a setup.py script, then pip install it.
If you don't want to do that, you'll have to make sure your WSGI entrypoint is importable from the module where you define your Azure Function.
I'm no Python imports expert, so I just added sys.path.insert(0, './my_proj') right before I try to import the package.
Install this package
pip install azf-wsgi - no need to put this in Django's INSTALLED_APPS or anything like that.
Be sure to update requirements.txt to include azf-wsgi as a requirement.
Configure Azure Functions to hand off to your WSGI app
First, we want to delegate routing to your WSGI app. Edit your function.json to include a catch-all route called "{*route}":
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
],
"route": "app/{*route}"
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}
I also didn't want the default 'api/' path on all my routes, so I fixed my host.json to look like this:
{
"version": "2.0",
"extensions": {
"http": {
"routePrefix": ""
}
}
}
Without this configuration, the only paths your WSGI app would ever see would start with "api/<FunctionName>/".
That works, but it would require you to repeat those boilerplate prefixes on every route you configured.
However, you don't want to completely take over all routes (by having an empty routePrefix and a catch-all route in your function) because this disables important Azure machinery.
Finally, setup your Function's __init__.py to delegate to the WSGI adapter:
import azure.functions as func
from azf_wsgi import AzureFunctionsWsgi
from my_django_app.wsgi import application
def main(req: func.HttpRequest) -> func.HttpResponse:
return AzureFunctionsWsgi(application).main(req)
The adapter optionally takes the Context object as well:
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
return AzureFunctionsWsgi(application).main(req, context)
The adapter will stuff in the OS's environment block much like a CGI request. If for some reason you don't want that, you can pass False to include_os_environ:
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
return AzureFunctionsWsgi(application, False).main(req, context)
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azf-wsgi-0.3.1.tar.gz.
File metadata
- Download URL: azf-wsgi-0.3.1.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85e508efe1d58e42ad4c4a3993d5a37608648fbb67f5525b7de6c91a64a08c17
|
|
| MD5 |
ba8e83207b9b535777ba1261003ccf6e
|
|
| BLAKE2b-256 |
412a839c624faee7d740e5d9f25da5dc61e98c3bd4a5f1cccca53121e48938be
|
File details
Details for the file azf_wsgi-0.3.1-py3-none-any.whl.
File metadata
- Download URL: azf_wsgi-0.3.1-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c271d982ebc1589399de04b2c35dc35c0dc9dda581bb7bfa851ac93947e16cd0
|
|
| MD5 |
84e7e4bea823dc96a7fe3c0cebab32aa
|
|
| BLAKE2b-256 |
6341541bfa89ee3431b91337cc1ce59c7cee034d2f49bb4530a2363573db79ee
|