
    Nyh                     6   d dl Z d dlmZmZ d dlmZmZmZmZm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 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mZ d dl m!Z! d dl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.  G d de      Z/ G d de      Z0 G d de      Z1 G d de      Z2 G d de      Z3 G d de      Z4 G d d e      Z5 G d! d"e      Z6d dl7Z7d# Z8d d$l9m:Z: ejv                  Z;d d%l<m=Z= d d&l>m?Z? d' Z@d dlAZAd dlBZBd dlCZCd dlDZDd dlEZEd( ZFy))    N)datetime	timedelta)parse_qsquote	urlencodeurlparse
urlunparse)settingsstatus)ValidationError)PageNumberPagination)AllowAnyIsAuthenticated)Response)APIView)ViewSet)JWTAuthentication)RefreshToken)extract_product_info   )ProductScrapeTaskUser)ProductScrapeTaskSerializerUserSerializer)run_1688_scrapperrun_alibaba_scraperrun_made_in_china_scraperscrape_imagesc                   &    e Zd ZdZdZdZdZdZd Zy)StandardPaginationz!
    Global pagination class
       limitd   current_pagec           
      t   t        | d      st        ddg dt        j                        S t        dd|| j                  j
                  | j                  | j                        | j                  j                  j                  | j                  j                  j                  dd	t        j                        S )
NrequestFzInternal Server Errorsuccessmessagedatar   TzData fetched successfullyr%   r#   counttotal_pages)r)   r*   r+   
pagination)hasattrr   r   HTTP_500_INTERNAL_SERVER_ERRORpagenumberget_page_sizer'   	paginatorr-   	num_pagesHTTP_200_OK)selfr+   s     $/var/www/Befach/backend/bot/views.pyget_paginated_responsez)StandardPagination.get_paginated_response"   s    tY'1 ;;	= = 1#yy//**4<<8		++11"ii11;;		

 $$
& 
	&    N)	__name__
__module____qualname____doc__	page_sizepage_size_query_parammax_page_sizepage_query_paramr:    r;   r9   r!   r!      s$     I#M%&r;   r!   c                   0    e Zd ZegZegZd Zd Zd Z	d Z
y)ScraperViewc                    	 |j                   j                  d      }|st        dddd      S |j                         dk(  r| j	                  |      S |j                  dd	      }|j                         d
k(  r| j                  |      S t        dddd      S # t        $ r#}t        dt        |      dd      cY d }~S d }~ww xY w)NsourceFzSource is required.r)   r*   i  r   alibaba  madeinchinazUnsupported source.i  )	r+   getr   lowerscrape_alibabareplacescrape_made_in_china	Exceptionstr)r8   r'   rH   es       r9   postzScraperView.post:   s    	O\\%%h/FE>S T]`aa||~***733>>#r*F||~.0099:OPY\]] 	O#a&A#NN	Os.   ,B #B 5B 	B 	C"C :C Cc           
      R	   	 i }|j                   }|j                  d      }|st        dddt        j                        S |j                  d      }d}|j                  d      r|d   |d<   |j                  d	      rt        |d	         }nd
}|j                  d      rt        |d         }nd}t        |      dk\  rt        dddt        j                        S |d
z  }	|	dz  }	d
}
||
z  dz   }||
z  }||z   |
z   dz
  |
