Ë
    ãß²j°  ã                   ón   — d Z ddlZddlZ ej                  «       Zd„ Zd„ Zd„ Zdd„Zdd„Z	d„ Z
d	efd
„Zy)aE  Shared lark_oapi plumbing for the feishu_doc / feishu_drive tool modules.

Holds the per-thread client handle, the cheap availability probe, and the generic
``BaseRequest`` builder + response unpacking (same pattern as feishu_comment.py).
No ``registry.register`` here on purpose: tool discovery must not import this module.
é    Nc                 ó   — | t         _        y)zFStore a lark client for the current thread (called by feishu_comment).N)Ú_localÚclient)r   s    ú6/home/ubuntu/.hermes/hermes-agent/tools/feishu_lark.pyÚ
set_clientr      s	   € à„F…Mó    c                  ó$   — t        t        dd«      S )z7Return the lark client for the current thread, or None.r   N)Úgetattrr   © r   r   Ú
get_clientr      s   € ä”6˜8 TÓ*Ð*r   c                  óp   — dd l } 	 | j                  j                  d«      d uS # t        t        f$ r Y yw xY w)Nr   Ú	lark_oapiF)Úimportlib.utilÚutilÚ	find_specÚImportErrorÚ
ValueError)Ú	importlibs    r   Ú_check_feishur      s=   € ó ðØ�~‰~×'Ñ'¨Ó4¸DÐ@Ð@øÜœÐ$ò Ùðús   †# £5´5c                 ó~  — ddl m} ddlm} ddlm} |j                  «       j                  | dk(  r|j                  n|j                  «      j                  |«      j                  |j                  h«      }|r|j                  |«      }|r|j                  |«      }|�|j                  |«      }|j!                  «       S )zMBuild a tenant-token BaseRequest. Raises ImportError if lark_oapi is missing.r   )ÚAccessTokenType)Ú
HttpMethod)ÚBaseRequestÚGET)r   r   Úlark_oapi.core.enumr   Ú!lark_oapi.core.model.base_requestr   ÚbuilderÚhttp_methodr   ÚPOSTÚuriÚtoken_typesÚTENANTÚpathsÚqueriesÚbodyÚbuild)	Úmethodr    r#   r$   r%   r   r   r   r   s	            r   Úbuild_requestr(   %   s˜   € å)Ý.Ý=ð 	×ÑÓß	‰ v°¢�Z—^’^¸J¿O¹OÓ	Lß	‰ˆS‹ß	‰�o×,Ñ,Ð-Ó	.ð	 ñ
 Ø—-‘- Ó&ˆÙØ—/‘/ 'Ó*ˆØÐØ—,‘,˜tÓ$ˆØ�=‰=‹?Ðr   c           	      ó†   — | j                  t        |||||«      «      }t        |dd«      t        |dd«      t        |«      fS )zÈBuild + execute a BaseRequest; returns (code, msg, data_dict).

    Tool handlers run synchronously in a worker thread (no running event loop), so the
    blocking lark client is called directly.
    ÚcodeNÚmsgÚ )Úrequestr(   r
   Úresponse_data)r   r'   r    r#   r$   r%   Úresponses          r   Ú	lark_callr0   9   sD   € ð �~‰~œm¨F°C¸ÀÈÓNÓO€HÜ�8˜V TÓ*¬G°H¸eÀRÓ,HÌ-ÐX`ÓJaÐaÐar   c                 óâ   — t        | dd«      }	 |r+t        |d«      rt        j                  |j                  «      nd}t        |t        «      r|S dS # t        j
                  t        f$ r Y yw xY w)zTParsed JSON object of the raw HTTP body, or None when absent/unparseable/not a dict.ÚrawNÚcontent)	r
   ÚhasattrÚjsonÚloadsr3   ÚJSONDecodeErrorÚAttributeErrorÚ
isinstanceÚdict)r/   r2   r%   s      r   Úraw_bodyr;   C   si   € ä
�(˜E 4Ó
(€CðÙ*-´'¸#¸yÔ2IŒt�z‰z˜#Ÿ+™+Ô&Ètˆô ˜d¤DÔ)ˆ4Ð3¨tÐ3øô × Ñ ¤.Ð1ò Ùðús   �/A ÁA.Á-A.Úreturnc                 óÀ   — t        | «      }|�|j                  di «      ni }|r|S t        | dd«      }t        |t        «      r|S |rt        |d«      rt        |«      S |S )zP``data`` of a lark response: prefer the raw JSON body, fall back to typed .data.NÚdataÚ__dict__)r;   Úgetr
   r9   r:   r4   Úvars)r/   r%   r>   Ú	resp_datas       r   r.   r.   M   sd   € ä�HÓ€DØ#'Ð#3ˆ4�8‰8�F˜BÔ¸€DÙØˆÜ˜ &¨$Ó/€IÜ�)œTÔ"ØÐÙ'¬G°I¸zÔ,JŒ4�	‹?ÐTÐPTÐTr   )NNN)Ú__doc__r5   Ú	threadingÚlocalr   r   r   r   r(   r0   r;   r:   r.   r   r   r   ú<module>rF      sO   ðñó Û ð 
ˆ�‰Ó	€òò
+ò
óó(bò4ð	U˜tô 	Ur   