
    2i'                     8    d dl mZmZmZ ddlmZ  G d d      Zy)    )ListOptionalUnion   )quote_stringc                   t    e Zd ZdZ	 	 	 	 ddee   dee   deeeee   f      fdZ	defdZ
defd	Zdefd
Zy)Nodez
    A graph node.
    Nnode_idaliaslabelsc                    || _         || _        d| _        t        |t              r-|D cg c]  }t        |t
              s|dk7  s| c}| _        nt        |t
              r|dk7  r|g| _        |xs i | _        yc c}w )a5  
        Create a new node.

        Args:
            node_id: The ID of the node.
            alias: An alias for the node (default is empty string).
            labels: The label or list of labels for the node.
            properties: The properties of the node.

        Returns:
            None
        N )idr   r   
isinstanceliststr
properties)selfr
   r   r   r   ls         W/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/falkordb/node.py__init__zNode.__init__	   so      
fd#&,O
1c0BqBw1ODK$2!(DK$*	 Ps   A< A<A<returnc                     d}| j                   rDdj                  d t        | j                   j                               D              }|d|z   dz   z  }|S )z
        Get a string representation of the node's properties.

        Returns:
            str: A string representation of the node's properties.
        r   ,c              3   V   K   | ]!  \  }}|d z   t        t        |            z    # yw:Nr   r   .0keyvals      r   	<genexpr>z!Node.to_string.<locals>.<genexpr>-   /      C c	CS 122   '){})r   joinsorteditemsr   respropss      r   	to_stringzNode.to_string$   sW     ??HH  &t'<'<'> ? E 3;$$C
    c                 D   d}| j                   r|| j                   z  }| j                  r!|ddj                  | j                        z   z  }| j                  rDdj                  d t	        | j                  j                               D              }|d|z   dz   z  }|dz  }|S )z
        Get a string representation of the node.

        Returns:
            str: A string representation of the node.
        (r   r   c              3   V   K   | ]!  \  }}|d z   t        t        |            z    # ywr   r   r   s      r   r#   zNode.__str__.<locals>.<genexpr>B   r$   r%   r&   r'   ))r   r   r(   r   r)   r*   r+   s      r   __str__zNode.__str__5   s     ::4::C;;3$++...C??HH  &t'<'<'> ? E 3;$$Cs

r/   c                 J   t        |t              sy| j                  &|j                  | j                  |j                  k7  ry| j                  |j                  k7  ryt	        | j
                        t	        |j
                        k7  ry| j
                  |j
                  k7  ryy)z
        Check if two nodes are equal.

        Args:
            rhs: The node to compare.

        Returns:
            bool: True if the nodes are equal, False otherwise.
        FT)r   r	   r   r   lenr   )r   rhss     r   __eq__zNode.__eq__K   s     #t$ 77366#5$''SVV:K ;;#**$ t3s~~#66 ??cnn,r/   )Nr   NN)__name__
__module____qualname____doc__r   intr   r   r   r   r.   r4   boolr8    r/   r   r	   r	      so     15(*;? + + +!%T#Y"78+63 " ,T r/   r	   N)typingr   r   r   helpersr   r	   r?   r/   r   <module>rB      s    ( ( !e er/   