
    Mi#              	       J   d dl mZmZmZ d dlmZmZ d dlmZ d dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d d	lmZ d
Z e       Z eejA                  dd      d      Z! ee!      Z"d Z# e       Z$ ee%      jL                  Z'e'dz  Z( e e)e(            Z* G d de      Z+de)dee)   fdZ,e$j[                  d      d        Z.e$j[                  de      d.dede/fd       Z0e$j[                  de      defd        Z1e$je                  d!       ed"       ed"      fd#e/d$e)fd%       Z3e$j[                  d&e      ded#e/fd'       Z4ejj                  jm                  e!       e7d(k(  r%d dl8Z8 e8jr                  d)d*d+d e)e'      gd,g-       yy)/    )FastAPIRequestForm)HTMLResponseRedirectResponse)Jinja2TemplatesN)ListDict)Path)ColumnIntegerStringTextBooleanFloatDateTimecreate_engine)declarative_basesessionmaker)funczjpostgresql+asyncpg://postgres:p4python@postgres.cqf3qroocfwm.us-east-1.rds.amazonaws.com:5432/email_filterz+asyncpg T)echo)bindc                  t   t               } 	 | j                  t              j                  t        j                  j                               j                         }|xs g 	 | j                          S # t        $ r(}t        d|       g cY d }~| j                          S d }~ww xY w# | j                          w xY w)NzDB error while fetching emails:)
SessionLocalquery	EmailSpamorder_byreceived_atdescallclose	Exceptionprint)dbemailses      %/var/www/html/Manjeet/manjeet/main.pyget_all_emails_from_dbr)      s    	BHHYXi++0023SU 	
 |
 	
	  /3	

	 	
s0   AA1 1	B":BB"B% B""B% %B7	templates)	directoryc                      e Zd ZdZ eedd      Z eed      Z eed      Z	 ee
d      Z eed      Z eed      Z eed      Z eed      Z ee
d      Z eed      Z e ed       ej,                               Zy	)
r   email_filterT)primary_keyindexF)nullable)default)timezone)server_defaultN)__name__
__module____qualname____tablename__r   r   idr   sender_emailsubjectr   bodyr   spam_probabilitypredicted_labelfeedback_labelr   is_reviewedemail_summarymodel_accuracyr   r   nowr        r(   r   r   1   s    "M	T	6B&51LVd+G$&Ded3Vd3OFT2N%0K4$/MED1N40LKrD   r   r:   returnc                     g }| j                         }g d}|D ]=  }t        j                  ||t        j                        s)|j	                  d| d       ? |S )z*Check email subject for spam-like patterns)zF\b(win|winner|won|prize|free|urgent|limited time|act now|click here)\bz\$[\d,]+z!!!+z"\b(viagra|cialis|pharmacy|pills)\bz(\b(guaranteed|risk-free|no obligation)\bz>\b(click|download|claim|verify)\b.*\b(now|immediately|today)\bz&Subject contains suspicious pattern: '')lowerresearch
IGNORECASEappend)r:   spam_patternssubject_lowerspam_keywordspatterns        r(   analyze_email_subjectrQ   E   sZ    MMMOMM !99WmR]];  #I'RS!TU ! rD   /c                  "   K   t        d      S w)N/dashboard/spam)url)r   rC   rD   r(   rootrV   ]   s      122s   rT   )response_classrequestpagec           
        K   d}|dz
  |z  }d }t               }t        |      }|D cg c]  } ||j                         }}t        d |D              }	t        d |D              }
t        d |D              }t        d |D              }||z
  }t	               }|j                  t        j                        j                  t        j                  j                  d             j                  t        j                  j                               j                         }|rt        |j                  dz  d      }nd	}||||z    }g }|D ]w  } ||j                        }|j                  }|t        |dz  d      nd }|j!                  |j                  |j"                  |j$                  |j&                  |r|nd
|d       y ||z   dz
  |z  }||	|
