U
    )Dh                     @   sT  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mZmZ d dlmZmZmZmZmZ d d	l	mZ d d
lmZ G dd deZdd Zdd ZG dd deZdd Zdd Zdd Zdd Z dd Z!dd Z"G dd  d eZ#G d!d" d"eZ$G d#d$ d$eZ%G d%d& d&eZ&d'd( Z'd)d* Z(d+d, Z)d-d. Z*dS )/    N)ViewQ)timezone)parse_datetime)calculate_priority_scoreFTPConnector)AdbreakChannelZone
EPGProgram)	CampaignsCampaignairtimelogCampaignPriorityScoresAdspotsCampaignTimeIntervals)
check_user)APIViewc                   @   s    e Zd ZdZdd Zdd ZdS )VerifsStaticInsertzverifs/index.htmlc                 C   s   t || ji S )N)rendertemplate_nameselfrequest r   */var/www/html/Focus/src/apps/vast/views.pyget   s    zVerifsStaticInsert.getc                 C   s  d|j kr|j d }|jdrzzdd lm  m} tj|jd 	dd }|
|}| }g }ddi}|d|D ]}	|jd	}
|jd
}tjj|
|d }t| |jd}|	d|D ]}|jd}|jd}|jd}|jd}|jd}|jd}||jj|j||||dd	dd |||d	 tjj|jj|j||||dd	dd |||dd
 qqtdd|dW S  tk
r } z"t| tdt|d W Y S d }~X Y nX ntdddS ntdd dS d S )!Nverifs_filez.verr   -nsz&http://www.scte.org/schemas/118-3/201Xzns:CueMessagenetworkNamezoneName)networknameZverifs_numberbroadcastDatezns:Spot	trafficIdspotIdairTime	airLengthairStatusCoderevisionT +)	r"   zonenamer#   r$   r%   r&   r'   r(   r)   false)
r"   r-   r#   r$   r%   r&   r'   airStatuscoder)   vercompleteSuccesszVerifs Collected successfully.)statusmessageresultFailed)r2   r3   z"Please upload a valid Verifs file.zNo file uploaded.)FILESnameendswithxml.etree.ElementTreeetreeElementTreeospathsplitextsplitparsegetrootfindallattribr   ChannelsZoneobjectsfilterfirstprintappend
id_channelchannel_nameid_zone_channelreplaceVerifsupdate_or_createJsonResponse	Exceptionstr)r   r   r   ETZ	last_parttreerootresults	namespaceZcue_messagenetwork_name	zone_namechannel_zonebroadcast_datespot
traffic_idspot_idair_time
air_lengthZair_status_coder)   er   r   r   post   sn    



*zVerifsStaticInsert.postN)__name__
__module____qualname__r   r   rb   r   r   r   r   r      s   r   c                 C   s0   ddl m} |tdd}|  t|  d S )Nr   )Thread)ZLeila
Feuilleton>   i'  )targetargs)	threadingrf   call_vast_apistartrH   join)r   rf   threadr   r   r   	send_vastd   s    rp   c                 C   s    t j | d}|tdd }|S )N%Y-%m-%d %H:%M:%S   )weeks)datetimestrptime	timedelta)date	timestampZone_week_agor   r   r   get_last_weekj   s    ry   c                   @   s   e Zd Zdd ZdS )PlaylistVastc           
      C   s
  ddl m} t|jd}|d}|d}zdz8tjj||dd}tt|jd d }	td|j W n& tjk
r   d}	tddi Y nX W 5 zBtdd|ii | d| }tjj	||d	
 }td
|j W n" tjk
r   tddi Y nX X td|iS )Nr   )serializersZads_schedule%Y-%m-%dz%H:%M:00ZEPG	last_weekr+   )start_time__lteend_time__gtezEPG: r3   zEPG Not Foundz2M Maroc)dayminutesfr_channel_namei D    zAnalytic SRF: zSFR Not Founddata)django.corer{   ry   POSTr   strftimerH   ZEpgrE   rF   rG   emission_nameDoesNotExistSfr_analyticsroundfloatpurcentr   rP   )
r   r   r{   r}   Zlast_week_dayZlast_week_minutZlast_week_epgZepg_dataanalytics_datatotal_volumer   r   r   rb   v   s.    

	zPlaylistVast.postN)rc   rd   re   rb   r   r   r   r   rz   u   s   rz   c                 C   s0   t j| |d}|jdkr,|j|_|  |S d S )Nheaders   )requestsr   status_codetextr2   save)urlr   replyresponser   r   r   alma_callback   s
    
