code: def upload(self, timeout=None):
          
          if self._vehicle._wpts_dirty:
              self._vehicle._master.waypoint_clear_all_send()
              start_time = time.time()
              if self._vehicle._wploader.count() > 0:
                  self._vehicle._wp_uploaded = [False] * self._vehicle._wploader.count()
                  self._vehicle._master.waypoint_count_send(self._vehicle._wploader.count())
                  while False in self._vehicle._wp_uploaded:
                      if timeout and time.time() - start_time > timeout:
                          raise TimeoutError
                      time.sleep(0.1)
                  self._vehicle._wp_uploaded = None
              self._vehicle._wpts_dirty = False
docs: Call ``upload()`` after :py:func:`adding <CommandSequence.add>` or :py:func:`clearing <CommandSequence.clear>` mission commands.
  
          After the return from ``upload()`` any writes are guaranteed to have completed (or thrown an
          exception) and future reads will see their effects.
  
          :param int timeout: The timeout for uploading the mission. No timeout if not provided or set to None.