Ë
    YõÔi<  ã                   óš   — d Z ddlZddlZddlmZmZ ddlZddlmZ  ej                  e
«      Z G d„ de«      Z G d„ d	«      Zd
edefd„Zy)zWrapper na API CRM dgred.com.é    N)ÚAnyÚIterableé   )Úconfigc                   ó   — e Zd ZdZy)ÚCRMErroru   BÅ‚Ä…d komunikacji z CRM.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú4/var/www/html/scraper-prawny.klono.ai/scraper/crm.pyr   r      s   „ Ú#r   r   c                   ó  — e Zd Zej                  ej
                  ej                  fdededefd„Z	dedefd„Z
dededefd	„Zdefd
„Zdedefd„Zddedee   fd„Zdedz  dedz  defd„Zdededefd„Zdededefd„Zy)Ú	CRMClientÚbase_urlÚapi_keyÚtimeoutc                 óÌ   — |j                  d«      | _        || _        || _        t	        j
                  «       | _        | j                  j                  j                  ddi«       y )Nú/ÚAcceptzapplication/json)	Úrstripr   r   r   ÚrequestsÚSessionÚsessionÚheadersÚupdate)Úselfr   r   r   s       r   Ú__init__zCRMClient.__init__   sP   € ð !Ÿ™¨Ó,ˆŒØˆŒØˆŒÜ×'Ñ'Ó)ˆŒØ�‰×Ñ×#Ñ# XÐ/AÐ$BÕCr   ÚpathÚreturnc                 ó"   — | j                   › |› �S ©N)r   )r   r    s     r   Ú_urlzCRMClient._url    s   € Ø—-‘-�  Ð'Ð'r   Úmethodc                 óö  — |j                  di «      xs i }| j                  |d<   	  | j                  j                  || j	                  |«      f|| j
                  dœ|¤Ž}|j                  dk\  r-t        |› d|› d|j                  › d|j                  d d	 › �«      ‚	 |j                  «       S # t        j                  $ r}t        d|› �«      |‚d }~ww xY w# t        $ r}t        d
|› d|› �«      |‚d }~ww xY w)NÚparamsÚapiKey)r'   r   zNetwork error: i�  ú u
    â†’ HTTP z: i,  zInvalid JSON from )Úpopr   r   Úrequestr$   r   r   ÚRequestExceptionr   Ústatus_codeÚtextÚjsonÚ
