On 12/29/2023 10:02 AM, Karsten Hilbert via Python-list wrote:
Am Fri, Dec 29, 2023 at 07:49:17AM -0700 schrieb Mats Wichmann via Python-list:
I am not sure why mypy thinks this
gmPG2.py:554: error: Argument "queries" to "run_rw_queries" has incompatible type
"List[Dict[str, str]]"; expected
"List[Dict[str, Union[str, List[Any], Dict[str, Any]]]]" [arg-type]
rows, idx = run_rw_queries(link_obj = conn, queries =
queries, return_data = True)
^~~~~~~
should be flagged. The intent is for "queries" to be
a list
of dicts
with keys of str
and values of
str OR
list of anything OR
dict with
keys of str
and values of anything
I'd have thunk list[dict[str,str]] matches that ?
Dict[str, str] means the key type and value type should both be strings,
Indeed, I know that much, list[dict[str, str]] is what is getting
passed in in this particular invocation of run_rw_queries().
For what it's worth here's the signature of that function:
def run_rw_queries (
link_obj:_TLnkObj=None,
queries:list[dict[str, str | list | dict[str, Any]]]=None,
end_tx:bool=False,
return_data:bool=None,
get_col_idx:bool=False,
verbose:bool=False
) -> tuple[list[dbapi.extras.DictRow], dict[str, int] | None]:
Given that I would have thought that passing in
list[dict[str, str]] for "queries" ought to be type safe.
Mypy indicates otherwise which I am not grokking as to why.
but in your
retelling above you indicate lots of possible value types... actually the mypy
guess
seems to be a pretty good recreation of your psuedo-code description.
I agree that mypy's grasp of my intent from
queries:list[dict[str, str | list | dict[str, Any]]]=None,
into
"List[Dict[str, Union[str, List[Any], Dict[str, Any]]]]"
seems accurate. I just don't understand why list[dict[str,
str]] should not pass that construct.
Maybe better to ask the mypy people directly.
Karsten
--
GPG 40BE 5B0E C98E 1713 AFA6 5BC0 3BEA AC80 7D4F C89B
--
https://mail.python.org/mailman/listinfo/python-list