NebulaGraph

class NebulaGraph(BaseGraphStorage):

init

def __init__(
    self,
    host,
    username,
    password,
    space,
    port = 9669,
    timeout = 10000
):

Initializes the NebulaGraph client.

Parameters:

  • host (str): The host address of the NebulaGraph service.
  • username (str): The username for authentication.
  • password (str): The password for authentication.
  • space (str): The graph space to use. If it doesn’t exist, a new one will be created.
  • port (int, optional): The port number for the connection. (default: :obj:9669)
  • timeout (int, optional): The connection timeout in milliseconds. (default: :obj:10000)

_init_connection_pool

def _init_connection_pool(self):

Returns:

ConnectionPool: A connection pool instance.

_get_session

def _get_session(self):

Returns:

Session: A session object connected to NebulaGraph.

get_client

def get_client(self):

Get the underlying graph storage client.

query

def query(self, query: str):

Execute a query on the graph store.

Parameters:

  • query (str): The Cypher-like query to be executed.

Returns:

ResultSet: The result set of the query execution.

get_relationship_types

def get_relationship_types(self):

Returns:

List[str]: A list of relationship (edge) type names.

add_graph_elements

def add_graph_elements(self, graph_elements: List[GraphElement]):

Add graph elements (nodes and relationships) to the graph.

Parameters:

  • graph_elements (List[GraphElement]): A list of graph elements containing nodes and relationships.

ensure_edge_type_exists

def ensure_edge_type_exists(self, edge_type: str, time_label: Optional[str] = None):

Ensures that a specified edge type exists in the NebulaGraph database. If the edge type already exists, this method does nothing.

Parameters:

  • edge_type (str): The name of the edge type to be created.
  • time_label (str, optional): A specific timestamp to set as the default value for the time label property. If not provided, no timestamp will be added. (default: :obj:None)

ensure_tag_exists

def ensure_tag_exists(self, tag_name: str, time_label: Optional[str] = None):

Ensures a tag is created in the NebulaGraph database. If the tag already exists, it does nothing.

Parameters:

  • tag_name (str): The name of the tag to be created.
  • time_label (str, optional): A specific timestamp to set as the default value for the time label property. If not provided, no timestamp will be added. (default: :obj:None)

add_node

def add_node(
    self,
    node_id: str,
    tag_name: str,
    time_label: Optional[str] = None
):

Add a node with the specified tag and properties.

Parameters:

  • node_id (str): The ID of the node.
  • tag_name (str): The tag name of the node.
  • time_label (str, optional): A specific timestamp to set for the node’s time label property. If not provided, no timestamp will be added. (default: :obj:None)

_extract_nodes

def _extract_nodes(self, graph_elements: List[Any]):

Extracts unique nodes from graph elements.

Parameters:

  • graph_elements (List[Any]): A list of graph elements containing nodes.

Returns:

List[Dict]: A list of dictionaries representing nodes.

_extract_relationships

def _extract_relationships(self, graph_elements: List[Any]):

Extracts relationships from graph elements.

Parameters:

  • graph_elements (List[Any]): A list of graph elements containing relationships.

Returns:

List[Dict]: A list of dictionaries representing relationships.

refresh_schema

def refresh_schema(self):

Refreshes the schema by fetching the latest schema details.

get_structured_schema

def get_structured_schema(self):

Returns:

Dict[str, Any]: A dictionary representing the structured schema.

get_schema

def get_schema(self):

Returns:

str: A string describing the schema.

get_indexes

def get_indexes(self):

Returns:

List[str]: A list of tag index names.

add_triplet

def add_triplet(
    self,
    subj: str,
    obj: str,
    rel: str,
    time_label: Optional[str] = None
):

Adds a relationship (triplet) between two entities in the Nebula Graph database.

Parameters:

  • subj (str): The identifier for the subject entity.
  • obj (str): The identifier for the object entity.
  • rel (str): The relationship between the subject and object.
  • time_label (str, optional): A specific timestamp to set for the time label property of the relationship. If not provided, no timestamp will be added. (default: :obj:None)

delete_triplet

def delete_triplet(
    self,
    subj: str,
    obj: str,
    rel: str
):

Deletes a specific triplet (relationship between two entities) from the Nebula Graph database.

Parameters:

  • subj (str): The identifier for the subject entity.
  • obj (str): The identifier for the object entity.
  • rel (str): The relationship between the subject and object.

delete_entity

def delete_entity(self, entity_id: str):

Deletes an entity (vertex) from the graph.

Parameters:

  • entity_id (str): The identifier of the entity to be deleted.

_check_edges

def _check_edges(self, entity_id: str):

Checks if an entity has any remaining edges in the graph.

Parameters:

  • entity_id (str): The identifier of the entity.

Returns:

bool: :obj:True if the entity has edges, :obj:False otherwise.

get_node_properties

def get_node_properties(self):

Returns:

Tuple[List[str], List[Dict[str, Any]]]: A tuple where the first element is a list of node schema properties, and the second element is a list of dictionaries representing node structures.

get_relationship_properties

def get_relationship_properties(self):

Returns:

Tuple[List[str], List[Dict[str, Any]]]: A tuple where the first element is a list of relationship schema properties, and the second element is a list of dictionaries representing relationship structures.

_validate_time_label

def _validate_time_label(self, time_label: str):

Validates the format of a time label string.

Parameters:

  • time_label (str): The time label string to validate. Should be in format ‘YYYY-MM-DDThh:mm:ss’.

Returns:

str: The validated time label.