
On Wed, Mar 17, 2021 at 06:11:32PM +0100, Andrea Bolognani wrote:
On Wed, 2021-03-17 at 18:05 +0100, Erik Skultety wrote:
On Wed, Mar 17, 2021 at 05:06:33PM +0100, Andrea Bolognani wrote:
I don't know how to express that in terms of Python types (List[Dict[str, Any]]?), and I'm concerned by the fact that changing the return type to something obviously wrong like "int" results in zero observable changes.
I'd suggest List[Dict] to be enough in this case since. We can safely assume the returned JSON will always be a list of objects, the rest is on the caller.
I trust your expertise here :)
How are type hints enforced? Do we need to turn that on somehow?
They're not. Python will always remain a dynamically typed language. The whole point of type hinting is for static analysis via 'mypy' and for various IDEs that can actually make use of those as well during completion which is nice. (I'm wondering whether the jedi vim plugin is capable of reading those too)
I see. It would be nice to run mypy in 'check' mode (assuming that exists) at syntax-check time, similarly to what we already do with flake8. That can come later, though.
One more thing, what is the Python 3.<minor> acceptance policy for scripts? I mean we expect the scripts to work with 3.X as we declare on libvirt.org, but f-strings for example are 3.6+ and 3.9 essentially makes the typing module deprecated since it integrated most of the hints to standard collections [1], IOW instead of writing "List[Dict[type, type]]" you can now use the standard containers for that as well: "list[dict[type, type]]" without importing anything, so basically the list/dict builtin can serve as both container constructors as well as static type hints. Erik [1] https://www.python.org/dev/peps/pep-0585/