r   c              	      sf   t jjdd d}t jjdd}ddi|rbtdd(  fdd	|D }d
d	 |D }W 5 Q R X d S )Nz
2024-04-17)datetime_timestamp__icontainsr2   )r   
User-AgenteMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36   max_workersc                    s    g | ]} j t|j|d qS ))r   r   )submitr   tracking_complete).0r   executorr   r   r   
<listcomp>   s     zanswer_Alma.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   )r4   )r   futurer   r   r   r      s     )VastResponserE   rF   ThreadPoolExecutor)r   Zupdated_repliesverify_repliesfuturesr4   r   r   r   answer_Alma   s     r   c                 C   s(   ddl m} ddi}td | }d S )Nrr   )update_vastr   r   called)tasksr   rH   delay)r   r   r   Zupdaterr   r   r   update_vast_response_v2   s     r   c                    sp  dd l }d}ddifddd}dgd	gd
gd}tdd$ d}t|ddd}||}tdd t|ddd}||}|dddg | D ]\}}|D ] fddt|D }	d}
|	D ]j}z<| }|
d7 }
tj	j
||j|
d}||j|
g W q tk
r< } z|W 5 d }~X Y qX qqqW 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   
   r   r   c                    s>   ddl m}m} || }||j}tj|  d}t|j |S )Nr   urlparseparse_qsr   r   )urllib.parser   r   queryr   r   rH   r   )r   r   r   
parsed_urlquery_paramsr   r   r   r   make_request_lego   s    

z/update_vast_response.<locals>.make_request_legorr   a	  https://ad.doubleclick.net/ddm/trackimp/N2359742.5267928STAMP0/B32770836.406082389;dc_trk_aid=598249260;dc_trk_cid=223908355;ord=[timestamp];dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;gdpr=$%7BGDPR%7D;gdpr_consent=$%7BGDPR_CONSENT_755%7D;ltd=;dc_tdv=1a	  https://ad.doubleclick.net/ddm/trackimp/N2359742.5267928STAMP0/B32609683.406115909;dc_trk_aid=598248921;dc_trk_cid=223962908;ord=[timestamp];dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;gdpr=$%7BGDPR%7D;gdpr_consent=$%7BGDPR_CONSENT_755%7D;ltd=;dc_tdv=1zhttps://ad.doubleclick.net/ddm/trackimp/N2359742.5267928STAMP0/B32623870.406579509;dc_trk_aid=598397817;dc_trk_cid=224003872;ord=[timestamp];dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;ltd=;dc_tdv=1)CityzNinja-GOTechnicr   z$/var/www/html/DAI27/media/Vast-3.csva )newlined   wLinkzStatus CodezNumber of Requestsc                    s   g | ]}  qS r   )r   )r   _)r   r   r   r   r   r   5  s     z(update_vast_response.<locals>.<listcomp>)r\   r   r   request_count)csvr   openwriterwriterowitemsranger4   TrackinglinkrE   creater   rQ   )r   r   r   Ztracking_linksZcsv_filenamecsvfiler   r\   urlsr   r   r   resZtrakcingra   r   )r   r   r   r   r   update_vast_response   sN     -


