code: def handle_prim_attr_node(self, node, module):
      assert node.hasAttribute("name")
      value = None
      if node.inputsAt(0).debugName() == "self":
          _val = getattr(module, node.s("name"))
          # TODO: serialize complex data type, and output proper error message
          if isinstance(_val, (int, float, str, bool)):
              value = _val
      attrs = {
          "name": node.s("name"),
          "input": node.inputsAt(0).debugName(),
          "value": value,
      }
      return node.kind(), attrs
  
imports: import re
  import torch
  from nni.nas.space.graph import Graph, GraphModelSpace, Node, Cell, Operation
  from nni.nas.nn.pytorch import InputChoice, MutationAnchor, LayerChoice, MutableModule, Repeat
  from nni.nas.utils import get_init_parameters_or_fail, get_importable_name
  from .op_types import MODULE_EXCEPT_LIST, OpTypeName
  from .utils import _convert_name, build_full_name, _without_shape_info, _extract_info_from_trace_node, get_full_name_by_scope_name, is_layerchoice_node, match_node, build_cand_name, build_python_name
label_desc: Use image node_id 5 for calling the GraphConverter obj's underlying member method code with example usage: obj.handle_prim_attr_node(node, module) and returns: node,  attrs