Ë
    ‡Çjˆ  ã                  ó–   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  ej                  e«      Z G d„ d	e«      Zy)
z=CSV/JSON file-based post source for testing and offline runs.é    )ÚannotationsN)ÚIterator)ÚPath)Ú
PostSource)ÚPostc                  ó0   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zy)	Ú	CsvSourcez#Read posts from a CSV or JSON file.c                ót   — t        |«      | _        | j                  j                  «       st        d|› �«      ‚y )NzSource file not found: )r   ÚpathÚexistsÚFileNotFoundError)ÚselfÚ	file_paths     úL/var/www/html/agent.samochodowy/src/agent_samochodowy/ingestor/csv_source.pyÚ__init__zCsvSource.__init__   s5   € Ü˜“OˆŒ	Ø�y‰y×ÑÔ!Ü#Ð&=¸i¸[Ð$IÓJÐJð "ó    c              #  óì   K  — | j                   j                  j                  «       }|dk(  r| j                  «       E d {  –—†  y |dv r| j	                  «       E d {  –—†  y t        d|› �«      ‚7 Œ07 Œ­w)Nz.json)z.csvz.tsvzUnsupported file format: )r   ÚsuffixÚlowerÚ
_read_jsonÚ	_read_csvÚ
ValueError)r   r   s     r   Úfetch_postszCsvSource.fetch_posts   sk   è ø€ Ø—‘×!Ñ!×'Ñ'Ó)ˆØ�WÒØ—‘Ó(×(Ñ(ØÐ'Ñ'Ø—~‘~Ó'×'Ñ'äÐ8¸¸ÐAÓBÐBð	 )øà'ús"   ‚=A4¿A0Á A4ÁA2ÁA4Á2A4c              #  ó‚  K  — | j                   j                  d¬«      5 }t        j                  |«      }d d d «       t	        t
        «      r|n!|j                  d|j                  dg «      «      }|D ]  }	 t        di |¤Ž–— Œ y # 1 sw Y   ŒSxY w# t        $ r }t        j                  d|«       Y d }~ŒDd }~ww xY w­w)Núutf-8©ÚencodingÚpostsÚdatazSkipping invalid JSON entry: %s© )r   ÚopenÚjsonÚloadÚ
isinstanceÚlistÚgetr   Ú	ExceptionÚloggerÚwarning)r   Úfr   ÚitemsÚitemÚes         r   r   zCsvSource._read_json"   sª   è ø€ Ø�Y‰Y�^‰^ Wˆ^Ó-ð 	 °Ü—9‘9˜Q“<ˆD÷	 ä" 4¬Ô.‘°D·H±H¸WÀdÇhÁhÈvÐWYÓFZÓ4[ˆØò 	EˆDðEÜ‘l˜T‘lÓ"ñ	E÷	 ð 	 ûô ò EÜ—‘Ð@À!×DÑDûðEüsF   ‚B?ŸBµAB?Á7BÂB?ÂBÂB?Â	B<ÂB7Â2B?Â7B<Â<B?c              #  ó  K  — | j                   j                  d¬«      5 }t        j                  |«      }|D ]  }	 t	        di |¤Ž–— Œ 	 d d d «       y # t
        $ r }t        j                  d|«       Y d }~ŒAd }~ww xY w# 1 sw Y   y xY w­w)Nr   r   zSkipping invalid CSV row: %sr    )r   r!   ÚcsvÚ
DictReaderr   r'   r(   r)   )r   r*   ÚreaderÚrowr-   s        r   r   zCsvSource._read_csv,   s�   è ø€ Ø�Y‰Y�^‰^ Wˆ^Ó-ð 	F°Ü—^‘^ AÓ&ˆFØò F�ðFÜ™+ ™+Ó%ñF÷	Fð 	Føô
 !ò FÜ—N‘NÐ#AÀ1×EÑEûðFú÷	Fð 	FüsE   ‚BŸB »AÁB Á	BÁ	A=ÁA8Á3B Á8A=Á=B Â B	ÂBN)r   ÚstrÚreturnÚNone)r4   zIterator[Post])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r    r   r   r	   r	      s   „ Ù-óKó
CóEôFr   r	   )r9   Ú
__future__r   r/   r"   ÚloggingÚcollections.abcr   Úpathlibr   Úagent_samochodowy.ingestor.baser   Úagent_samochodowy.modelsr   Ú	getLoggerr6   r(   r	   r    r   r   ú<module>rA      s@   ðÙ Cå "ã 
Û Û Ý $Ý å 6Ý )à	ˆ×	Ñ	˜8Ó	$€ô"F�
õ "Fr   