[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
~/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
- Re: [PATCH v9 05/14] iotests: add pylintrc file, (continued)
- [PATCH v9 06/14] iotests: alphabetize standard imports, John Snow, 2020/03/24
- [PATCH v9 07/14] iotests: drop pre-Python 3.4 compatibility code, John Snow, 2020/03/24
- [PATCH v9 08/14] iotests: touch up log function signature, John Snow, 2020/03/24
- [PATCH v9 10/14] iotests: add hmp helper with logging, John Snow, 2020/03/24
- [PATCH v9 12/14] iotest 258: use script_main, John Snow, 2020/03/24
- [PATCH v9 09/14] iotests: limit line length to 79 chars, John Snow, 2020/03/24
- [PATCH v9 13/14] iotests: Mark verify functions as private, John Snow, 2020/03/24