Skip to content

[Python] Mode setters accept the wrong type #627

@object-Object

Description

@object-Object

The parameter type of many (probably all) mode setters (eg. Control.sas_mode, Control.speed_mode, Text.alignment) is currently whatever the type of the getter is (eg. SASMode). This results in errors from type checkers when trying to change those modes, such as in this example:

import time
import krpc

conn = krpc.connect()
vessel = conn.space_center.active_vessel
vessel.control.sas_mode = vessel.control.sas_mode.radial

This code works, but Pylance shows the following error:

Cannot assign member "sas_mode" for type "Control"
  "int" is incompatible with "SASMode"

It also breaks future autocomplete with that variable, since Pylance now thinks it's an int.

I believe this could be fixed by changing the argument type of the setters in the relevant stub files, for example, from SpaceCenter.SASMode to int:

        @sas_mode.setter
        def sas_mode(self, value):
            # type: (int) -> None
            ...

However, if possible, it would probably be better to make these types use the Enum class, since that seems to be what they're representing.

(I'm unsure if this is an issue with base kRPC or just nullprofile's fork, though I suspect the former.)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions