docs: def portal_touch_up(self, touch):
          """Try to create a portal between the spots the user chose."""
          try:
              # If the touch ended upon a spot, and there isn't
              # already a portal between the origin and this
              # destination, create one.
              destspot = next(self.spots_at(*touch.pos))
              orig = self.origspot.proxy
              dest = destspot.proxy
              if not(
                  orig.name in self.character.portal and
                  dest.name in self.character.portal[orig.name]
              ):
                  port = self.character.new_portal(
                      orig.name,
                      dest.name
                  )
                  self.arrowlayout.add_widget(
                      self.make_arrow(port)
                  )
              # And another in the opposite direction if needed
                  if (
                      hasattr(self, 'protoportal2') and not(
                              orig.name in self.character.preportal and
                              dest.name in self.character.preportal[orig.name]
                          )
                  ):
                      deport = self.character.new_portal(
                          dest.name,
                          orig.name
                      )
                      self.arrowlayout.add_widget(
                          self.make_arrow(deport)
                      )
          except StopIteration:
              pass
          self.remove_widget(self.protoportal)
          if hasattr(self, 'protoportal2'):
              self.remove_widget(self.protoportal2)
              del self.protoportal2
          self.remove_widget(self.protodest)
          del self.protoportal
          del self.protodest