docs: def get_resource_data(ref_key, ref_id, scenario_id, type_id=None, expunge_session=True, **kwargs):
      """
          Get all the resource scenarios for a given resource
          in a given scenario. If type_id is specified, only
          return the resource scenarios for the attributes
          within the type.
      """
  
      user_id = kwargs.get('user_id')
  
      resource_data_qry = db.DBSession.query(ResourceScenario).filter(
          ResourceScenario.dataset_id   == Dataset.id,
          ResourceAttr.id == ResourceScenario.resource_attr_id,
          ResourceScenario.scenario_id == scenario_id,
          ResourceAttr.ref_key == ref_key,
          or_(
              ResourceAttr.network_id==ref_id,
              ResourceAttr.node_id==ref_id,
              ResourceAttr.link_id==ref_id,
              ResourceAttr.group_id==ref_id
          )).distinct().\
              options(joinedload('resourceattr')).\
              options(joinedload_all('dataset.metadata')).\
              order_by(ResourceAttr.attr_is_var)
  
      if type_id is not None:
          attr_ids = []
          rs = db.DBSession.query(TypeAttr).filter(TypeAttr.type_id==type_id).all()
          for r in rs:
              attr_ids.append(r.attr_id)
  
          resource_data_qry = resource_data_qry.filter(ResourceAttr.attr_id.in_(attr_ids))
  
      resource_data = resource_data_qry.all()
  
      for rs in resource_data:
  
          #TODO: Design a mechanism to read the value of the dataset if it's stored externally
  
          if rs.dataset.hidden == 'Y':
             try:
                  rs.dataset.check_read_permission(user_id)
             except:
                 rs.dataset.value      = None
  
      if expunge_session == True:
          db.DBSession.expunge_all()
  
      return resource_data