docs: def add_link(self, name, desc, layout, node_1, node_2):
          """
              Add a link to a network. Links are what effectively
              define the network topology, by associating two already
              existing nodes.
          """
  
          existing_link = get_session().query(Link).filter(Link.name==name, Link.network_id==self.id).first()
          if existing_link is not None:
              raise HydraError("A link with name %s is already in network %s"%(name, self.id))
  
          l = Link()
          l.name        = name
          l.description = desc
          l.layout           = json.dumps(layout) if layout is not None else None
          l.node_a           = node_1
          l.node_b           = node_2
  
          get_session().add(l)
  
          self.links.append(l)
  
          return l