Ë
    L
(j†  ã                  óN  — d Z ddlmZ ddlZddl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Zdd	lmZ dd
lmZmZ  ej*                  e«      Z ej0                  d«      Z ej0                  d«      Zej9                  dd«      Zdd„Ze G d„ d«      «       Z G d„ d«      Z y)u(   Bazowa klasa scrapera ÅºrÃ³dÅ‚a leadÃ³w.é    )ÚannotationsN)Ú	dataclassÚfield)ÚIterator)Úurlparse)ÚRobotFileParseré   )Úconfig)Úis_billing_errorÚnotify_billing_errorz0[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}z!(?:\+?48[\s\-]?)?(?:\d[\s\-]?){9}u$   Ä…Ä‡Ä™Å‚Å„Ã³Å›ÅºÅ¼Ä„Ä†Ä˜Å�ÅƒÃ“ÅšÅ¹Å»ÚacelnoszzACELNOSZZc                ó  — | j                  t        «      j                  «       }t        j                  dd|«      }t        j                  dd|j                  «       «      }t        j                  dd|«      }|dd j                  d«      S )z=Turn a company name into a Gmail + alias slug (max 30 chars).z[^a-z0-9\s-]Ú z\s+ú-z-+Né   )Ú	translateÚ	_PL_TRANSÚlowerÚreÚsubÚstripÚrstrip)ÚnameÚslugs     ú=/var/www/html/scraper-prawny.klono.ai/scraper/sources/base.pyÚ_make_email_slugr      sl   € à�>‰>œ)Ó$×*Ñ*Ó,€DÜ�6‰6�/ 2 tÓ,€DÜ�6‰6�&˜#˜tŸz™z›|Ó,€DÜ�6‰6�%˜˜dÓ#€DØ��ˆ9×Ñ˜CÓ Ð ó    c                  ó´   — e Zd ZU dZded<   ded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   dZded<    ee¬«      Zded<   dd„Zdd„Zy)ÚLeadu=   Surowy lead ze ÅºrÃ³dÅ‚a â€” przed konwersjÄ… do formatu CRM.Ústrr   ÚsourceNú
str | NoneÚnameMoreÚcityÚstreetÚ
postalCodeÚemailÚphoneÚwebsite)Údefault_factoryÚdictÚextrac                ód   — t        | j                  xr | j                  xs | j                  «      S )u7   Lead musi mieÄ‡ nazwÄ™ i co najmniej email lub telefon.)Úboolr   r'   r(   ©Úselfs    r   Úis_validzLead.is_valid5   s#   € ä�D—I‘IÒ< 4§:¡:Ò#;°·±Ó=Ð=r   c                ó  — ddl m}m}m}m}m}m}m} |rkt        | j                  «      }|j                  dd«      \  }	}
|	› d|› d|
› �}t        j                  d| j                  || j                  xs d«       || _        t        |«      }|j!                  | j                  «      }|r0|j!                  | j                  |«      }|j#                  ||dœ«       | j                  |t        |«      d	œ}d
D ]  }t%        | |«      }|sŒ|||<   Œ |S )Nr	   )ÚDEFAULT_TAGSÚDEFAULT_CATEGORIESÚSOURCE_TAGSÚSOURCE_TAG_COLORSÚSOURCE_TAG_COLOR_DEFAULTÚ	TEST_MODEÚ
TEST_EMAILú@é   ú+u6   [%s] [TEST MODE] email nadpisany na %s (oryginaÅ‚: %s)r   )ÚtagÚcolor)r   ÚtagsÚ
categories)r#   r$   r%   r&   r'   r(   )r
   r3   r4   r5   r6   r7   r8   r9   r   r   ÚsplitÚlogÚinfor!   r'   ÚlistÚgetÚappendÚgetattr)r0   r3   r4   r5   r6   r7   r8   r9   r   Ú_localÚ_domainÚ
test_emailr?   Úsrc_tagr>   ÚpayloadÚkeyÚvals                     r   Úto_crm_payloadzLead.to_crm_payload9   s  € ÷	
÷ 	
ñ 	
ñ Ü# D§I¡IÓ.ˆDØ(×.Ñ.¨s°AÓ6‰OˆF�GØ"˜8 1 T F¨!¨G¨9Ð5ˆJÜ�H‰HØHØ—‘˜Z¨¯©Ò):°sôð $ˆDŒJä�LÓ!ˆØ—/‘/ $§+¡+Ó.ˆÙØ%×)Ñ)¨$¯+©+Ð7OÓPˆEØ�K‰K °%Ñ8Ô9ð —I‘IØÜÐ1Ó2ñ
ˆð
 Rò 	#ˆCÜ˜$ Ó$ˆCÚØ"�˜’ð	#ð ˆr   )Úreturnr.   )rP   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r#   r$   r%   r&   r'   r(   r)   r   r+   r,   r1   rO   © r   r   r   r   &   sn   … áGà
ƒIØƒKØ€HˆjÓØ€Dˆ*ÓØ€FˆJÓØ!€J�
Ó!Ø€Eˆ:ÓØ€Eˆ:ÓØ€GˆZÓÙ¨Ô-€Eˆ4Ó-ó>ô$r   r   c                  óf   — e Zd ZU dZdZded<   ddd„Zdd„Zdd„Ze	dd	„«       Z
e	dd
„«       Zdd„Zy)ÚScraperSourceu#   Bazowa klasa wszystkich scraperÃ³w.Úbaser    r   Nc                ó¸   — || _         t        j                  «       | _        | j                  j                  j                  t        j                  «       i | _        y ©N)	ÚlimitÚrequestsÚSessionÚsessionÚheadersÚupdater
   ÚDEFAULT_HEADERSÚ_robots)r0   r\   s     r   Ú__init__zScraperSource.__init__e   s>   € ØˆŒ
