code: def parse_node(self, node, node_path, package_project_config, tags=None,
                     fqn_extra=None, fqn=None, agate_table=None,
                     archive_config=None, column_name=None):
          
          logger.debug("Parsing {}".format(node_path))
  
          tags = coalesce(tags, [])
          fqn_extra = coalesce(fqn_extra, [])
  
          if fqn is None:
              fqn = self.get_fqn(node, package_project_config, fqn_extra)
  
          config = SourceConfig(
              self.root_project_config,
              package_project_config,
              fqn,
              node.resource_type)
  
          parsed_dict = self._build_intermediate_node_dict(
              config, node.serialize(), node_path, config, tags, fqn,
              agate_table, archive_config, column_name
          )
          parsed_node = ParsedNode(**parsed_dict)
  
          self._render_with_context(parsed_node, config)
          self._update_parsed_node_info(parsed_node, config)
  
          parsed_node.validate()
  
          return parsed_node
docs: Parse a node, given an UnparsedNode and any other required information.
  
          agate_table should be set if the node came from a seed file.
          archive_config should be set if the node is an Archive node.
          column_name should be set if the node is a Test node associated with a
          particular column.