
    Jh.                         d dl m Z mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  G d
 de      Z G d de      Zy)    )datetimetimezone)BooleanColumnDateTime
ForeignKeyIntegerStringText)hybrid_property)relationship)Base)WebCrawlerFileType)Enum)defaultdict)FileResponseSchemac                   t   e Zd ZdZ eedd      Z ee ed      d      Z ee ed      d      Z	 ee
 ej                  ej                              Z ee
 ej                  ej                         ej                  ej                        	      Z ee
d      Z e ed
      d      Z ed      Zy)WebCrawlerFilesweb_crawler_filesTprimary_keyindexzweb_crawlers.idFnullablezfiles.iddefaultr   onupdated   FileN)__name__
__module____qualname____tablename__r   r	   idr   web_crawler_idfile_idr   r   nowr   utc
created_at
updated_at
deleted_atr
   	file_typer   file     a/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/web_crawler/models/web_crawler.pyr   r      s    'M	T	6BGZ0A%BUSNWj4uEG,(,,x||*DEJ,(,,x||*D|x||\d\h\hOijJ40Jvc{T2IDr0   r   c                   Z   e Zd ZdZ eedd      Z e ed      d      Z e ed      d      Z	 ee e
d      d      Z e ed      d      Z e ed	      d      Z e ed	      d      Z eedd
      Z eedd
      Z e ed      d      Z e ed      d      Z e ed      d      Z e ed	      d      Z e ed      d      Z eedd
      Z eedd
      Z e ed      d      Z e ed      d      Z eed      Z eedd
      Z eed      Z eed      Z e ed      d      Z  e ed      d      Z! e ed      d      Z" e ed      d      Z# e ed      d      Z$ e ed      d      Z% e ed      d      Z& e ed      d      Z' e ed      d      Z( e ed      d      Z) e ed      d      Z* eedd
      Z+ ee,d      Z- eed      Z. ee, e/j`                  e1jd                              Z3 ee, e/j`                  e1jd                         e/j`                  e1jd                              Z4 ee,d      Z5 e6d      Z7e8d        Z9e8d        Z:e8d        Z;e8d        Z<e8d        Z=e>d        Z?y)
WebCrawlerweb_crawlersTr   2   r   zlocations.idr   F
   )r   r      r   r   r   c                     i }t         D ]Z  }| j                  D cg c]1  }|j                  |k(  st        j                  |j
                        3 }}|sL|||j                  <   \ |S c c}w )N)r   filesr-   r   model_validater.   value)selfresultr-   r.   files_of_types        r1   list_files_by_typezWebCrawler.list_files_by_typeK   su    + 	8IVZV`V`  Addhdrdrvd/>>tyyI  AM  A*7y'	8  As
   A(!A(c                    | j                   sg S 	 g }| j                   j                  d      D ]@  }|j                         }|s|j                         s'|j	                  t        |             B |S # t        $ r g cY S w xY w)a[  
        Convert comma-separated history indexes to a list of integers.
        Similar to the Groovy code:
        def getListHistoryIndexes() {
            def iList = historyIndexes?.tokenize(",")
            iList?.removeAll {
                !it.trim()?.isInteger()
            }
            return iList*.toInteger() ?: []
        }
        ,)history_indexessplitstripisdigitappendint	Exceptionr<   
index_listidxs      r1   list_history_indexeszWebCrawler.list_history_indexesb   s     ##I		J++11#6 0iik3;;=%%c#h/0  	I	   2A2 A2 A2 2B ?B c                    | j                   sg S 	 g }| j                   j                  d      D ]@  }|j                         }|s|j                         s'|j	                  t        |             B |S # t        $ r g cY S w xY w)zT
        Convert comma-separated description indexes to a list of integers.
        rA   )description_indexesrC   rD   rE   rF   rG   rH   rI   s      r1   list_description_indexesz#WebCrawler.list_description_indexes}   s    
 ''I		J//55c: 0iik3;;=%%c#h/0  	I	rM   c                    | j                   sg S 	 g }| j                   j                  d      D ]@  }|j                         }|s|j                         s'|j	                  t        |             B |S # t        $ r g cY S w xY w)zP
        Convert comma-separated keyword indexes to a list of integers.
        rA   )keyword_indexesrC   rD   rE   rF   rG   rH   rI   s      r1   list_keyword_indexeszWebCrawler.list_keyword_indexes   s    
 ##I		J++11#6 0iik3;;=%%c#h/0  	I	rM   c                    ddl m} ddlm} ddlm} ddlm} t         |             }	 |j                  |      j                  |j                  | j                  k(        j                   ||j                              j                         }||j                          S # t         $ r(}t#        d|        Y d}~|j                          yd}~ww xY w# |j                          w xY w)z
        Returns the latest data from code match between webcrawler and matched logs.
        This property is used to store the latest matching data between web crawler and matched logs.
        r   )desc)Session)
MatchedLog)get_dbzError retrieving matched logs: N)
sqlalchemyrU   sqlalchemy.ormrV   &src.apps.wine.wine_log.models.wine_logrW   src.core.dependenciesrX   nextqueryfiltercodeorder_bydate_createdfirstcloserH   print)r<   rU   rV   rW   rX   db
latest_loges           r1   matched_logszWebCrawler.matched_logs   s     	$*E0 &(^	 $
49945$z6678	   HHJ  	3A378 HHJ	 HHJs*   A%B   	C)C7C CC C&c                     | j                   >| j                  2| j                   xr# | j                  j                  | j                   k  S | j                   xr | j                   duS )z
        Returns True if the web crawler is not deleted and has a valid match date.
        This property is used to determine if the match run should be shown in the UI.
        N)
match_dateri   
is_deletedlast_updated)r<   s    r1   show_match_runzWebCrawler.show_match_run   s[     ??&4+<+<+H&[4+<+<+I+IDOO+[[??"Btd'BBr0   N)@r!   r"   r#   r$   r   r	   r%   r
   versionbottle_size_defaultr   location_idr`   currency_code	delimiterr   disable_historydisable_keywordfile_sourcehistory_namenameoutput_delimiter	page_typesearch_bottle_sizesearch_vintageselectorstatusr   urlvintage_default_nv	client_idgroup_idbottle_size_indexrO   rB   rR   files_index	sku_index	url_indexvintage_indexprice_indextax_status_indexmatch_input_separatorbottle_size_default_blankr   rk   rl   r   r(   r   r)   r*   r+   r,   r   r9   propertyr?   rL   rP   rS   ri   r   rn   r/   r0   r1   r3   r3      s
   "M	T	6BVBZ$/G d;*^"<tLK&+.D6":5MvbzE2IWedCOWedCOt4K&+5L&+.DfRj59vbzD1IFGUTBNfSkD1HF2J/F

&CFw.Ig-HvbzD9 t<VC[48OVC[48Ot4KvbzD1IvbzD1I6":5Md3KfRj48"6#;> &w M40J/J,(,,x||*DEJ,(,,x||*D|x||\d\h\hOijJ40J*+E ,  4  $  $  > C Cr0   r3   N)r   r   rY   r   r   r   r   r	   r
   r   sqlalchemy.ext.hybridr   rZ   r   src.core.models.baser   src.utils.enumsr   r   SAEnumcollectionsr   src.apps.files.schemas.filer   r   r3   r/   r0   r1   <module>r      sE    ' S S S 1 ' % .  % # :
 d 
 oC oCr0   