Ë
    <*,j,  ã                  ót   — d Z ddlmZ ddlZddlmZ ddlZddlmZ  ej                  e
«      Z G d„ d«      Zy)z,dgred CRM REST API client with dry-run mode.é    )ÚannotationsN)ÚAny)ÚSettingsc                  óp   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zy)ÚDgredClientzCWrapper around dgred API v1. All calls append ?apiKey=... for auth.c                óÌ   — |j                   j                  d«      | _        |j                  | _        |j
                  | _        t        j                  d¬«      | _        i | _	        y )Nú/é   )Útimeout)
Údgred_base_urlÚrstripÚbase_urlÚdgred_api_keyÚapi_keyÚdry_runÚhttpxÚClientÚ_httpÚ_status_cache)ÚselfÚsettingss     úE/var/www/html/agent.samochodowy/src/agent_samochodowy/dgred/client.pyÚ__init__zDgredClient.__init__   sL   € Ø ×/Ñ/×6Ñ6°sÓ;ˆŒØ×-Ñ-ˆŒØ×'Ñ'ˆŒÜ—\‘\¨"Ô-ˆŒ
Ø-/ˆÕó    c                óP   — d|v rdnd}| j                   › |› |› d| j                  › �S )Nú?ú&zapiKey=)r   r   )r   ÚpathÚseps      r   Ú_urlzDgredClient._url   s0   € Ø˜D‘[‰c cˆØ—-‘-�   s e¨7°4·<±<°.ÐAÐAr   c                ó–   — | j                   j                  | j                  |«      «      }|j                  «        |j	                  «       S ©N)r   Úgetr    Úraise_for_statusÚjson)r   r   Úresps      r   Ú_getzDgredClient._get!   s4   € Ø�z‰z�~‰~˜dŸi™i¨›oÓ.ˆØ×ÑÔØ�y‰y‹{Ðr   c                ó  — | j                   rt        j                  d||«       ddiS | j                  j	                  | j                  |«      |¬«      }|j                  «        |j                  «       }t        |t        «      r	d|v r|d   S |S )Nu   [DRY-RUN] POST %s â€” %sÚidz
dry-run-id©r%   Údata)
r   ÚloggerÚinfor   Úpostr    r$   r%   Ú
isinstanceÚdict©r   r   Úpayloadr&   Úbodys        r   Ú_postzDgredClient._post&   sy   € Ø�<Š<Ü�K‰KÐ2°D¸'ÔBØ˜,Ð'Ð'Ø�z‰z�‰˜tŸy™y¨›°WˆÓ=ˆØ×ÑÔØ�y‰y‹{ˆä�dœDÔ! f°¡nØ˜‘<ÐØˆr   c                ó  — | j                   rt        j                  d||«       i S | j                  j	                  | j                  |«      |¬«      }|j                  «        |j                  «       }t        |t        «      r	d|v r|d   S |S )Nu   [DRY-RUN] PUT %s â€” %sr*   r+   )
r   r,   r-   r   Úputr    r$   r%   r/   r0   r1   s        r   Ú_putzDgredClient._put2   ss   € Ø�<Š<Ü�K‰KÐ1°4¸ÔAØˆIØ�z‰z�~‰~˜dŸi™i¨›o°Gˆ~Ó<ˆØ×ÑÔØ�y‰y‹{ˆÜ�dœDÔ! f°¡nØ˜‘<ÐØˆr   c                ó:  — | j                   r| j                   S | j                  rQt        |d«      D ��ci c]  \  }}||“Œ
 c}}| _         t        j	                  d| j                   «       | j                   S | j                  d«      }t        |t        «      r|n|j                  dg «      }i }|D ]  }|d   ||d   <   Œ |D ]J  }||vsŒ| j                  dd|i«      }|j                  dd«      ||<   t        j	                  d	|||   «       ŒL || _         |S c c}}w )
