
    yj                        d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d d	lmZmZmZ  ej        e          ZddZddZddZdS )    )annotationsN)Anycast)update)CursorResult)AsyncSession)
exceptionsmodelsschemas)safe_cache_delete)get_or_create_peersget_peerpeer_cache_keydbr   workspace_namestrobserverobservedreturnlist[str] | Nonec          	        K   t          | |t          j        |                     d{V }t          t          t
                   dz  |j                            t          ||                              S )a  
    Get peer card from internal_metadata.

    The peer card is returned for the observer/observed relationship.

    Args:
        db: Database session
        workspace_name: Name of the workspace
        observed: Peer name of the peer described in the peer card
        observer: Peer name of the observer

    Returns:
        The peer's card text if present, otherwise None.

    Raises:
        ResourceNotFoundException: If the peer does not exist.
    nameNr   r   )	r   r   
PeerCreater   listr   internal_metadatagetconstruct_peer_card_label)r   r   r   r   peers        :/DATA/AppData/hermes/projects/honcho/src/crud/peer_card.pyget_peer_cardr"      s}      0 "ng.@h.O.O.OPPPPPPPPDS	D""%x(KKK	
 	
      	peer_card	list[str]Nonec               6  K   t          | |t          j        |          g           d{V }t          t          j                                      t          j        j        |k                                  t          j        j        |k              	                    t	          j        j
                            d          t          ||          |i                    }t          t          t                   |                     |           d{V           }|j        dk    rt%          j        d| d|           |                                  d{V  |                                 d{V  t-          ||          }t/          |           d{V  dS )	a  
    Set peer card for a peer.

    If observer_name is provided, the peer card is set for the observer/observed relationship.

    Args:
        db: Database session
        workspace_name: Name of the workspace
        peer_card: List of strings to set as the peer card
        observed: Peer name of the peer described in the peer card
        observer: Peer name of the observer

    r   Nz||r   )r   r   zPeer z not found in workspace )r   r   r   r   r
   Peerwherer   r   valuesr   opr   r   r   r   executerowcountr	   ResourceNotFoundExceptioncommitpost_commitr   r   )	r   r   r$   r   r   peers_resultstmtresult	cache_keys	            r!   set_peer_cardr5   2   s     , -
NW/X>>>?       L
 	v{	v{)^;	<	<	v{8+	,	,	$k;>>tDD-!)H     
 

 

	 	 ,s#2::d+;+;%;%;%;%;%;%;<<F!2FHFFnFF
 
 	
 ))++

"
"
$
$$$$$$$$ ~x88I
I
&
&&&&&&&&&&r#   c                    | |k    rdS | dS )Nr$   
_peer_card r   s     r!   r   r   g   s!    8{""""r#   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r$   r%   r   r   r   r   r   r&   )r   r   r   r   r   r   )
__future__r   loggingtypingr   r   
sqlalchemyr   sqlalchemy.enginer   sqlalchemy.ext.asyncior   srcr	   r
   r   src.cache.clientr   src.crud.peerr   r   r   	getLogger__name__loggerr"   r5   r   r8   r#   r!   <module>rE      s   " " " " " "                * * * * * * / / / / / / + + + + + + + + + + . . . . . . G G G G G G G G G G		8	$	$   B2' 2' 2' 2'j# # # # # #r#   