z  }	|j                  d      rd|d<   |j                  d      rd|d<   |j                  d      rd|d<   |j                  d      rd|d<   |j                  d      }|dv rt        |      |d<   |j                  d      rd|d<   |j                  d       }|rt        |      |d!<   |j                  d"      }|rt        |      |d#<   |j                  d$      }|rd%| |d&<   |j                  d'      }|r||d(<   |j                  d)      }|rBt        |t              r"d*j                  |      }t        |d*+      |d,<   nt        |d*+      |d,<   |j                  d-      }|rBt        |t              r"d*j                  |      }t        |d*+      |d.<   nt        |d*+      |d.<   |j                  d/      }|rBt        |t              r"d*j                  |      }t        |d*+      |d0<   nt        |d*+      |d0<   t        |      }t        |j                        }|j                  |       |j                         D ci c]  \  }}|t        |t              r|n|d    }}}t!        |d12      }t#        |j$                  |j&                  |j(                  d3|d3f      }t*        j,                  j/                  |j0                  ||d45      }t3        j4                  |||j6                  |j0                  j6                  |	|||       t        d1d6t9        |      j                   d7t        j:                        S c c}}w # t<        $ rP}dd l}tA        d8       |jC                          t        dt        |      dt        jD                        cY d }~S d }~ww xY w)9NqueryFMissing query in request body.rI   r   rH   %https://www.alibaba.com/trade/search?
SearchTextnum_products0   skipr     Maximum products length is 1000r   trade_assuranceytaverified_suppliertrueassessmentCompanyverified_pro1verifiedPromerge_by_suppliermergeResultreview_score4z4.55reviewScorepaid_sample
freeSample	min_pricepricef	max_pricepricetmoqMOQTmoqtsupplier_country_regioncountryexported_to,safeexportCountrymanagement_certificatecompanyAuthTagproduct_certificateproductAuthTagTdoseqrL   IN_PROGRESSusersearch_paramsrH   r   Scrapping Started Successfullyr(   zException occurred:      )#r+   rN   r   r   HTTP_400_BAD_REQUESTintrT   
isinstancelistjoinr   r   r   rX   updateitemsr   r	   schemenetlocpathr   objectscreater   r   delayidr   r7   rS   	tracebackprint	print_excr1    r8   r'   paramsfilterssearch_namerH   urlr\   skip_productsr6   products_per_page
start_pageskip_in_pagerl   rs   ru   rw   r{   export_countriesjoined	mgmt_cert	prod_certparsedoriginal_querykv
flat_query	new_query	final_urlscrape_taskrU   r   s                                    r9   rP   zScraperView.scrape_alibabaL   s   Q	pFllG!++g.K5=] ^gm  hC  hC  D  D[[*F9C {{7#'.w'7|${{>*"7>#:;!{{6" #GFO 4 !< D(#?! !557 7
 #B&IqLI "'+<<AJ(+<<L&59JJQNSddI {{,-"t {{./.4*+ {{>*(+}% {{./(.}% #;;~6L00(+L(9}% {{=)'*|$  K0I#&y>x K0I#&y>x  ++e$C#'uv kk";<G$+y!  '{{=9.5 XX&67F.3F.EF?+.34D3.OF?+  $<=Ii. XXi0F/4V#/FF+,/4YS/IF+,  $9:Ii. XXi0F/4V/EF+,/4YC/HF+, c]F%fll3N!!&) LZK_K_Kab41a!*Q"4Q!A$>bJb!*D9I"FMM6==&++rS\^`#abI+33::\\%$	 ; K  %%iknnglloo_hjt  wC  EQ  R ;2;?DD ((	* *! c,  	p-.!uQ@InInoo		ps?   >Q BQ I0Q "Q/CQ Q 	R&AR!R&!R&c                 j   	 |j                   }|j                  d      }|st        dddt        j                        S |j                  d      }|j                  d      rt        |d         }nd}|j                  d	      rt        |d	         }nd
}t        |      dk\  rt        dddt        j                        S |}t        j                  j                  |j                  ||d      }t        j                  ||j                  |j                  j                  |||       t        ddt        |      j                   dt        j                        S # t        $ rP}	d
d l}
t#        d       |
j%                          t        dt'        |	      dt        j(                        cY d }	~	S d }	~	ww xY wNrX   FrY   rI   r   rH   r\      r^   r   r_   r`   r   r   Tr   r(   Exception occurred:)r+   rN   r   r   r   r   r   r   r   r   r   r   r   r   r7   rS   r   r   r   rT   r1   r8   r'   r   r   rH   r\   r   r   r   rU   r   s              r9   rR   z ScraperView.scrape_made_in_china   s   B	pllG!++g.K5=] ^gm  hC  hC  D  D[[*F{{>*"7>#:;!{{6" #GFO 4 !< D(#?! !557 7 )L+33::\\%$	 ; K &++ 	 ;2;?DD ((	* *  	p'(!uQ@InInoo		p+   <E B E  BE 	F2"AF-'F2-F2c                 j   	 |j                   }|j                  d      }|st        dddt        j                        S |j                  d      }|j                  d      rt        |d         }nd}|j                  d	      rt        |d	         }nd
}t        |      dk\  rt        dddt        j                        S |}t        j                  j                  |j                  ||d      }t        j                  ||j                  |j                  j                  |||       t        ddt        |      j                   dt        j                        S # t        $ rP}	d
d l}
t#        d       |
j%                          t        dt'        |	      dt        j(                        cY d }	~	S d }	~	ww xY wr   )r+   rN   r   r   r   r   r   r   r   r   r   r   r   r   r7   rS   r   r   r   rT   r1   r   s              r9   scrape_1688zScraperView.scrape_1688%  s   B	pllG!++g.K5=] ^gm  hC  hC  D  D[[*F{{>*"7>#:;!{{6" #GFO 4 !< D(#?! !557 7 )L+33::\\%$	 ; K ## 	 ;2;?DD ((	* *  	p'(!uQ@InInoo		pr   N)r<   r=   r>   r   permission_classesr   authentication_classesrV   rP   rR   r   rD   r;   r9   rF   rF   6   s1    )*/0O$RphCpJCpr;   rF   c                       e Zd ZegZegZd Zy)AlibabaScrapperViewc           
      	   	 i }|j                   }|j                  d      }t        |j                  d             |st        dddt        j
                        S |j                  d      }|dk(  rd}|d	k(  rd}nd
}|j                  d      r|d   |d<   |j                  d      rt        |d         }nd}|j                  d      rt        |d         }nd}t        |      dk\  rt        dddt        j
                        S |dz  }	|	dz  }	d}
