[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v9 08/14] iotests: touch up log function signature

From: John Snow
Subject: Re: [PATCH v9 08/14] iotests: touch up log function signature
Date: Mon, 30 Mar 2020 14:31:45 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 3/30/20 12:19 PM, Kevin Wolf wrote:
> Am 25.03.2020 um 00:20 hat John Snow geschrieben:
>> Representing nested, recursive data structures in mypy is notoriously
>> difficult; the best we can reliably do right now is denote the atom
>> types as "Any" while describing the general shape of the data.
>> Regardless, this fully annotates the log() function.
>> Typing notes:
>> TypeVar is a Type variable that can optionally be constrained by a
>> sequence of possible types. This variable is bound per-invocation such
>> that the signature for filter=() requires that its callables take e.g. a
>> str and return a str.
>> Signed-off-by: John Snow <address@hidden>
> I like it. Does your version of mypy accept this? I actually get a
> warning that doesn't make sense to me:
>     iotests.py:392: error: Argument 1 to "info" of "Logger" has incompatible 
> type "Dict[str, Any]"; expected "str"
> The code looks like this:
>     if isinstance(msg, (dict, list)):
>         # Don't sort if it's already sorted
>         do_sort = not isinstance(msg, OrderedDict)
>         test_logger.info(json.dumps(msg, sort_keys=do_sort, indent=indent))
>     else:
>         test_logger.info(msg)
> I have no idea why it would think it can still be Dict[str, Any] in the
> else branch. Even after adding an 'assert not instanceof(msg, dict), it
> still thinks so.
> Probably time to update for me...
> Kevin

jsnow@probe ~/s/q/w/t/qemu-iotests (iotests-logging)> set -x MYPYPATH
jsnow@probe ~/s/q/w/t/qemu-iotests (iotests-logging)> mypy iotests.py
jsnow@probe ~/s/q/w/t/qemu-iotests (iotests-logging)>

1. Mypy is stubborn and needs to be told exactly where it is allowed to
look for imports

2. works4me.

I use mypy 0.720, there are newer versions available, too.

oh, this is ... we need to look at the end of this series, not as of
this patch. Alright, let's look at patch 14:

0.600: Logger warning
0.610: Logger warning
0.620: OK
0.630: OK
0.650: OK
0.700: OK

Whatever this bug was seems to have been fixed since 0.620.

So let's say that I am targeting:

Python 3.6+
pylint 2.2.0+
mypy 0.620+


reply via email to

[Prev in Thread] Current Thread [Next in Thread]