docs: def add_link(network_id, link,**kwargs):
      """
          Add a link to a network
      """
      user_id = kwargs.get('user_id')
  
      #check_perm(user_id, 'edit_topology')
      try:
          net_i = db.DBSession.query(Network).filter(Network.id == network_id).one()
          net_i.check_write_permission(user_id)
      except NoResultFound:
          raise ResourceNotFoundError("Network %s not found"%(network_id))
  
      try:
          node_1 = db.DBSession.query(Node).filter(Node.id==link.node_1_id).one()
          node_2 = db.DBSession.query(Node).filter(Node.id==link.node_2_id).one()
      except NoResultFound:
          raise ResourceNotFoundError("Nodes for link not found")
  
      link_i = net_i.add_link(link.name, link.description, link.layout, node_1, node_2)
  
      hdb.add_resource_attributes(link_i, link.attributes)
  
      db.DBSession.flush()
  
      if link.types is not None and len(link.types) > 0:
          res_types = []
          res_attrs = []
          res_scenarios = {}
          for typesummary in link.types:
              ra, rt, rs = template.set_resource_type(link_i,
                                          typesummary.id,
                                           **kwargs)
              res_types.append(rt)
              res_attrs.extend(ra)
              res_scenarios.update(rs)#rs is a dict
  
          if len(res_types) > 0:
              db.DBSession.bulk_insert_mappings(ResourceType, res_types)
          if len(res_attrs) > 0:
              db.DBSession.bulk_insert_mappings(ResourceAttr, res_attrs)
  
              new_res_attrs = db.DBSession.query(ResourceAttr).order_by(ResourceAttr.id.desc()).limit(len(res_attrs)).all()
              all_rs = []
              for ra in new_res_attrs:
                  ra_id = ra.id
                  if ra.attr_id in res_scenarios:
                      rs_list = res_scenarios[ra.attr_id]
                      for rs in rs_list:
                          rs_list[rs]['resource_attr_id'] = ra_id
                          all_rs.append(rs_list[rs])
  
              if len(all_rs) > 0:
                  db.DBSession.bulk_insert_mappings(ResourceScenario, all_rs)
  
      db.DBSession.refresh(link_i)
  
      return link_i