||
z  dz   }||
z  }||z   |
z   dz
  |
z  }	|j                  d      rd|d<   |j                  d      rd|d<   |j                  d      rd|d<   |j                  d      rd|d<   |j                  d      }|dv rt        |      |d <   |j                  d!      rd|d"<   |j                  d#      }|rt        |      |d$<   |j                  d%      }|rt        |      |d&<   |j                  d'      }|rd(| |d)<   |j                  d*      }|r||d+<   |j                  d,      }|rBt        |t              r"d-j                  |      }t        |d-.      |d/<   nt        |d-.      |d/<   |j                  d0      }|rBt        |t              r"d-j                  |      }t        |d-.      |d1<   nt        |d-.      |d1<   |j                  d2      }|rBt        |t              r"d-j                  |      }t        |d-.      |d3<   nt        |d-.      |d3<   t        |      }t        |j                        }|j                  |       |j!                         D ci c]  \  }}|t        |t              r|n|d    }}}t#        |d45      }t%        |j&                  |j(                  |j*                  d6|d6f      }t,        j.                  j1                  |j2                  ||d78      }t5        j6                  |||j8                  |j2                  j8                  |	|||       t        d4d9t;        |      j                   d:t        j<                        S c c}}w # t>        $ rP}dd l }t        d;       |jC                          t        dt        |      dt        jD                        cY d }~S d }~ww xY w)<NrX   rH   FrY   rI   r   1688z7https://s.1688.com/selloffer/offer_search.htm?keywords=zMADE IN CHINArZ   r[   r\   r]   r^   r   r_   r`   r   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   Tr   rL   r   r   r   r(   r   )#r+   rN   r   r   r   r   r   rT   r   r   r   r   r   r   rX   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r7   rS   r   r   r1   r   s                                    r9   rV   zAlibabaScrapperView.posto  s   X	pFllG!++g.K'++h'(5=] ^gm  hC  hC  D  D[[*FO(O= {{7#'.w'7|${{>*"7>#:;!{{6" #GFO 4 !< D(#?! !557 7
 #B&IqLI "'+<<AJ(+<<L&59JJQNSddI {{,-"t {{./.4*+ {{>*(+}% {{./(.}% #;;~6L00(+L(9}% {{=)'*|$  K0I#&y>x K0I#&y>x  ++e$C#'uv kk";<G$+y!  '{{=9.5 XX&67F.3F.EF?+.34D3.OF?+  $<=Ii. XXi0F/4V#/FF+,/4YS/IF+,  $9:Ii. XXi0F/4V/EF+,/4YC/HF+, c]F%fll3N!!&) LZK_K_Kab41a!*Q"4Q!A$>bJb!*D9I"FMM6==&++rS\^`#abI+33::\\%$	 ; K  %%iknnglloo_hjt  wC  EQ  R ;2;?DD ((	* *! c,  	p'(!uQ@InInoo		ps@   AQ6 B*Q6 I0Q6 6"Q0CQ6 0Q6 6	S?AS