r   c                 C   s   ddl m} |  tdS )Nrr   )sample_taskz"Task is running in the background!)r   r   r   HttpResponse)r   r   r   r   r   run_task_view  s    r   c              	      s   ddl m } dd l}ddlm} | }|d}tjj|d d d d d d d}ddifdd	t	   fd
d|D }W 5 Q R X d S )Nr   rt   r   r|   )r   tracking_start_statustracking_firstquartile_statustracking_midpoint_statustracking_thirdquartile_statusimpression_sprintserve_statusimpression_double_click_statusr   r   c                    s  ddl m}m} || }||j}tj|  d}|jd kr|d}d| kr`|j|_|  nd| krz|j|_	|  nd| kr|j|_
|  nd| kr|j|_|  nld	| kr|j|_|  nRd
| kr|j|_|  n8d| kr
td|j |j|_|  n|j|_|  d S )Nr   r   r   eventjs_startjs_first_quartilejs_midpointjs_third_quartilevast_impressiondoubleclickjs_completezCheck: )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   tracking_completed_status)r   r   r   r   r   r   r   event_valuer   r   r   make_requests  s<    









z.update_vast_response_v3.<locals>.make_requestsc                    s.   i | ]&}|j |jfD ]} |||qqS r   )impression_sprintserveimpression_double_clickr   )r   r   r   )r   r   r   r   
<dictcomp>  s      z+update_vast_response_v3.<locals>.<dictcomp>)
rt   pytzdjango.db.modelsr   nowr   r   rE   rF   r   )r   rt   r   r   current_datetimereport_dater   r   r   )r   r   r   r   update_vast_response_v3  s,    
 -r   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	
VastReportc                 C   s   ddl m } ddlm} | d}ddg}g }|D ]}tjj|d}|| q6|jj	|d	d

 }	|jj	| tdd dd	d

 }
t|d||	|
dS )Nr   r   rr   VastResponseGor|   Too Good To Go 30sToo Good To Go 15sr7   F)Zdatetime_timestamp__containsZ%impression_sprintserve_status__isnulldayszcore/vast_report.html)	campaignsr   Zprev_impression)rt   modelsr   r   r   r   rE   r   rI   rF   countrv   r   )r   r   rt   r   todaycampaigns_listr   campaign_namecampaign_objZvast_total_impressionsZprev_vast_total_impressionr   r   r   r     s*    

zVastReport.getNc                 C   s   ddl m } ddlm} ddlm} |jd| d}|jd| d}|r|rt	d| t	d	| | j
||d
}t|ddS | d}	| tdd d}
| j
|
|	d
}t|ddS d S )Nr   r   Count	TruncDaterm   r|   endzstart: zend: )rm   r  Fsafe   r   zwe will get campaigns from z intel )rt   r   r   django.db.models.functionsr  r   r   r   r   rH   get_campaignsrP   rv   )r   r   formatrt   r   r  rm   r  r4   r   r}   rV   r   r   r   rb     s    

zVastReport.postc                 C   s   ddl m} ddlm} tjj||d}|j|dddj|dd	d}g }|D ]4}|d }	|d	 }
t
 j|	d
}||	|
|d qX|S )Nr   r   r  )Zdatetime_timestamp__date__gteZdatetime_timestamp__date__ltedatetime_timestamp)rw   rw   )
date_countr  )
start_date)rw   r   r   )r   r   r  r  r   rE   rF   annotatevaluesorder_byr   Zget_spots_impressionsrI   )r   rm   r  r   r  Zvast_querysetZvast_data_groupedr4   Z
date_grouprw   r  Zcampaigns_datar   r   r   r    s0    
	zVastReport.get_campaigns)Nrc   rd   re   r   rb   r  r   r   r   r   r     s   
r   c                   @   s   e Zd Zdd ZdS )	VastChartc                 C   sF   ddg}g }|D ]}t jj|d}|| qt| t|dd|iS )Nr   r   r   core/vast_call.htmlr   )r   rE   r   rI   rH   r   )r   r   r   r   r   r   r   r   r   r   9  s    zVastChart.getNrc   rd   re   r   r   r   r   r   r  8  s   r  c                   @   s   e Zd Zdd ZdS )LoadCampaignc                 C   sl   |j d}z4tjj|d}tjj|dd}tt|ddW S  tj	k
rf   tddid	d
 Y S X d S )Nr   r   )id_campaignfilenameFr  errorzCampaign not foundi  )r2   )
GETr   r   rE   r   rF   r  rP   listr   )r   r   r   r   Zspotsr   r   r   r   C  s    zLoadCampaign.getNr  r   r   r   r   r  B  s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )CallVastc                 C   s   t |dd|  iS )Nr  r   )r   r  r   r   r   r   r   ]  s    zCallVast.getc              	   C   s   ddl m} dd l}ddlm} |jd}|jd}|jd}t|}tj	j|d}|r|r|dkrt
d	| t
d
|j ddddddddd}	ddd}
ddi}t
d|
|  |j|
| ||	|d}t|dd|  iS )Nrr   	call_vastr   r   campaign_idadspotsnum_requestr   zCampaign name: zCampaign END DATE: 720567Dessin AnimeAbtal albiharar-MAr   2M_TVFrancer   hcontent_genrecontent_titlelanguagepod_max_durrK   countrya  https://tv.springserve.com/vast/881543?w=1920&h=1080&cb={{CACHEBUSTER}}&ip={{IP}}&ua={{USER_AGENT}}&pod_max_dur={{POD_MAX_DUR}}&pod_ad_slots={{POD_AD_SLOTS}}&app_bundle={{APP_BUNDLE}}&app_name={{APP_NAME}}&app_store_url={{APP_STORE_URL}}&did={{DEVICE_ID}}&us_privacy={{US_PRIVACY}}a  https://tv.springserve.com/vast/881550?w=1920&h=1080&cb={{CACHEBUSTER}}&ip={{IP}}&ua={{USER_AGENT}}&pod_max_dur={{POD_MAX_DUR}}&pod_ad_slots={{POD_AD_SLOTS}}&app_bundle={{APP_BUNDLE}}&app_name={{APP_NAME}}&app_store_url={{APP_STORE_URL}}&did={{DEVICE_ID}}&us_privacy={{US_PRIVACY}})r   r   r   r   zLink: )r   num_requestsparamsr\   r  r   )r   r  r   concurrent.futuresr   r   r   intr   rE   rH   end_dayr   r   r  )r   r   r  r   r   r   adspotr   r   r0  Zlink_mappingr   vastr   r   r   rb   `  s:    
 zCallVast.postc                 C   s6   ddddg}g }|D ]}t jj|d}|| q|S )Nr   ZHarry_Potterr   ZStarWarsr   )r   rE   r   rI   )r   r   r   r   r   r   r   r   r    s    zCallVast.get_campaignsNr  r   r   r   r   r  Z  s   :r  c                 C   s,   t jjdd}tjj|d}t|  d S )NzLegoPorsche.tsr  )ad_spot)r   rE   r   r   rF   rH   r   )r   r\   Zvastsr   r   r   update_report  s    r8  c           #      C   sF  dd l }ddlm} ddlm} ddlm} dd l}	dd l}
