rethinkdb-python icon indicating copy to clipboard operation
rethinkdb-python copied to clipboard

Increase IDE typing support

Open ShadowJonathan opened this issue 5 years ago • 2 comments

Is your feature request related to a problem? Please describe. In pycharm, as of this moment, rethinkdb query methods and others are not recognized properly in static analysis, and I think static typing analysis libraries such as mypy will not be able to validate code this way.

Describe the solution you'd like Superclass RethinkDB with classes encapsulating ast, net, query, and errors submodules' functions and constants, erase this monkeypatching block of code:

        for module in (self.net, self.query, self.ast, self.errors):
            for function_name in module.__all__:
                setattr(self, function_name, getattr(module, function_name))

Add (generic/union) type annotations to chaining functions so that (for example; get_all cannot be chained with get_all, or with another function) IDE and static analysis can pick up on incorrect combinations before they happen.

Maybe possibly split RethinkDB into subclasses SyncRethinkDB, AsyncioRethinkDB, TwistedRethinkDB, TornadoRethinkDB and GeventRethinkDB that all annotate the return values of their ast functions with the correct types (Future, etc.) so that IDE compatibility and analysis can pick up on a possibly incorrect/incompatible versions.

Or simply have the connection type at run() influence the wrapping type around the return value.

Additional context Zen of Python, line 2:

Explicit is better than implicit.

A lot of methods in the python driver puzzle me as a python developer, simplifying them to a set of ast frontend functions directly denoted in the RethinkDB class, and have the Connection type influence typing generics' outcome (run(Connection[RetT]) -> RetT[T]) could increase IDE typing analysis while staying flexible and open to new runtime types.

ShadowJonathan avatar Jul 01 '20 12:07 ShadowJonathan

How works pycharm? What require to identify the methods? I guess is a pycharm problem maybe. The second could be a good idea, maybe wrapping to classes more explicit could help

dpineiden avatar Jul 26 '20 18:07 dpineiden

Yep, the python driver is not built in the mentality of Zen of Python, that's sure.

I think if we could move to Python 3 and type hint the code that would help a lot. Also, refactoring (partially what @ShadowJonathan mentioned) is necessary too.

gabor-boros avatar Aug 11 '20 09:08 gabor-boros