S
SN)r<   r=   r>   r   r   r   r   rV   rD   r;   r9   r   r   k  s    )*/0Ypr;   r   c                       e Zd ZegZg Zd Zy)LoginAPIViewc                    |j                   j                  d      }|j                   j                  d      }|r|st        dddt        j                        S 	 t
        j                  j                  |      }|j                  |      rt        j                  |      }t        dd	t        |      j                   d
t        j                        }t        j                         t        d      z   }|j                  dt!        |j"                        |ddd       t        j                         t        d      z   }|j                  dt!        |      |ddd       |S t        dddt        j$                        S # t
        j&                  $ r! t        dddt        j(                        cY S t*        $ rP}	dd l}
t/        d       |
j1                          t        dt!        |	      dt        j2                        cY d }	~	S d }	~	ww xY w)NemailpasswordFz Email and password are required.rI   r   )r   TzLogin successful.r(      )daysaccess_tokenLax)keyvalueexpireshttponlysecuresamesite   refresh_tokenzInvalid credentials.zUser not found.r   z Exception occurred during login:)r+   rN   r   r   r   r   r   check_passwordr   for_userr   r7   r   utcnowr   
set_cookierT   r   HTTP_401_UNAUTHORIZEDDoesNotExistHTTP_404_NOT_FOUNDrS   r   r   r   r1   )r8   r'   r   r   r   refreshresponseexpiryrefresh_expiryrU   r   s              r9   rV   zLoginAPIView.post  s     )<<##J/Hu9[\ek  fA  fA  B  B*	p<<##%#0D""8,&//5##2)$/44% !,,	. "*YA->>##&g223"" " $  "*!2YA5F!F##'g,*" " $   5=S T]c]y]yzz   	ou9JKTZTmTmnn 	p45!uQ@InInoo		ps,   DE>  E> >1H	1H	9AH>H	H	N)r<   r=   r>   r   r   r   rV   rD   r;   r9   r   r   
  s    "1pr;   r   c                       e Zd ZegZegZd Zy)VerifyUserAPIViewc                     |j                   }|j                  r>|j                  r2t        ddt	        |      j
                  dt        j                        S t        dddt        j                        S )NTzUser is authenticatedr(   r   FzUser is not authenticatedrI   )	r   is_authenticatedis_staffr   r   r+   r   r7   r   )r8   r'   r   s      r9   rN   zVerifyUserAPIView.getE  sp    ||  T]]1%d+00 ((	* *
 1
 ..0 	0r;   N)r<   r=   r>   r   r   r   r   rN   rD   r;   r9   r   r   A  s    /0)*0r;   r   c                   8    e Zd ZegZegZeZd Z	ddZ
ddZd Zy)ProductScrapeTaskViewSetc                    |j                   }t        j                  j                  |      j	                  d      }| j                         }d }	 |j                  ||      }|(t        |d      j                  }|j                  |      S t        |d      j                  }|j                  |      S # t        $ r" t        ddg dt        j                        cY S w xY w)	N)r   z-started_atFzPage not foundr(   r   T)many)r   r   r   filterorder_bypagination_classpaginate_querysetrS   r   r   r7   r   r+   r:   )r8   r'   r   r+   r5   r2   serialized_datas          r9   r   zProductScrapeTaskViewSet.listX  s    || ((//T/:CCMR))+		*..tW=D 9$TJOOO33ODD5dFKK//@@  	** ((	* *	*s   B3 3(CCNc                    	 |st        dddt        j                        S t        j                  j                  |      }g }i }|j                  r|j                  j                  r|j                  j                  }t        j                  |      }|j                  t        j                  d t        j                  d t        j                   d i      }|j                  D cg c]  }| j!                  |       c}|_        d|j                  v r|d   j#                  d       |d<   |j$                  j                  d      }	|	r|	j'                         j)                         }	|d	   j+                  d
      j,                  j)                         j,                  j/                  |	      }