||d}t(        j+                  d| |||||d      S c c}w w)N      c                 F    | r| j                         j                         S d S )N)striprH   )labels    r(   normalize_labelz'spam_dashboard.<locals>.normalize_labelj   s    (-u{{}""$747rD   c              3   ,   K   | ]  }|d k(  s	d  yw)spamr\   NrC   .0ls     r(   	<genexpr>z!spam_dashboard.<locals>.<genexpr>t   s     :
1a6kQ
   
c              3   ,   K   | ]  }|d k(  s	d  yw)hamr\   NrC   rc   s     r(   rf   z!spam_dashboard.<locals>.<genexpr>u   s     8z!Q%ZAzrg   c              3   ,   K   | ]  }|d k(  s	d  yw)	undecidedr\   NrC   rc   s     r(   rf   z!spam_dashboard.<locals>.<genexpr>v   s     DZ13C!Zrg   c              3   &   K   | ]	  }|d  y w)Nr\   rC   rc   s     r(   rf   z!spam_dashboard.<locals>.<genexpr>w   s     B*Q	q*s   d   r   rk   )email_idsenderr:   summaryr_   ml_score)totalrb   ri   rk   
classifiedzspam_dashboard.html)rX   r&   statsrY   total_pagesrA   )r)   lenr=   sumr   r   r   rA   filterisnotr   r8   r    firstroundr<   rL   r9   r:   r;   r*   TemplateResponse)rX   rY   PER_PAGEoffsetr`   
all_emailstotal_emailsr'   
all_labels
spam_count	ham_countundecided_countnot_classified_countclassified_countr%   latest_accuracy_rowmodel_accuracy_percent	db_emailsenhanced_emailsemaildisplay_label	spam_probrq   ru   rt   s                            r(   spam_dashboardr   e   s    HQh("F8 ()Jz?L ?IIj/!"3"34jJI:
::J8z88IDZDDOB*BB#&::	B HHY%%&VI$$**401Xill!"
UW	  !&':'I'IC'OQR!S!" 6&8"34IO'(=(=>**	090E5S!,4((}}zz&3]  
 	 "  (*Q.8;K $&E %%%&4	

 
k Js   'G8G3F6G8z/dashboard/spam/addc                 :   K   t         j                  dd| i      S w)Nzspam_add.htmlrX   )r*   r|   )rX   s    r(   spam_add_pager      s$     %%	G s   z/dashboard/spam/classify.rn   classificationc                   K   |j                         }|dvrt        d|  d      S t               }	 |j                  t              j                  t        j                  | k(        j                         }|r||_        |j                          |j                          t        d|  d      S # |j                          w xY ww)N)rb   ri   rk   z/dashboard/spam/email//  status_code)rH   r   r   r   r   rx   r8   rz   r=   commitr"   )rn   r   r%   	email_objs       r(   classify_emailr      s     
 $))+N99"8
 CQTUU	BHHY'..y||x/GHNNP	(6I%IIK

 4XJ?SQQ 	
s   /CAB.  C.C  Cz /dashboard/spam/email/{email_id}c                   K   t               }	 |j                  t              j                  t        j                  |k(        j                         }|j                          |st        dd      S |j                  xs d}t        t        j                  d|t        j                              }|j                  }|t        |dz  d      nd }|j                  xs dj!                         j#                         }|j                  |j$                  xs d|j&                  |||||r|nd	||j(                  d

}	t*        j-                  d| |	d      S # |j                          w xY ww)NrT   r   r   r   z<[a-z][\s\S]*>rm   r\   z
No Subjectrk   )
r8   r:   ro   r;   rp   is_htmlrq   r_   r<   r   zemail_details.html)rX   r   )r   r   r   rx   r8   rz   r"   r   r;   boolrI   rJ   rK   r<   r{   r=   r^   rH   r:   r9   r   r*   r|   )
rX   rn   r%   r   r;   r   r   rq   r=   enhanced_emails
             r(   email_detailsr      s>    	B#**9<<8+CDJJL

 1sCC ::D299.bmmDEG &&I,5,AuY_a(tH ,,299;AACO hh==0L$$$3%((N %%#	
 ; 	
s   E$AE C>E$E!!E$__main__zmain:appz0.0.0.0i)#  venv)hostportreloadreload_dirsreload_excludes)r\   ):fastapir   r   r   fastapi.responsesr   r   fastapi.templatingr   rI   ostypingr	   r
   pathlibr   
sqlalchemyr   r   r   r   r   r   r   r   sqlalchemy.ormr   r   sqlalchemy.sqlr   DATABASE_URLBasereplaceenginer   r)   app__file__parentBASE_DIRTEMPLATES_DIRstrr*   r   rQ   getrV   intr   r   postr   r   metadata
create_allr4   uvicornrunrC   rD   r(   <module>r      s   * * < . 	 	   ] ] ] 9  |	R(	

 (" i >  ;&c-&89	M M(3 49 0 3 3 	<8K' K K 9Kb 	|<  =V 
$%Is)RRR &R2 	+LI( (C ( J(V   f  %zGKK]O rD   