dd l	}dd l
m  m} ddlm} |
j d}|j| t|d }tjj|d}t  |j| ||d	}|jd
kr8d }|r(||}t| td| td|j |
j }|}|d}|dr|djd }|dj}|dj}|dj}|dj}|dj}d }d }d }|d}td| |}td| t jj!||||||||| |||d} | j"r|j||d}!|!jpd | _#|r|j||d}"|"jpd | _$| %  nt jj!||| d td|  ntd|j  W 5 Q R X |S )Nr   HTTPProxyAuthr  	parse_url)BeautifulSoupz%Y-%m-%d_%H%M%SZ_almar6  )r   r0  r   zthe ROOT is :zthe ROOT find is :rq   z.//Adidz.//Tracking[@event='start']z#.//Tracking[@event='firstQuartile']z.//Tracking[@event='midpoint']z#.//Tracking[@event='thirdQuartile']z.//Tracking[@event='complete']
ImpressionzDOUBLE CLICK: zEmpression: ad_idtracking_starttracking_firstquartiletracking_midpointtracking_thirdquartiler   r
  datetime_stringvast_urlr   r   r7  r   )r
  rF  rG  zsent request num z5Error: Failed to make the VAST request. Status code: )&r   requests.authr:  r1  r   urllib3.utilr<  randomrt   r<   r9   r:   r;   bs4r=  r   r   r=   rn   getcwdrR   r   rE   r   transactionatomicr   
fromstringrH   r   findrC   r   r   r   r   r   r   )#r   r   r0  call_numr\   r   r:  r   r<  rJ  rt   r<   rS   r=  r   folder_pathr4  r   Zvast_responserU   current_timer
  rF  rA  rB  tracking_first_quartilerD  tracking_third_quartiler   r   r   Zdouble_clickvast_objsprintserve_responsedouble_click_responser   r   r   vast_handling_old  s    






	
/rY  c           .      C   s  ddl m} tjj|d}t  t| }|d krLtd W 5 Q R  d S t	|}|d krrtd W 5 Q R  d S t
j
 }	|	d}
