Skip to content

MalformedQueryStringError string when empty parameter without = #33

@sshaitan

Description

@sshaitan

querystring_parser version="1.2.3"
Python 3.7.2

Problem

If query string containg "empty" parameter whithout equal sign at the end - parser fails with MalformedQueryStringError exception.

Example

amoCRM webhook post data:

leads%5Bupdate%5D%5B0%5D%5Bid%5D=25628254&leads%5Bupdate%5D%5B0%5D%5Bname%5D=&leads%5Bupdate%5D%5B0%5D%5Bstatus_id%5D=11458102&leads%5Bupdate%5D%5B0%5D%5Bold_status_id%5D&leads%5Bupdate%5D%5B0%5D%5Bprice%5D=0&leads%5Bupdate%5D%5B0%5D%5Bresponsible_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Blast_modified%5D=1563362310&leads%5Bupdate%5D%5B0%5D%5Bmodified_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Bcreated_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Bdate_create%5D=1563362308&leads%5Bupdate%5D%5B0%5D%5Bpipeline_id%5D=222958&leads%5Bupdate%5D%5B0%5D%5Baccount_id%5D=11458096&account%5Bsubdomain%5D=afidevelopment&account%5Bid%5D=11458096&account%5B_links%5D%5Bself%5D=https%3A%2F%2Fexample.amocrm.ru

Expected parser result:

{'leads': {'update': {0: {'id': '25628254', 'name': '', 'status_id': '11458102', 'old_status_id': None, 'price': '0', 'responsible_user_id': '1085823', 'last_modified': '1563362310', 'modified_user_id': '1085823', 'created_user_id': '1085823', 'date_create': '1563362308', 'pipeline_id': '222958', 'account_id': '11458096'}}}, 'account': {'subdomain': 'afidevelopment', 'id': '11458096', '_links': {'self': 'https://example.amocrm.ru'}}}

Got exception

`
Traceback (most recent call last):
File "/opt/afi/server/.venv/lib/python3.7/site-packages/querystring_parser/parser.py", line 137, in parse
(var, val) = element.split("=")
ValueError: not enough values to unpack (expected 2, got 1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 1, in
File "/opt/afi/server/.venv/lib/python3.7/site-packages/querystring_parser/parser.py", line 146, in parse
raise MalformedQueryStringError
querystring_parser.parser.MalformedQueryStringError

`

The code:

from querystring_parser import parser parser.parse('leads%5Bupdate%5D%5B0%5D%5Bid%5D=25628254&leads%5Bupdate%5D%5B0%5D%5Bname%5D=&leads%5Bupdate%5D%5B0%5D%5Bstatus_id%5D=11458102&leads%5Bupdate%5D%5B0%5D%5Bold_status_id%5D&leads%5Bupdate%5D%5B0%5D%5Bprice%5D=0&leads%5Bupdate%5D%5B0%5D%5Bresponsible_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Blast_modified%5D=1563362310&leads%5Bupdate%5D%5B0%5D%5Bmodified_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Bcreated_user_id%5D=1085823&leads%5Bupdate%5D%5B0%5D%5Bdate_create%5D=1563362308&leads%5Bupdate%5D%5B0%5D%5Bpipeline_id%5D=222958&leads%5Bupdate%5D%5B0%5D%5Baccount_id%5D=11458096&account%5Bsubdomain%5D=afidevelopment&account%5Bid%5D=11458096&account%5B_links%5D%5Bself%5D=https%3A%2F%2Fexample.amocrm.ru')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions