
    $jY                     d    d Z ddlmZmZmZ e G d de                      Z G d d          ZdS )u  Uniform row interface over heterogeneous database drivers.

ResultRow is a Protocol that describes the dict-like access pattern all
database rows must support.  asyncpg.Record already satisfies this protocol
natively (key-based access, .keys(), .values(), etc.) so the PostgreSQL
backend returns raw Records — zero wrapping overhead.

Only backends whose native row type does NOT satisfy the protocol (e.g.,
Oracle named-tuple rows) need the concrete DictResultRow wrapper.
    )AnyProtocolruntime_checkablec                   ~    e Zd ZdZdeez  defdZddededefdZdefdZ	defd	Z
defd
ZdedefdZdefdZdS )	ResultRowz<Dict-like row interface returned by all database operations.keyreturnc                     d S N selfr   s     f/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/hindsight_api/engine/db/result.py__getitem__zResultRow.__getitem__             Ndefaultc                     d S r   r   r   r   r   s      r   getzResultRow.get   r   r   c                     d S r   r   r   s    r   keyszResultRow.keys   r   r   c                     d S r   r   r   s    r   valueszResultRow.values   r   r   c                     d S r   r   r   s    r   itemszResultRow.items   r   r   c                     d S r   r   r   s     r   __contains__zResultRow.__contains__   r   r   c                     d S r   r   r   s    r   __len__zResultRow.__len__   r   r   r   )__name__
__module____qualname____doc__strintr   r   r   r   r   r   boolr   r!   r   r   r   r   r      s        FF5sSy5S5555<<s<S<C<<<<c     s111111!!!!!!!r   r   c                       e Zd ZdZdZdeddfdZdeez  defdZ	dedefd	Z
dded
edefdZdee         fdZdee         fdZdeeeef                  fdZdefdZdedefdZdefdZdefdZdS )DictResultRowu   Concrete wrapper for backends whose native rows lack dict-like access.

    Used by Oracle (named-tuple rows, plain dicts) and tests.
    asyncpg.Record satisfies ResultRow natively — do NOT wrap it.
    )_datadatar	   Nc                 >    t                               | d|           d S Nr+   )object__setattr__r   r,   s     r   __init__zDictResultRow.__init__%   s     4$/////r   r   c                 H    t                               | d          }||         S r.   r/   __getattribute__r   r   r,   s      r   r   zDictResultRow.__getitem__(   s!    &&tW55Cyr   c                    t                               | d          }t          |t                    r'	 ||         S # t          $ r t          |          d w xY w	 ||         S # t          t          f$ r t          |          d w xY wr.   )r/   r5   
isinstancedictKeyErrorAttributeError	TypeErrorr6   s      r   __getattr__zDictResultRow.__getattr__,   s    &&tW55dD!! 	44Cy  4 4 4$S))t34	09)$ 	0 	0 	0 %%4/	0s   : AA! !"Br   c                 F    	 | |         S # t           t          f$ r |cY S w xY wr   )r:   
IndexErrorr   s      r   r   zDictResultRow.get8   s:    	9*% 	 	 	NNN	s   
   c                 
   t                               | d          }t          |t                    r!t	          |                                          S t          |d          r!t	          |                                          S g S )Nr+   r   )r/   r5   r8   r9   listr   hasattrr1   s     r   r   zDictResultRow.keys>   sl    &&tW55dD!! 	%		$$$4   	%		$$$	r   c                 
   t                               | d          }t          |t                    r!t	          |                                          S t          |d          r!t	          |                                          S g S )Nr+   r   )r/   r5   r8   r9   rA   r   rB   r1   s     r   r   zDictResultRow.valuesF   sl    &&tW55dD!! 	'&&&4"" 	'&&&	r   c                    t                               | d          }t          |t                    r!t	          |                                          S t          |d          r!t	          |                                          S t	          t          |                                 | 	                                                    S )Nr+   r   )
r/   r5   r8   r9   rA   r   rB   zipr   r   r1   s     r   r   zDictResultRow.itemsN   s    &&tW55dD!! 	&

%%%4!! 	&

%%%C		T[[]]33444r   c                 D    t                               | d          }d|dS )Nr+   zDictResultRow()r4   r1   s     r   __repr__zDictResultRow.__repr__V   s(    &&tW55)))))r   c                     t                               | d          }t          |t                    r||v S t	          |d          r||                                v S dS )Nr+   r   F)r/   r5   r8   r9   rB   r   r6   s      r   r   zDictResultRow.__contains__Z   s]    &&tW55dD!! 	$;4   	&$))++%%ur   c                 V    t                               | d          }t          |          S r.   )r/   r5   lenr1   s     r   r!   zDictResultRow.__len__b   s#    &&tW554yyr   c                 V    t                               | d          }t          |          S r.   )r/   r5   r(   r1   s     r   __bool__zDictResultRow.__bool__f   s#    &&tW55Dzzr   r   )r"   r#   r$   r%   	__slots__r   r2   r&   r'   r   r=   r   rA   r   r   tupler   rH   r(   r   r!   rM   r   r   r   r*   r*      s         I0S 0T 0 0 0 0sSy S    
0s 
0s 
0 
0 
0 
0 s S C    d3i    S	    5tE#s(O, 5 5 5 5*# * * * *         $      r   r*   N)r%   typingr   r   r   r   r*   r   r   r   <module>rQ      s   	 	 4 3 3 3 3 3 3 3 3 3 	" 	" 	" 	" 	" 	" 	" 	"L L L L L L L L L Lr   