t|d\}}tt|D ]F}|| }|| }d|krd	|d kr|d d	 }t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|d
ddi\}}t|dkr|d d nd }t|dkr|d d nd }t|dkr|d d nd }t|dkr|d d nd }t|dkr|d d nd }t|dkr:|d d nd } t|dkrX|d d nd }!t|dkrv|d d nd }"t|dkr|d d nd }#t|d\}}$d }%d }&t|$dkr|$d d }%d }&n@t|$dkrtdd |$D d }%tdd |$D d }&ntd |jj|||||||	|
| |%|&|d}'|&rTtj|&|d}(|(jpPd |'_|%rptj|%|d})|)j|'_|rtj||d}*|*j|'_|rtj||d}+|+j|'_|rtj||d},|,j|'_|rtj||d}-|-j|'_|'  qW 5 Q R X d S )Nrr   r   r6  z'Failed to get content, stopping processz%Failed to parse XML, stopping processrq   ZAd
attributesr>  ZTrackingr   rm   ZfirstQuartilemidpointZthirdQuartilecompletemuteZunmutepauseZ
fullscreenr   r   r?     c                 s   s:   | ]2}d |krd|d  kr|d  d dkr|d V  qdS )rZ  r>  ZSpringServe_Impression_1r   Nr   r   itemr   r   r   	<genexpr>  s
        z vast_handling.<locals>.<genexpr>c                 s   s:   | ]2}d |krd|d  kr|d  d dkr|d V  qdS )rZ  r>  ZSpringServe_Impression_3P_1r   Nr   r`  r   r   r   rb    s
        zNeed To Be Handel r@  r   )r   r   r   rE   r   rM  rN  fetch_xml_from_urlrH   parse_xml_contentrt   r   r   extract_data_by_attributesr   lennextr   r   r   r   r   r   r   r   r   r   ).r   r   r0  rQ  r\   r   r4  xml_contentrU   r
  rF  Zad_componentsZad_component_listiZad_component_dataZad_componentrA  r   Ztracking_start_listZtracking_first_quartile_listZtracking_midpoint_listZtracking_third_quartile_listZtracking_complete_listZtracking_mute_listZtracking_unmute_listZtracking_pause_listZtracking_fullscreen_listrB  rT  rD  rU  r   Ztracking_muteZtracking_unmuteZtracking_pauseZtracking_fullscreenZimpression_listZ
impressionZimpression_3prV  rW  rX  Zcompleted_click_responseZfirst_quartile_responseZtracking_midpoint_responseZtracking_third_responser   r   r   vast_handlingG  s    

rj  c                 C   s<  ddl m} dd l}ddlm} ddlm} ddlm} dd l	}dd l
}dd l}dd lm  m}	 ddddddd	d
dd
dddd
dd	dddddddd}
ddddddddd}d}d}ddi}|j|||d }d!|d"d#d$d%|d"d#d$d&|d"d#d$d'|d"d#d$d(|d"d#d$g}d)d*id)d+id)d,id)d-id)d.ig}d S )/Nrr   r  r   r9  r  r;  i! i% i+ i- i$ i# i( i" i& i' i, i. )rg   Magazineu   Mini-Sériez	Magazine z
Mini-SerieSerieInformationzMagazine Sportifr#  zMagazine Sportif TelefilmDocumentaire	ReligieuxSportzLong MetrageNewszLong-MetragezDes Histoires Et Des Hommesu   SérieMusiqueTheatre	SpectacleJeuxr!  r"  r#  r$  r%  r   r&  r'  r(  a  https://tv.springserve.com/vast/850576?w=1920&h=1080&cb={{CACHEBUSTER}}&ip={{IP}}&ua={{USER_AGENT}}&pod_max_dur={{POD_MAX_DUR}}&pod_ad_slots={{POD_AD_SLOTS}}&app_bundle={{APP_BUNDLE}}&app_name={{APP_NAME}}&app_store_url={{APP_STORE_URL}}&did={{DEVICE_ID}}&us_privacy={{US_PRIVACY}}r   r   )r   r/  r0  z185.124.241.179:1232314a2f5dfde475
51ae51af21)httpauthz89.116.242.185:12323z45.140.244.198:12323z193.106.198.128:12323z136.175.224.210:12323ry  z5http://14a2f5dfde475:51ae51af21@185.124.241.179:12323z4http://14a2f5dfde475:51ae51af21@89.116.242.185:12323z4http://14a2f5dfde475:51ae51af21@45.140.244.198:12323z5http://14a2f5dfde475:51ae51af21@193.106.198.128:12323z5http://14a2f5dfde475:51ae51af21@136.175.224.210:12323)r   r  r   rH  r:  r1  r   rI  r<  rJ  rt   r<   r9   r:   r;   r   )r   r  r   r:  r   r<  rJ  rt   r<   rS   iab_catr0  r/  r   r   r5  
proxy_listproxies0r   r   r   rl     sx    
	 rl   )+astdjango.viewsr   r   r   django.utilsr   django.utils.dateparser   apps.core.utilsr   r   apps.channels.modelsr	   r
   r   apps.campaigns.modelsr   r   r   r   r   r   rest_framework.viewsr   r   rp   ry   rz   r   r   r   r   r   r   r   r  r  r  r8  rY  rj  rl   r   r   r   r   <module>   s:   U(		 ?ZZ
I q