docs: def get_or_create_node(self, graph: BELGraph, node: BaseEntity) -> Optional[Node]:
          """Create an entry and object for given node if it does not exist."""
          sha512 = node.as_sha512()
          if sha512 in self.object_cache_node:
              return self.object_cache_node[sha512]
  
          node_model = self.get_node_by_hash(sha512)
  
          if node_model is not None:
              self.object_cache_node[sha512] = node_model
              return node_model
  
          node_model = Node._start_from_base_entity(node)
  
          namespace = node.get(NAMESPACE)
          if namespace is None:
              pass
  
          elif namespace in graph.namespace_url:
              url = graph.namespace_url[namespace]
              name = node[NAME]
              entry = self.get_namespace_entry(url, name)
  
              if entry is None:
                  log.debug('skipping node with identifier %s: %s', url, name)
                  return
  
              self.session.add(entry)
              node_model.namespace_entry = entry
  
          elif namespace in graph.namespace_pattern:
              name = node[NAME]
              pattern = graph.namespace_pattern[namespace]
              entry = self.get_or_create_regex_namespace_entry(namespace, pattern, name)
  
              self.session.add(entry)
              node_model.namespace_entry = entry
  
          else:
              log.warning("No reference in BELGraph for namespace: {}".format(node[NAMESPACE]))
              return
  
          if VARIANTS in node or FUSION in node:
              node_model.is_variant = True
              node_model.has_fusion = FUSION in node
  
              modifications = self.get_or_create_modification(graph, node)
  
              if modifications is None:
                  log.warning('could not create %s because had an uncachable modification', node.as_bel())
                  return
  
              node_model.modifications = modifications
  
          self.session.add(node_model)
          self.object_cache_node[sha512] = node_model
          return node_model