microsoft / kiota-python

Abstractions library for Kiota generated Python clients
https://aka.ms/kiota/docs
MIT License
15 stars 11 forks source link

JsonParseNode.try_get_anything throw exception on string starting or ending with slash #353

Open wiget opened 1 month ago

wiget commented 1 month ago

Environment

Stack trace (if available)

________________________________________________________________ test_get_anything_does_work_on_single_slash _______________________________________________________________

    def test_get_anything_does_work_on_single_slash():
        parse_node = JsonParseNode("/2")
>       result = parse_node.try_get_anything("/2")

tests/unit/test_json_parse_node.py:207: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
kiota_serialization_json/json_parse_node.py:312: in try_get_anything
    datetime_obj = pendulum.parse(value)
../../.virtualenvs/kiota/lib/python3.12/site-packages/pendulum/parser.py:30: in parse
    return _parse(text, **options)
../../.virtualenvs/kiota/lib/python3.12/site-packages/pendulum/parser.py:43: in _parse
    parsed = base_parse(text, **options)
../../.virtualenvs/kiota/lib/python3.12/site-packages/pendulum/parsing/__init__.py:78: in parse
    return _normalize(_parse(text, **_options), **_options)
../../.virtualenvs/kiota/lib/python3.12/site-packages/pendulum/parsing/__init__.py:116: in _parse
    return _parse_iso8601_interval(text)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = '/2'

    def _parse_iso8601_interval(text: str) -> _Interval:
        if "/" not in text:
            raise ParserError("Invalid interval")

        first, last = text.split("/")
        start = end = duration = None

>       if first[0] == "P":
E       IndexError: string index out of range

../../.virtualenvs/kiota/lib/python3.12/site-packages/pendulum/parsing/__init__.py:217: IndexError

Describe the bug

Version 1.3.1 changed how JsonParseNode behaves on a string containing a single slash at the start or the end. Before this version try_get_anything returned the input value, on 1.3.1 an exception is raised.

To Reproduce

The simple test that can be added to tests/test_json_parse_node.py

def test_get_anything_does_work_on_single_slash():
    parse_node = JsonParseNode("/2")
    result = parse_node.try_get_anything("/2")
    assert isinstance(result, str)
    assert result == "/2"

Expected behavior

Exception should not be raised and the input value should be returned.

Screenshots

Additional context

I've encountered this issue when using Microsoft Graph API via msgraph.GraphServiceClient

czaroPieczaro commented 1 month ago

Also got that error. Thanks for raising it.

wiget commented 1 month ago

Re-tested against 1.3.2 - still failing to parse.

bennetrr commented 2 weeks ago

Is there any update on this issue?

The error comes from the pendulum library, there is also an issue in their repo: https://github.com/sdispater/pendulum/issues/506 However, the issue is open since 4 years, and the maintainer didn't even respond to it or the attached PR.

wiget commented 2 weeks ago

I submitted the PR in pendulum to fix the bug: https://github.com/sdispater/pendulum/pull/843