Azure / azure-functions-python-worker

Python worker for Azure Functions.

Home Page:http://aka.ms/azurefunctions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] Empty query params are discarded

nathanhi opened this issue · comments

Investigative information

  • Timestamp: 1632902318
  • Function App name:
  • Function name(s) (as appropriate):
  • Core Tools version: 3.2.0-0 Commit hash: 5ffe001695be89a9b33cb569c875aef15938830b

Repro steps

Provide the steps required to reproduce the problem:
  1. Create simple function:
    __init__.py
    import azure.functions
    
    def main(req: azure.functions.HttpRequest):
        return str(req.params)
    function.json
    {
        "scriptFile": "__init__.py",
        "bindings": [
            {
                "authLevel": "anonymous",
                "type": "httpTrigger",
                "direction": "in",
                "name": "req",
                "methods": [
                    "get",
                    "post"
                ]
            },
            {
                "type": "http",
                "direction": "out",
                "name": "$return"
            }
        ]
    }
  2. Access function URL with query params ?paramwithvalue=foo&paramwithoutvalue
  3. {"paramwithvalue": "foo"} is returned

Expected behavior

I would expect the HttpRequest.params to contain all query params, defaulting to either a value of None or an empty string:

{
    "paramwithvalue": "foo",
    "paramwithoutvalue": ""
}

Actual behavior

The query parameter is silently discarded:

{
    "paramwithvalue": "foo"
}

Known workarounds

The query param can be retrieved via urllib.parse.parse_qs from the HttpRequest.urlobject:

__init__.py

from urllib.parse import parse_qs, urlparse

import azure.functions

def main(req: azure.functions.HttpRequest):
    return str(parse_qs(urlparse(req.url).query, keep_blank_values=True))

This will return the full set of params:

"{'paramwithvalue': ['foo'], 'paramwithoutvalue': ['']}"

Contents of the requirements.txt file:

azure-functions==1.7.2

Related information

This seems to be an underlying issue in the protobuf implementation and was already fixed in Azure/azure-functions-language-worker-protobuf#49

Hi @nathanhi, are you still facing this issue?

This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 4 days. It will be closed if no further activity occurs within 3 days of this comment.

Hello, I am still seeing this issue. Are there plans to fix this? There is a fix using UseNullableValueDictionaryForHttp mentioned in the PowerShell worker regarding the same issue Azure/azure-functions-powershell-worker#895.

This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 4 days. It will be closed if no further activity occurs within 3 days of this comment.