u<   Ensure required client statuses exist; return nameâ†’id map.é   z[DRY-RUN] Status map: %sz/client-statusesr+   r)   Únamez/client-statuses/addr   z Created dgred status: %s (id=%s))
r   r   Ú	enumerater,   r-   r'   r/   Úlistr#   r4   )	r   ÚnamesÚir:   ÚrawÚexistingÚ
name_to_idÚsÚresults	            r   Úensure_statuseszDgredClient.ensure_statusesA   s#  € à×ÒØ×%Ñ%Ð%à�<Š<ä9BÀ5È!Ó9L×!M©g¨a° $¨¡'Ó!MˆDÔÜ�K‰KÐ2°D×4FÑ4FÔGØ×%Ñ%Ð%à�i‰iÐ*Ó+ˆÜ$ S¬$Ô/‘3°S·W±W¸VÀRÓ5HˆØ%'ˆ
Øò 	,ˆAØ$% d¡GˆJ�q˜‘yÒ!ð	,ð ò 	XˆDØ˜:Ò%ØŸ™Ð$:¸VÀT¸NÓK�Ø#)§:¡:¨d°AÓ#6�
˜4Ñ Ü—‘Ð>ÀÀjÐQUÑFVÕWð		Xð (ˆÔØÐùó# "Ns   ´Dc                ó&   — | j                  d|«      S )z5Create a new client. Returns the created client dict.z/clients©r4   )r   r+   s     r   Úcreate_clientzDgredClient.create_client_   s   € à�z‰z˜* dÓ+Ð+r   c                ó,   — | j                  d|› �|«      S )zUpdate client fields.ú/client/©r7   )r   Ú	client_idr+   s      r   Úupdate_clientzDgredClient.update_clientc   s   € à�y‰y˜8 I ;Ð/°Ó6Ð6r   c                ó0   — | j                  d|› �d|i«      S )zSet externalId on a client.rI   Ú
externalIdrJ   )r   rK   Úexternal_ids      r   Úset_external_idzDgredClient.set_external_idg   s   € à�y‰y˜8 I ;Ð/°,ÀÐ1LÓMÐMr   c                ó4   — | j                  d|› d�|ddœ«      S )zAdd a note to a client.z	/clients/z/notesF)ÚcontentÚshowClientPanelrF   )r   rK   rR   s      r   Úadd_notezDgredClient.add_noteo   s)   € à�z‰z˜I i [°Ð7ØØ$ñ:
ó ð 	r   c                óD  — | j                   rt        j                  d|«       y	 | j                  d|› �«      }t	        |t
        «      r|n|j                  dg «      }|D ]  }|j                  d«      |k(  sŒ|c S  	 y# t        j                  t        t        f$ r Y yw xY w)z?Search for a client by externalId. Returns client dict or None.z([DRY-RUN] Search client by externalId=%sNz/clients?externalId=r+   rN   )r   r,   r-   r'   r/   r<   r#   r   ÚHTTPStatusErrorÚ
IndexErrorÚKeyError)r   rO   ÚresultsÚitemsÚitems        r   Úfind_client_by_external_idz&DgredClient.find_client_by_external_idz   s    € à�<Š<Ü�K‰KÐBÀKÔPØð	Ø—i‘iÐ"6°{°mÐ DÓEˆGÜ)¨'´4Ô8‘G¸g¿k¹kÈ&ÐRTÓ>UˆEØò  �Ø—8‘8˜LÓ)¨[Ó8Ø’Kñ ð
 øô ×%Ñ%¤z´8Ð<ò 	ØØð	ús   ¥AA> Á7A> Á;A> Á>BÂBc                ó8   — | j                   j                  «        y r"   )r   Úclose)r   s    r   r^   zDgredClient.close‰   s   € Ø�
‰
×ÑÕr   N)r   r   ÚreturnÚNone)r   Ústrr_   ra   )r   ra   r_   r   )r   ra   r2   r0   r_   r   )r=   z	list[str]r_   zdict[str, int])r+   r0   r_   r0   )rK   ú	int | strr+   r0   r_   r0   )rK   rb   rO   ra   r_   r0   )rK   rb   rR   ra   r_   r0   )rO   ra   r_   zdict | None)r_   r`   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r'   r4   r7   rD   rG   rL   rP   rT   r\   r^   © r   r   r   r      sC   „ ÙMó0óBóó

ó	óó<,ó7óNóóôr   r   )rf   Ú
__future__r   ÚloggingÚtypingr   r   Úagent_samochodowy.configr   Ú	getLoggerrc   r,   r   rg   r   r   ú<module>rm      s5   ðÙ 2å "ã Ý ã å -à	ˆ×	Ñ	˜8Ó	$€÷{ò {r   