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