
    9if5                        S SK Jr  S SKJr  S SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJr  S SKJr  S SKrS SKrS SKJr  S SKJr  \R*                  " \R,                  S	9  \R.                  " \5      rS
rSr\R8                  " \SS9  \R:                  R=                  \5      (       a%  \" \S5       r \RB                  " \ 5      r"SSS5        O0 r"\"RG                  5        V Vs0 s H  u  p\RI                  U 5      U_M     snn r"\RJ                  r&\" SS9r' " S S\5      r( " S S\5      r)\'RU                  S\	\)   SS9S\(4S j5       r\'RU                  S\	\)   SS9S\(4S j5       r+g! , (       d  f       N= fs  snn f )    )FastAPI)	BaseModelN)List)ThreadPoolExecutoras_completed)Image)BytesIO)predict_all)leveltemp_imageszimage_hashes.jsonT)exist_okrzImage Filter API)titlec                   0    \ rS rSr% \\   \S'   \\S'   Srg)ImageBatchRequest)   
image_urlsactivity N)__name__
__module____qualname____firstlineno__r   str__annotations____static_attributes__r       '/var/www/html/ai-image-ml/api_filter.pyr   r   )   s    S	Mr   r   c                   :    \ rS rSr% \\S'   \\S'   \\   \S'   Srg)FilterResponse.   	image_urlacceptedreasonsr   N)	r   r   r   r   r   r   boolr   r   r   r   r   r    r    .   s    NN#Yr   r    z/filterzFilter multiple images by URL)response_modelsummaryrequestc                 j  ^ / nU R                   m[        T5        S[        S[        4U4S jjn[	        SS9 nU R
                   Vs/ s H  oCR                  X$5      PM     nn[        U5       H"  nUR                  UR                  5       5        M$     S S S 5        U$ s  snf ! , (       d  f       U$ = f)Nr"   returnc           
      2  >  [         R                  SU  35        [        R                  " U SS9nUR                  S:w  a  [        U SS/S9$ U R                  S5      S	   R                  S
5      S   R                  5       nUS;  a  [        U SS/S9$ [        R                  " 5        SU 3n[        R                  R                  [        U5      n[        US5       nUR                  UR                   5        S S S 5         ["        R                  " [%        UR                   5      5      n['        U5      nU [(        U'   [        [*        S5       n[,        R.                  " [(        R1                  5        VV	s0 s H  u  p[3        U5      U	_M     sn	nUSS9  S S S 5        [9        UT5      n[        R:                  " U5        [        U UR                  SS5      UR                  SS/5      S9$ ! , (       d  f       N= fs  sn	nf ! , (       d  f       Ns= f! [4         a%  n
[         R7                  SU  SU
 35         S n
A
NS n
A
ff = f! [4         aF  n
[         R=                  SU  S[3        U
5       35        [        U SS[3        U
5       3/S9s S n
A
$ S n
A
ff = f)NzReceived image URL: 
   )timeout   Fz"Failed to download image from URL.r"   r#   r$   .?r   )jpgjpegpngzUnsupported image format.wbw   )indentzHashing failed for z: r#   r$   zImage rejected.zError processing image zError: )loggerinforequestsgetstatus_coder    splitloweruuiduuid4ospathjoinTEMP_DIRopenwritecontentr   r	   	hash_func	hash_dict	HASH_FILEjsondumpitemsr   	Exceptionwarningr
   removeerror)r"   responseextfilenamefilepathfimgimg_hashkveresultr   s               r   process_url"filter_images.<locals>.process_url:   sN   =	KK.yk:;||Ir:H##s*%'"AB  //#&r*005a8>>@C00%'"89  **,q.Hww||Hh7Hh%(() &Gjj)9)9!:;$S> '0	(#)S)QIIY__5FG5FTQs1vqy5FGSTU * !(3FIIh!#J6

9/@.AB ; &%( H *)  G!4YKr!EFFG  	LL29+RAxHI!#"3q6(+, 	s   AI AI A
I G,8I AH (H6G=HH AI ,
G:6I =H
HH I H 
IH>9I >II 
J;JJJ   )max_workers)
r   printr   r    r   r   submitr   appendr^   )r(   resultsr_   executorurlfuturesfuturer   s          @r   filter_imagesrk   4   s    GH	(O>s >~ >B 
	*h@G@R@RS@R??;4@RS"7+FNN6==?+ , 
+
 N	 T 
+	*
 Ns   B#B!3B#B##
B2z/filter_devz,Filter multiple images by URL (bypass logic)c           	          / nU R                    H5  n[        R                  SU 35        UR                  [	        US/ S95        M7     U$ )Nz"Bypass filter received image URL: Tr/   )r   r:   r;   re   r    )r(   rf   r"   s      r   filter_images_bypassrm      sN    G''	8DE~
 	 ( Nr   ),fastapir   pydanticr   r<   rA   rC   loggingtypingr   concurrent.futuresr   r   PILr   	imagehashrM   ior	   rk   r
   basicConfigINFO	getLoggerr   r:   rF   rL   makedirsrD   existsrG   rX   loadrK   rO   hex_to_hashphashrJ   appr   r    postrm   )r[   r\   s   00r   <module>r      s       	   ?     &   ',, '			8	$ 	 Ht $ 77>>)	i	IIaL	 
	 I 6?__5FG5FTQY""1%q(5FG	OO	 &'	 
Y  )D$8BabK, K cK\ -^(<Ftu	"3 	 v	Q 
	 Hs   /E' E8'
E5