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 <js...@redhat.com>
>
> 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
~/src/qemu.git/work/python/
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+
--js