
    Oj                        S r SSKJr  SSKrSSKJrJrJrJr  SSK	J
r
  SSKJr  SSKJrJr  SSKJr  \" \R$                  \R&                  S	9r\R+                  S
5      S 5       r\R/                  S5      S 5       r\R/                  S5      S 5       r\R/                  S5      S 5       r\R/                  S5      S#S\4S jj5       r\R/                  S5      S\4S j5       r\R=                  S5      S\4S j5       r\RA                  S5      \" S5      4S\4S jj5       r!\"S:X  a  SSK#r#\#RH                  " SSS S!S"9  gg)$z+
app.py

LeafDoctor AI
FastAPI Application
    )PathN)FastAPIFileHTTPException
UploadFile)JSONResponse)settings)SessionLocalcreate_tables)DiagnosisService)titleversionstartupc                      [        5         [        R                  R                  SSS9  [        R                  R                  SSS9  [        S5        [        S5        [        S5        g )NT)parentsexist_okz<============================================================zLeafDoctor AI Started)r   r	   upload_pathmkdir	data_pathprint     #/var/www/html/leaf-doctor-v1/app.pyr   r      sb     O  
   
 
(O	
!"	(Or   /c                  F    [         R                  [         R                  SS.$ )Nrunning)applicationr   status)r	   APP_NAMEAPP_VERSIONr   r   r   rootr!   ,   s#      (('' r   z/healthc                      [        5       n  [        U 5      nUR                  5       U R                  5         $ ! U R                  5         f = fN)r
   r   healthclosedbservices     r   r$   r$   6   s9     
B"2&~~ 	

	   7 A	z/statisticsc                      [        5       n  [        U 5      nUR                  5       U R                  5         $ ! U R                  5         f = fr#   )r
   r   
statisticsr%   r&   s     r   r+   r+   F   s;     
B"2&!!# 	

r)   z/historylimitc                 r   [        5       n [        U5      nUR                  U 5      n/ nU Hb  nUR                  UR                  UR
                  UR                  UR                  UR                  UR                  UR                  S.5        Md     UUR                  5         $ ! UR                  5         f = f)N)idimagecroplabelclass_id
confidence
created_at)r
   r   get_historiesappendr.   
image_pathcrop_detectedpredicted_labelr2   r3   r4   r%   )r,   r'   r(   	historiesresultitems         r   historyr=   V   s     
B"2&))%0	DMM''!__ ..!11 $"&//"&//
   	

s   BB$ $B6z/history/{history_id}
history_idc                     [        5       n [        U5      nUR                  U 5      nUc
  [        SSS9eUUR	                  5         $ ! UR	                  5         f = f)N  History not foundstatus_codedetail)r
   r   get_historyr   r%   )r>   r'   r(   r=   s       r   history_detailsrF   x   s\     
B"2&%%j1?* 
  	

s   *A Ac                     [        5       n [        U5      nUR                  U 5      nU(       d
  [        SSS9eSS0UR	                  5         $ ! UR	                  5         f = f)Nr@   rA   rB   successT)r
   r   delete_historyr   r%   )r>   r'   r(   deleteds       r   rI   rI      sf     
B"2&((
 *  t
 	

s   0A Az	/diagnose.r/   c                   #    [        U R                  5      R                  R                  5       nU[        R
                  ;  a
  [        SSS9e[        R                  " SUS9 nUR                  U R                  5       I S h  vN 5        [        UR                  5      nS S S 5        [        5       n [        U5      nUR                  W5      n[        U5      UR!                  5          UR#                  5         $  Nx! , (       d  f       Nc= f! [$         a     $ f = f! [$         a  n[        S['        U5      S9eS nAff = f! UR!                  5          WR#                  5         f ! [$         a     f f = f= f7f)Ni  zUnsupported image typerB   F)deletesuffixi  )r   filenamerM   lowerr	   ALLOWED_IMAGE_EXTENSIONSr   tempfileNamedTemporaryFilewritereadnamer
   r   diagnoser   r%   unlink	Exceptionstr)r/   rM   temp	temp_pathr'   r(   r;   exs           r   rV   rV      sQ    
 %..!((..0FX666+
 	

 
	$	$
 


%&O	
 
B"2&!!
 F# 	
	; &
 
H  		  
r7
 	

 	
	 		s   A!E9#C=C;
C= E93&D E9*D:E9;C==
DE9
DE9DE9
E (D;;E  E E6E&%E6&
E30E62E33E66E9__main__zapp:appz0.0.0.0i@  T)hostportreload)2   )%__doc__pathlibr   rQ   fastapir   r   r   r   fastapi.responsesr   configr	   databaser
   r   r(   r   r   r    appon_eventr   getr!   r$   r+   intr=   rF   rL   rI   postrV   __name__uvicornrunr   r   r   <module>rp      sy     < < *  0 $


   i &       3  B 	 !  "0 #$s  %8 +S	33 3l zKK		 r   