
    j!                        d dl Z d dl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mZmZmZ d dlmZ d dlmZmZmZmZ d d	lmZmZmZmZ d d
lmZ d dl m!Z!  ede"d          Z#de$de%dz  fdZ&de$de'e%dz  e%dz  f         fdZ(e#)                    d          de$fd            Z*e#)                    d          de$de$fd            Z+e#)                    d          d             Z,e#)                    d          de$fd            Z-e#)                    d          d             Z.e#)                    d          d              Z/e#0                    d!          d"             Z1e#0                    d#          d$             Z2e#)                    d%          d&e$fd'            Z3e#0                    d(          d)             Z4dS )*    N)	Blueprintjsonifyrequest	send_fileurl_for)get_job)save_jobresolve_job)!attach_identity_to_manifest_items!load_identity_report_for_manifestload_result_manifestpersist_identity_results)emit)get_face_library_photo_pathget_face_library_statusidentify_image_pathlist_persons)get_face_library_taskget_running_face_library_tasklist_face_library_tasksstart_face_library_task)logger)get_request_ownerfacez/face)
url_prefixjob_idreturnc                      t          |           S )Nr
   )r   s    5/home/longshao/multi-rider-rag/modules/face/routes.py_resolve_jobr!   "   s    v    c                     t          |           }|sdS |                    d          }|rt          j                            |          s|d fS 	 |t          |          fS # t          $ r |d fcY S w xY w)N)NNresult_manifest_path)r!   getospathisfiler   	Exception)r   jobmanifest_paths      r    _job_manifestr,   &   s    
v

C zGG233M } = = Dy(7777   Dys   A   A10A1z/results/<job_id>c                    t          |           \  }}|t          ddd          dfS |t          ddd          dfS t          |                    d          pd          \  }}g }t	          ||          D ]}|                    |                    d          |                    d	          |                    d
          p|                    d	          |                    dd          t          d| |                    d                    |                    d          d           t          d|                    d          |                    d          |                    d          |                    d          |                    d          t          |          d||                    d          pi d          S )NFzjob not foundokerror  result manifest not foundr$    idnameorigin_name
size_bytesr   face.result_assetr   asset_ididentity)r4   r5   r6   r7   	asset_urlr;   Tjob_typesource_typesource_namestatus)r4   r=   r>   r?   r@   result_countsummary)r/   r*   itemsidentity_summary)r,   r   r   r%   r   appendr   len)r   r*   manifest_report_pathidentity_reportrC   items          r    list_job_resultsrK   3   s   !&))MC
{eo>>??DDe.IJJKKSPP$EcggNdFeFeFkik$l$l!L/E1(OLL 

 

hhtnn((#xx66J$((6:J:J"hh|Q77$%8RVRZRZ[_R`R`aaa HHZ00 		
 		
 		
 		
 ggdmmGGJ//"ww}55"ww}55''(++ #E

   / 3 3I > > D"	
 	
  r"   z"/results/<job_id>/asset/<asset_id>r:   c                 j   t          |           \  }}||dS t          j                            |          }|                    dg           D ]d}|                    d          |k    rI|                    d          }|r0t          j                            |          rt          |          c S  nedS )N)r2   r1   rC   r4   r'   )zasset not foundr1   )r,   r&   r'   basenamer%   r(   r   )r   r:   r*   rG   safe_asset_idrJ   r'   s          r    result_assetrO   Z   s    !&))MC
{h&//G$$X..MWb))  88D>>]**88F##D 't,, ' &&&E	 +
 "!r"   z/library/statusc                  X    t          dt                      t                      d          S )NT)r/   librarytask)r   r   r    r"   r    face_library_statusrT   j   s3    .00133	
 	
  r"   z/library/photo/<person_id>	person_idc                     t          |           }|rt          j                            |          sdS t	          |          S )N)zphoto not foundr1   )r   r&   r'   r(   r   )rU   r'   s     r    face_library_photorW   u   s>    &y11D &rw~~d++ &%%T??r"   z/library/personsc                     	 t          t          j                            dd                    } n# t          $ r d} Y nw xY w	 t          t          j                            dd                    }n# t          $ r d}Y nw xY wt          j                            dd          pd                                }t          | ||          }t          dd	i|          S )
