Skip to content

Make all attributes read-only and have explicit setter methods #556

Description

@hamishwillee

Most attributes are read-only but we have a number of writable attributes: Vehicle.mode, Vehicle.armed, Vehicle.airspeed and Vehicle.groundspeed, Vehicle.home_location.

There is nothing wrong with writable attributes "in general" but in this use case they aren't great because they imply attributes can be written synchronously and immediately ... and in our application they can't. This leads to "hey what" moments, means that we need to write somewhat complicated code to check the success of a write, and makes it easy to miss these checks.

The proposal is to make all the attributes read-only and move to explicit setters. The setters would be asynchronous, but provide wait_ready to allow synchronous use, timeout and callback for handling a fail case (with an exception being raised if there is no callback defined):

send_message_set_armed(wait_ready=False, timeout=10, retries=1, callback=None)

Our current code should look like something this semi-pseudo code (it actually doesn't, and many of our examples will fall into an infinite loop if arming fails):

    vehicle.armed = True    

    # Confirm vehicle armed before attempting to take off
   arming_count=0
    while not vehicle.armed:      
        print " Waiting for arming..."
        vehicle.armed = True
        arming_count+=1
        if arming_count==20:
            raise Exception("arming failed")
        time.sleep(1)

Changing to the new API would be the same if used asynchronously, but could saftely used synchronously as shown below:

    vehicle.send_message_set_armed(wait_ready=True)  

Thoughts?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions