Am Fri, Dec 29, 2023 at 11:04:59AM -0700 schrieb Mats Wichmann via Python-list:

> >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.
>
> ah... didn't grok what you were asking, sorry - ignore my attempt then.

Never mind, the attempt to help is appreciated.

> So you are passing something that has been typed more
> narrowly than the function parameter.

That would then sort of skirt on violation of the Liskov
principle, of which I learned while trying to research this
mypy behaviour.

However, I would not think the above to be a narrowing-down
as it just *selects* one of the explicitely "legal" options.

        list[dict[str, str | list | dict[str, Any]]]

should AFAICT expand to:

        list[dict[str, dict[str, Any]]]

                OR

        list[dict[str, list]]

                OR

        list[dict[str, str]]

the last of which should provide coverage of

        [{'some key': 'some value'}]

> Can you use a TypeGuard here?

Not from what I understand about them...

Karsten
--
GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to