|d   j+                  d
      j,                  j)                         j,                  j/                  |	      }||
|z     }|j$                  j                  d      }|j$                  j                  d      }d|j                  v rX|*	 t1        |      }||d   j3                  t0              |k\     }|*	 t1        |      }||d   j3                  t0              |k     }|j$                  j                  dd      }|j$                  j                  dd      }	 t9        |      }t9        |      }|dkD  r|dkD  sJ 	 t=        |      }|dz
  |z  }||z   }|j>                  || }|jA                  d      }|||||z   dz
  |z  d}t        ddtC        |      jD                  ||ddt        jF                        S c c}w # t4        $ r t7        ddi      w xY w# t4        $ r t7        ddi      w xY w# t4        t:        f$ r t7        ddd      w xY w# t        jH                  $ r t        ddd      cY S w xY w)NFTask id is RequiredrI   r   )pk	image_urlc                 j    t        | t              r"| j                  d      d   j                         S | S )Nr}   r   )r   rT   splitstrip)xs    r9   <lambda>z3ProductScrapeTaskViewSet.retrieve.<locals>.<lambda>  s+    Z3=O!''#,q/"7"7"9"VUV"Vr;   rX   titlerL   descriptionrs   ru   pricez min_price must be a valid numberz max_price must be a valid numberr%   r   r#      r   z(page and limit must be positive integersrecords)orientr,   TzDate fetched successfully)objectproductsr/   r(   Task not found)%r   r   r   r   r   rN   result_filer   r   pdread_csvrQ   npnaninfcolumnsformat_headerapplyquery_paramsr   rO   fillnarT   containsfloatastype