Ü×'Ñ'Ó)ˆŒØ�‰×Ñ×#Ñ#¤F×$:Ñ$:Ô;Ø35ˆ�r   c                ó¶  — | j                  |«      s"t        j                  d| j                  |«       y 	  | j                  j
                  |fdt        j                  i|¤Ž}t        j                  t        j                  «       |j                  dk\  rƒt        j                  d| j                  |j                  |«       t        |j                  |j                  «      r6t        | j                  d|j                  › d|› d|j                  d d › �«       y |S # t        j                   $ r,}t        j                  d	| j                  ||«       Y d }~y d }~ww xY w)
Nz[%s] robots.txt disallows %sÚtimeouti�  z[%s] HTTP %d for %szHTTP z dla z: i,  z[%s] request error for %s: %s)Ú_robots_allowedrB   Úwarningr   r_   rE   r
   ÚREQUEST_TIMEOUTÚtimeÚsleepÚDELAY_SECONDSÚstatus_coder   Útextr   r]   ÚRequestException)r0   ÚurlÚkwargsÚrÚes        r   rE   zScraperSource.getl   s  € Ø×#Ñ# CÔ(Ü�K‰KÐ6¸¿	¹	À3ÔGØð	Ø �—‘× Ñ  ÑO¬f×.DÑ.DÐOÈÑOˆAÜ�J‰J”v×+Ñ+Ô,Ø�}‰} Ò#Ü—‘Ð1°4·9±9¸a¿m¹mÈSÔQÜ# A§F¡F¨A¯M©MÔ:Ü(ØŸ	™	Ø §¡˜¨e°C°5¸¸1¿6¹6À$À3¸<¸.ÐIôð ØˆHøÜ×(Ñ(ò 	Ü�K‰KÐ7¸¿¹ÀCÈÔKÜûð	ús   µC!D ÄD ÄEÄ,"EÅEc                óŒ  — 	 t        |«      }|j                  › d|j                  › �}| j                  j	                  |«      }|€>t        «       }|j                  |› d�«       	 |j                  «        || j                  |<   |€y|j                  t        j                  |«      S # t        $ r d }Y Œ?w xY w# t        $ r Y yw xY w)Nz://z/robots.txtT)r   ÚschemeÚnetlocrc   rE   r   Úset_urlÚreadÚ	ExceptionÚ	can_fetchr
   Ú
USER_AGENT)r0   rp   ÚparsedÚoriginÚrps        r   rg   zScraperSource._robots_allowed€   sÂ   € ð	Ü˜c“]ˆFØŸ™� c¨&¯-©-¨Ð9ˆFØ—‘×!Ñ! &Ó)ˆBØˆzÜ$Ó&�Ø—
‘
˜f˜X [Ð1Ô2ðØ—G‘G”Ið (*�—‘˜VÑ$ØˆzØØ—<‘<¤× 1Ñ 1°3Ó7Ð7øô !ò à’Bðûô ò 	Ùð	ús<   ‚A!B7 Á$B& Á4B7 ÂB7 Â&B4Â1B7 Â3B4Â4B7 Â7	CÃCc                ó^   — t         j                  | xs d«      }|r|j                  d«      S d S )Nr   r   )ÚEMAIL_REÚsearchÚgroup©rn   Úms     r   Úextract_emailzScraperSource.extract_email”   s)   € ä�O‰O˜DšJ BÓ'ˆÙˆq�w‰w�q‹zÐ( DÐ(r   c                ó†   — t         j                  | xs d«      }|sy t        j                  dd|j	                  d«      «      S )Nr   z[\s\-]r   )ÚPHONE_REr�   r   r   r‚   rƒ   s     r   Úextract_phonezScraperSource.extract_phone™   s5   € ä�O‰O˜DšJ BÓ'ˆÙØÜ�v‰v�i  Q§W¡W¨Q£ZÓ0Ð0r   c                ó   — t         ‚)u<   Generator leadÃ³w. KaÅ¼da podklasa musi to zaimplementowaÄ‡.)ÚNotImplementedErrorr/   s    r   ÚfetchzScraperSource.fetch¡   s   € ä!Ð!r   r[   )r\   z
int | None)rp   r    rP   zrequests.Response | None)rp   r    rP   r.   )rn   r    rP   r"   )rP   zIterator[Lead])rQ   rR   rS   rT   r   rU   rd   rE   rg   Ústaticmethodr…   rˆ   r‹   rV   r   r   rX   rX   `   sK   … Ù-à€Dˆ#Óô6óó(ð( ò)ó ð)ð ò1ó ð1ô"r   rX   )r   r    rP   r    )!rT   Ú
__future__r   Úloggingr   rj   Údataclassesr   r   Útypingr   Úurllib.parser   Úurllib.robotparserr   r]   r   r
   Únotifierr   r   Ú	getLoggerrQ   rB   Úcompiler€   r‡   r    Ú	maketransr   r   r   rX   rV   r   r   ú<module>r—      sœ   ðÙ .å "ã Û 	Û ß (Ý Ý !Ý .ã å ß =à€g×Ñ˜Ó!€àˆ2�:‰:ÐIÓJ€Øˆ2�:‰:Ð:Ó;€à�M‰MØ*Øó€	ó!ð ÷6ð 6ó ð6÷rC"ò C"r   