Skip to content

Increase IDE typing support #218

Open
@ShadowJonathan

Description

@ShadowJonathan

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestnot qualifiedThe issue is not checked yet by the ownersquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions