docs: def get_network(network_id, summary=False, include_data='N', scenario_ids=None, template_id=None, **kwargs):
      """
          Return a whole network as a dictionary.
          network_id: ID of the network to retrieve
          include_data: 'Y' or 'N'. Indicate whether scenario data is to be returned.
                        This has a significant speed impact as retrieving large amounts
                        of data can be expensive.
          scenario_ids: list of IDS to be returned. Used if a network has multiple
                        scenarios but you only want one returned. Using this filter
                        will speed up this function call.
          template_id:  Return the network with only attributes associated with this
                        template on the network, groups, nodes and links.
      """
      log.debug("getting network %s"%network_id)
      user_id = kwargs.get('user_id')
  
      network_id = int(network_id)
  
      try:
          log.debug("Querying Network %s", network_id)
          net_i = db.DBSession.query(Network).filter(
                                  Network.id == network_id).options(
                                  noload('scenarios')).options(
                                  noload('nodes')).options(
                                  noload('links')).options(
                                  noload('types')).options(
                                  noload('attributes')).options(
                                  noload('resourcegroups')).one()
  
          net_i.check_read_permission(user_id)
  
          net = JSONObject(net_i)
  
          net.nodes          = _get_nodes(network_id, template_id=template_id)
          net.links          = _get_links(network_id, template_id=template_id)
          net.resourcegroups = _get_groups(network_id, template_id=template_id)
          net.owners         = _get_network_owners(network_id)
  
          if summary is False:
              all_attributes = _get_all_resource_attributes(network_id, template_id)
              log.info("Setting attributes")
              net.attributes = all_attributes['NETWORK'].get(network_id, [])
              for node_i in net.nodes:
                  node_i.attributes = all_attributes['NODE'].get(node_i.id, [])
              log.info("Node attributes set")
              for link_i in net.links:
                  link_i.attributes = all_attributes['LINK'].get(link_i.id, [])
              log.info("Link attributes set")
              for group_i in net.resourcegroups:
                  group_i.attributes = all_attributes['GROUP'].get(group_i.id, [])
              log.info("Group attributes set")
  
  
          log.info("Setting types")
          all_types = _get_all_templates(network_id, template_id)
          net.types = all_types['NETWORK'].get(network_id, [])
          for node_i in net.nodes:
              node_i.types = all_types['NODE'].get(node_i.id, [])
          for link_i in net.links:
              link_i.types = all_types['LINK'].get(link_i.id, [])
          for group_i in net.resourcegroups:
              group_i.types = all_types['GROUP'].get(group_i.id, [])
  
          log.info("Getting scenarios")
  
          net.scenarios = _get_scenarios(network_id, include_data, user_id, scenario_ids)
  
      except NoResultFound:
          raise ResourceNotFoundError("Network (network_id=%s) not found." %
                                    network_id)
  
      return net