Npage   	page_size   keywordr3   )rY   r[   r]   r/   T)intr   argsr%   r)   stripr   r   )rY   r[   r]   results       r    face_library_personsrb   }   s    7<##FA..//   ((b99::		   			|	2..4";;==Gty'JJJFD$)&)***s   -0 ??-A1 1B ?B z/library/tasksc                  r    t                      } |                     d d           t          d| d          S )Nc                 .    |                      dd          S )Nstart_tsr   )r%   )ts    r    <lambda>z)face_library_tasks_list.<locals>.<lambda>   s    QUU:q11 r"   T)keyreverse)r/   tasks)r   sortr   )rj   s    r    face_library_tasks_listrl      s=    #%%E	JJ114J@@@$//000r"   z/library/rebuildc                  L    t          d          \  } }t          d|| d          S )NrebuildTr/   startedrR   r   r   rR   rp   s     r    face_library_rebuildrs      s+    +I66MD'$7DAABBBr"   z/library/syncc                  L    t          d          \  } }t          d|| d          S )NsyncTro   rq   rr   s     r    face_library_syncrv      s+    +F33MD'$7DAABBBr"   z/library/task/<task_id>task_idc                 p    t          |           }|t          ddd          dfS t          d|d          S )NFztask not foundr.   r1   T)r/   rR   )r   r   )rw   rR   s     r    face_library_taskry      sF     ))D|e.>??@@#EE$--...r"   z	/identifyc                     t          t                    \  } }t          j        d          pi }|                    dd          pd                                }|                    d          pg }	 t          |                    d          pd          }n# t          $ r d}Y nw xY w|st          dd	d
          dfS t          |t                    r|st          ddd
          dfS t          |          \  }}||t          ddd
          dfS g }d |D             }	|                    dg           D ]h}
|
                    d          |	v rO|
                    d          r:t          j                            |
d                   r|                    |
           i|st          ddd
          dfS g }|D ]}
t          |
d         |          }|                    dg           D ]F}|                    dg           D ]-}|                    d          }|rt!          d|          |d<   .G|                    |
                    d          |
                    d          t!          d||
                    d                    d|           |pi                     d          pd}d}i g d }|rt#          |||          \  }}|lt%          |          }||d!<   |                    d"          pi |d#<   	 t'          |           n-# t          $ r }t)          j        d$||           Y d }~nd }~ww xY wd%d%g d&}	 t-          d'| ||||(           n-# t          $ r }t)          j        d)||           Y d }~nd }~ww xY wt          d|t/                      |                    d"          pi ||                    d*d%          |                    d+d%          d,d-          S ).NT)silentr   r3   	asset_idstop_k   Fzjob_id is requiredr.   i  zasset_ids is requiredr2   r1   c                     h | ]O}t          |                                          #t          j                            t          |                    PS rS   )strr`   r&   r'   rM   ).0r:   s     r    	<setcomp>z!identify_faces.<locals>.<setcomp>   sI    gggQTU]Q^Q^QdQdQfQfgBG$$S]]33gggr"   rC   r4   r'   zno valid selected assets found)r}   facestop_matches	id_numberzface.face_library_photo)rU   	photo_urlr5   r8   r9   )r:   
asset_namer<   r$   )rB   rC   identity_result_pathrB   rD   z1failed to persist identity summary for job %s: %sr   )createdupdatedrC   identity_matched)	owner_keyowner_ipr*   rC   ra   zBfailed to flow identity results into dispatch queue for job %s: %sr   r   )r   r   )r/   rC   rQ   rD   r   dispatch_flow)r   r   get_jsonr%   r`   r^   r)   r   
isinstancelistr,   r&   r'   r(   rE   r   r   r   dictr	   r   	exceptionr   r   )r   r   payloadr   r|   r}   r*   rG   selectedselected_idsrJ   rC   ra   r   matchrU   r+   identity_report_pathrI   snapshotexcr   s                         r    identify_facesr      s   +G44Ixd+++1rGkk(B''-24466FK((.BIGKK((-A..     Je.BCCDDcIIi&& Mi Me.EFFGGLL!&))MC
{h&e.IJJKKSPPHggIgggLWb)) " "88D>>\))dhhv.>.>)27>>RVW]R^C_C_)OOD!!! Ve.NOOPPRUUUE 
 
$T&\???JJw++ 	a 	aD-44 a a!IIk22	 a)01JV_)`)`)`E+&a 	 HHTNN"hhv..$%8RVRZRZ[_R`R`aaa  		
 	
 	
 	
 YBOO$:;;ArM"$r22O 	c0HX^`e0f0f-o?CyyH/CH+,+:+>+>y+I+I+ORH'(c"""" c c c !TV\^abbbbbbbbc !"a"==M
l 	
 	
 	
 	
 	
  l l l]_egjkkkkkkkkl .00 / 3 3I > > D"$8(,,Y::(,,Y:: 
	
 
	
  sB   1$B B%$B%<L 
L6L11L6 M 
N  M;;N )5r&   flaskr   r   r   r   r   shared.db.sqliter   get_saved_jobr	   shared.job_lookupr   /modules.detection.services.result_store_servicer   r   r   r   shared.eventsr   %modules.face.services.library_servicer   r   r   r   *modules.face.services.library_task_servicer   r   r   r   shared.config.configr   shared.ownership.ownershipr   __name__face_bpr   r   r!   tupler,   r%   rK   rO   rT   rW   rb   rl   postrs   rv   ry   r   rS   r"   r    <module>r      s   				 A A A A A A A A A A A A A A 5 5 5 5 5 5 % % % % % % ) ) ) ) ) )                                        ( ' ' ' ' ' 8 8 8 8 8 8 )FH
9
9
9     
# 
%tTD[(@"A 
 
 
 
 	 !!#S # # # "!#L 	122" " " " " 32" 	    	)**#    +* 	  + + ! + 	1 1 1 	 !!C C "!C
 	oC C C
 	&''/s / / / ('/ 	kT T T T Tr"   