ValueError)r   r%   r    Úkwargsr'   ÚrÚes          r   Ú_requestzCRMClient._request#   s  € Ø—‘˜H bÓ)Ò/¨RˆØŸ<™<ˆˆxÑð	9Ø$�—‘×$Ñ$Ø˜Ÿ	™	 $›ðØ06ÀÇÁñØPVñˆAð �=‰=˜CÒÜ˜f˜X Q t f¨J°q·}±}°oÀRÈÏÉÈtÐPSÈÀ~ÐVÓWÐWð	DØ—6‘6“8ˆOøô ×(Ñ(ò 	9Ü˜_¨Q¨CÐ0Ó1°qÐ8ûð	9ûô ò 	DÜÐ/°¨v°R¸°sÐ;Ó<À!ÐCûð	Dús/   §:B. ÂC Â.CÃCÃCÃ	C8Ã!C3Ã3C8c                 óV   — | j                  ddddi¬«      }|j                  d«      dk(  S )u5   Test poÅ‚Ä…czenia â€” zwraca True jeÅ›li API dziaÅ‚a.ÚGETú/clientsÚlimitr   ©r'   ÚstatusÚok)r4   Úget©r   Údatas     r   ÚpingzCRMClient.ping6   s.   € à�}‰}˜U J¸À°|ˆ}ÓDˆØ�x‰x˜Ó! TÑ)Ð)r   r>   c                 ó*   — | j                  dd|¬«      S )u'   POST /clients â€” dodanie nowego leada.ÚPOSTr7   ©r/   ©r4   r=   s     r   Úadd_leadzCRMClient.add_lead;   s   € à�}‰}˜V Z°dˆ}Ó;Ð;r   Ú	page_sizec                 óö   — g }d}	 | j                  dd||dœ¬«      }|j                  dg «      xs g }|j                  |«       |j                  dd«      }||k\  s|s	 |S |dz  }t        j                  d«       Œu)	u8   GET /clients â€” paginowane pobranie wszystkich leadÃ³w.r   r6   r7   )Úpager8   r9   r>   Úpagesgš™™™™™É?)r4   r<   ÚextendÚtimeÚsleep)r   rE   Ú	all_leadsrG   Úrespr>   rH   s          r   Úget_all_leadszCRMClient.get_all_leads?   s’   € à "ˆ	ØˆØØ—=‘=Ø�z°4À)Ñ*Lð !ó ˆDð —8‘8˜F BÓ'Ò-¨2ˆDØ×Ñ˜TÔ"Ø—H‘H˜W aÓ(ˆEØ�uŠ}¡DØð Ðð �A‰IˆDÜ�J‰J�sŒOð r   ÚemailNÚphonec                 ó  — |s|sy| j                  «       }|D ]l  }|r7|j                  d«      r&|d   j                  «       |j                  «       k(  r y|sŒ?|j                  d«      sŒQt        |d   «      t        |«      k(  sŒl y y)uõ   Sprawdzenie czy lead z danym emailem lub telefonem juÅ¼ istnieje.

        Uwaga: do masowej deduplikacji uÅ¼ywaj klasy Deduplicator (cache w pamiÄ™ci).
        Ta metoda wykonuje peÅ‚en pull kaÅ¼dorazowo i jest tylko do testÃ³w ad-hoc.
        FrO   TrP   )rN   r<   ÚlowerÚ_norm_phone)r   rO   rP   ÚleadsÚleads        r   Úlead_existszCRMClient.lead_existsP   s€   € ñ ™UØØ×"Ñ"Ó$ˆØò 	ˆDÙ˜Ÿ™ 'Ô*¨t°G©}×/BÑ/BÓ/DÈÏÉËÒ/UÙÚ˜Ÿ™ 'Õ*¬{¸4À¹=Ó/IÌ[ÐY^ÓM_Ó/_Ùð		ð
 r   Ú	client_idÚnotec                 ó6   — | j                  dd|› d�d|i¬«      S )zPOST /clients/{id}/notes.rA   z	/clients/z/notesÚcontentrB   rC   )r   rW   rX   s      r   Úadd_notezCRMClient.add_note`   s-   € à�}‰}Ø�i 	˜{¨&Ð1¸ÀDÐ8Ið ó 
ð 	
r   c                 ó0   — | j                  dd|› �|¬«      S )zPUT /client/{id}.ÚPUTz/client/rB   rC   )r   rW   r>   s      r   Úupdate_leadzCRMClient.update_leadf   s   € à�}‰}˜U h¨y¨kÐ$:Àˆ}ÓFÐFr   )éd   )r	   r
   r   r   ÚCRM_BASE_URLÚCRM_API_KEYÚREQUEST_TIMEOUTÚstrÚintr   r$   Údictr4   Úboolr?   rD   ÚlistrN   rV   r[   r^   r   r   r   r   r      s  „ ð ×+Ñ+Ø×)Ñ)Ø×-Ñ-ñ	
Dàð
Dð ð
Dð ó	
Dð(˜ð ( ó (ðD˜sð D¨#ð D¸Dó Dð&*�dó *ð
<˜Tð < dó <ñ sð °T¸$±Zó ð"  t¡ð °C¸$±Jð À4ó ð 
 #ð 
¨Sð 
°Tó 
ðG Sð G°ð G¸ô Gr   r   rP   r!   c                 ó:   — dj                  d„ | xs dD «       «      S )NÚ c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wr#   )Úisdigit)Ú.0Úcs     r   ú	<genexpr>z_norm_phone.<locals>.<genexpr>l   s   è ø€ Ò;˜¨q¯y©y­{”1Ñ;ùs   ‚˜)Újoin)rP   s    r   rS   rS   k   s   € Ø�7‰7Ñ;˜uš{¨Ô;Ó;Ð;r   )r   ÚloggingrJ   Útypingr   r   r   ri   r   Ú	getLoggerr	   ÚlogÚ	Exceptionr   r   rc   rS   r   r   r   ú<module>ru      sW   ðÙ #ã Û ß  ã å à€g×Ñ˜Ó!€ô$ˆyô $÷VGñ VGðr<�sð <˜sô <r   