ValueErrorr   r   AssertionErrorlenilocto_dictr   r+   r7   r   )r8   r'   r   r+   r   r/   	file_pathdfcolsearch_query
mask_titlemask_descriptionrs   ru   min_price_valmax_price_valpage_numberr@   total_products	start_idxend_idxpaged_dfs                         r9   retrievez!ProductScrapeTaskViewSet.retrieves  s   X	#3! !557 7
 %,,00B07DHJD$4$4$8$8 ,,11	[[+ZZrvvtbffWd KLACL#d005L
"**,&(o&;&;V'B{O
  '3377@#/#5#5#7#=#=#?L!#G!3!3B!7!;!;!A!A!C!G!G!P!PQ]!^J')-'8'?'?'C'G'G'M'M'O'S'S'\'\]i'j$J)99:B $0044[A	#0044[A	bjj( ,e,1),<M!#BwK$6$6u$=$N!OB !,e,1),<M!#BwK$6$6u$=$N!OB
 &2266~qI#0044WbA	t"%k"2K #II&?y1}<<} "%R(1_	9	#i/779W5#++9+= %0&+$2Y$>$By#P	
 59$?DD (", ((* *y M0  * e"1;@b2c"dde  * e"1;@b2c"dde #N3 t)UGq*rsst: !-- 	*  	ss   O	 CO	 %M/=EO	 ?)M4 (O	 +)N 8O	 "N( /A?O	 /O	 4NO	 N%%O	 (OO	 	!O-,O-c                 <   	 |j                   j                  st        dddt        j                        S |st        dddt        j
                        S t        j                  j                  ||j                         }|j                          t        dddt        j                        S # t        j                  $ r! t        dd	dt        j                        cY S t        $ r1}t        dt        |      dt        j                        cY d }~S d }~ww xY w)
NFzPermission DeniedrI   r   r   r   r   TTask deleted successfullyr   )r   is_superuserr   r   HTTP_403_FORBIDDENr   r   r   rN   deleter7   r   r   rS   rT   r1   r8   r'   r   taskrU   s        r9   destroyz ProductScrapeTaskViewSet.destroy  s   	p<<,,#1! !335 5
 #3! !557 7
 %,,00BW\\0JDKKM5 ((* *
 !-- 	1* //1 1  	puQ@InInoo	ps/   3B/ B/ AB/ /1D"D*&DDDc                 h    t        j                  dd|j                         j                               S )Nz\W+_)resubr   rO   )r8   headers     r9   r  z&ProductScrapeTaskViewSet.format_header  s$    vvfc6<<>#7#7#9::r;   N)r<   r=   r>   r   r   r   r   r!   r   r   r  r%  r  rD   r;   r9   r   r   S  s2    /0)*)A6Yvp:;r;   r   c                       e Zd ZegZg Zd Zy)LogoutAPIViewc                 @   	 t        dddt        j                        }|j                  d       |j                  d       |S # t        $ rP}dd l}t        d       |j                          t        d	t        |      dt        j                        cY d }~S d }~ww xY w)
NTzLogout successful.rI   r   r   r   r   z!Exception occurred during logout:F)
r   r   r7   delete_cookierS   r   r   r   rT   r1   )r8   r'   r   rU   r   s        r9   rN   zLogoutAPIView.get  s    		p4<P QZ`ZlZlmH"">2""?3O 	p56!uQ@InInoo		ps   AA 	BABBBN)r<   r=   r>   r   r   r   rN   rD   r;   r9   r-  r-    s    "
pr;   r-  c                        e Zd ZegZegZddZy)ProductScrapperDeleteAPIViewNc                    	 |st        dddt        j                        S t        j                  j                  ||j                        }|j                          t        dddt        j                        S # t        j                  $ r! t        dddt        j                        cY S t        $ r1}t        dt        |      dt        j                        cY d }~S d }~ww xY w)	NFr   rI   r   r  Tr  r   )r   r   r   r   r   rN   r   r"  r7   r   r   rS   rT   r1   r#  s        r9   r"  z#ProductScrapperDeleteAPIView.delete  s    	p#3! !557 7
 %,,00BW\\0JDKKM5 ((* *
 !-- 	1* //1 1  	puQ@InInoo	ps)   A; AA; ;1C'.C'6&C"C'"C'r+  )r<   r=   r>   r   r   r   r   r"  rD   r;   r9   r1  r1    s    )*/0pr;   r1  c                    	 t         j                  j                  |       }t        j                  |j                        }g }g }|j                  d      D ]n  }|j                  }|s|j                  |       t        |      }|j                  di       j                  d      }|j                  }	|j                  ||	d       p t        | |       y # t         j                  $ r t	        d       Y y w xY w)Nr   r   Findexproductimages
image_urls
product_id)r   r   rN   r   r   r   r   r   
itertuplesURLappendr   IDr   )
task_idr$  r  	prod_urlsimages_tasksrowr   resultr8  r;  s
             r9   scrape_images_funcrE    s    	$,,00G0<D [[))*	==u=-C''C  %-c2Ir266x@ VV
##!'!+%  . 	g|,# !-- 	"#	s    C C65C6)MadeInChinaScraper)async_playwright)sync_to_asyncc                 h  K   	  t        t        j                  j                        |        d {   }t        j                  |j                        }g }g }t               }t               4 d {   }|j                  j                  dddgdt               d {   }|j                  dd	d
dd       d {   }|j                          d {   }	|j!                  d      D ]]  }
|
j"                  }|s|
j$                  }|j'                  |	|       d {   }|j                  dg       }|j)                  ||d       _ t+        | |       d d d       d {    y 7 8# t        j                  $ r t        d       Y y w xY w7 7 7 7 7 y7 7# 1 d {  7  sw Y   y xY ww)Nr4  r   Tz---disable-blink-features=AutomationControlledz--start-maximizedr$   )headlessargsslow_moexecutable_pathzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36iV  i   )widthheightzen-US)
user_agentviewportlocaleFr5  r8  r9  )rH  r   r   rN   r   r   r   r   r   rF  rG  chromiumlaunchEXECUTABLE_PATHnew_contextnew_pager<  r=  r?  scrape_product_detailsr>  r   )r@  r$  r  rA  rB  chinapbrowsercontextr2   rC  r   r;  product_detailsr8  s                  r9   scrape_china_imagesr^  <  s    A]#4#<#<#@#@AWMM 
T%%	&BIL E!  -  -Q

))?# + * 
 
  ++5  $s3 , 
 
 %%''==u=-C''C VV
(-(D(DT3(O"O(,,Xr:##"(",%  . 	g|,A -  -  - N))  -

 ( #P3 -  -  -  -s   F2-E, E)E, ;F21F2F25)FFF=F>FF'F>!FF 8FF2#F$F2)E, ,F
F2FF2FFFFF2F/#F&$F/+F2c                     	 t         j                  j                  |       }|j
                  sDt	        d|         t        j                  d       	 t         j                  j                  |       }|j
                  j                  }t        j                  j                  |      st        d|       t        j                         \  }}t        j                  |       	 t        |d	d
d      5 }t        |dd
d      5 }t!        j"                  |      }t!        j$                  |      }t'        |      }	|	D 
cg c]'  }
|
j)                         j+                         dk(  rdn|
) }}
|j-                  |       |D ]  }|j-                  |        	 ddd       ddd       t/        j0                  ||       t	        d|  d       t        j                  j                  |      r	 t        j4                  |       yy# t         j                  $ r t	        d|  d       Y yw xY w# t         j                  $ r t	        d|  d       Y yw xY wc c}
w # 1 sw Y   xY w# 1 sw Y   xY w# t2        $ rO}t	        d|  d|        t        j                  j                  |      rt        j4                  |       Y d}~d}~ww xY w#  Y yxY w# t        j                  j                  |      r	 t        j4                  |       w #  Y w xY ww xY w)zo
    Updates the CSV header for a ProductScrapeTask.
    If 'Image URLs' exists, rename it to 'Image URL'.
    r4  zError: Task with id z
 not foundNzNo file found for task 
   z not found after waitingzCSV path does not exist: rzutf-8rL   )encodingnewlinewz
image urlsz	Image URLzTask z: Header updated successfully!z%Error while updating header for task z: )r   r   rN   r   r   r   timesleepr   osexistsFileNotFoundErrortempfilemkstempcloseopencsvreaderwriternextr   rO   writerowshutilmoverS   remove)r@  r   csv_pathtemp_fd	temp_pathinfileoutfilero  rp  r*  hupdated_headerrC  rU   s                 r9   fix_image_url_headerr}  r  s   
'//33w3?
 ""'y12

2	+337777CK
 &&++H77>>(#";H: FGG "))+GYHHW(C'2> 	%&)S7B?	%CJZZ'FZZ(F &\F_efZ[QWWY__->,-NkTUUfNfOON+ $ 	% 	%  	Ix(gY<=> 77>>)$		)$ %_ )) $WIZ89 !-- 	(	1IJK	, g	% 	% 	% 	%&  !5gYbDE77>>)$IIi !	 77>>)$		)$	 %s    G?  H' "I, 1I :I;,I'+II -I, (K ?"H$#H$'"IIII	I  I)%I, ,	K5AJ?:K ?KK K L/LLL	L)Gr(  r   r   urllib.parser   r   r   r   r	   numpyr   pandasr   django.confr
   rest_frameworkr   rest_framework.exceptionsr   rest_framework.paginationr   rest_framework.permissionsr   r   rest_framework.responser   rest_framework.viewsr   rest_framework.viewsetsr   'rest_framework_simplejwt.authenticationr   rest_framework_simplejwt.tokensr   bot.utils.scrape_detailsr   modelsr   r   serializersr   r   tasksr   r   r   r   r!   rF   r   r   r   r   r-  r1  uuidrE  bot.china.made_in_chinarF  rU  playwright.async_apirG  asgiref.syncrH  r^  rn  rg  rj  rs  re  r}  rD   r;   r9   <module>r     s    	 ( I I     ! 5 : @ , ( + E 8 9 + D> >&- &:rp' rpj	]p' ]p~5p7 5pn0 0$Z;w Z;xpG p$p7 p6 -0 7(( 1 &,-^  	   :r;   