
    g%jw?                         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ed	edz  fd
Ze G d d                      Z G d d          ZdS )    )	dataclassfield)PathN)Sessionselect)Settings)ActivityEventContentScript	ImportLog	PostDraftProductionQueueItemProvider
VideoAssetVideoStatus)copy_video_to_processedgenerate_thumbnailpayloadreturnc                 J   t          j        | d          }dD ]0}t          j        ||          }|r|                    d          c S 1dD ]V}|                     |          }t          |t                    r*|                                r|                                c S Wd S )NF)ensure_ascii)z'youtube\.com/shorts/([A-Za-z0-9_-]{6,})zyoutu\.be/([A-Za-z0-9_-]{6,})z[?&]v=([A-Za-z0-9_-]{6,})   )youtube_video_idvideo_idexternal_youtube_id)	jsondumpsresearchgroupget
isinstancestrstrip)r   textpatternmatchkeyvalues         \/home/agent/projects/AutoShorts_Dashboard/backend/app/services/importers/prepared_package.py_extract_youtube_idr*      s    :gE222D " "	'4(( 	";;q>>!!!	"F ! !C  eS!! 	!ekkmm 	!;;==   4    c                       e Zd ZU dZeed<   dZeed<   dZeed<    ee	          Z
e	e         ed<    ee	          Ze	e         ed<    ee	          Ze	e         ed<   d	S )
ImportResultr   importedfailedskipped)default_factory	video_idslogserrorsN)__name__
__module____qualname__r.   int__annotations__r/   r0   r   listr2   r"   r3   dictr4    r+   r)   r-   r-      s         HcFCOOOGS 5666ItCy666uT222D$t*222d333FDI33333r+   r-   c                   *   e Zd ZdefdZdefdZddededz  de	fdZ
d	ede	dz  fd
Zddddde	dz  de	dz  de	de	dz  de	dz  de	dz  fdZdedefdZdedefdZdddededede	dz  de	f
dZdede	dz  de	dz  de	de	dz  de	dz  de	dz  fdZdS )PreparedPackageImportersettingsc                |    || _         || _        |j        dz  | _        |j        dz  | _        |j        dz  | _        d S )Nincoming	processed
thumbnails)r?   enginestorage_rootrA   rB   rC   )selfr?   rD   s      r)   __init__z PreparedPackageImporter.__init__$   sA      -
:!.<"/,>r+   r   c           
         | j                             dd           t                      }t          d | j                                         D                       D ]p}	 |                     |          }|rN|xj        dz  c_        |j                            |           |j	                            |j
        d|d           n3|xj        dz  c_        |j	                            |j
        ddd	           # t          $ r}|xj        dz  c_        |j
         d
| }|j                            |           |j	                            |j
        dt          |          d           |dz                      t          |          d           |                     |j
        |j
        dt          |                     Y d }~jd }~ww xY w|S )NT)parentsexist_okc              3   B   K   | ]}|                                 |V  d S N)is_dir).0ps     r)   	<genexpr>z4PreparedPackageImporter.scan_once.<locals>.<genexpr>.   s/      NN1188::NQNNNNNNr+   r   r.   )folderstatusr   r0   zmanifest missing)rQ   rR   messagez: r/   )rQ   rR   errorzimport_error.logutf-8encoding)
package_idfolder_namerR   rT   )rA   mkdirr-   sortediterdir_import_folderr.   r2   appendr3   namer0   	Exceptionr/   r4   r"   
write_text_log)rF   resultrQ   r   excrS   s         r)   	scan_oncez!PreparedPackageImporter.scan_once+   s   D4888NN(=(=(?(?NNNNN 	l 	lFl..v66 tOOq(OO$++H555K&&&+ai'j'jkkkkNNa'NNK&&&+_q'r'rsss l l l"#[11C11$$W---""fkXX[\_X`X`#a#abbb,,88SG8TTT		V[fkRZbefibjbj	kkkkkkkkl s   BC88
G
B=GG
Nmanifest
video_pathc                    |                     d          p|                     d          }|st          d          |t          d          | j        |z  }||j        z  }t	          ||          }|                     ||||          S )NrX   candidate_idpackage_id is requiredz)video_path is required for MVP API importrf   target_videometarY   )r    
ValueErrorrB   r_   r   _create_records)rF   rf   rg   rX   
target_dirrl   rm   s          r)   import_manifest_payloadz/PreparedPackageImporter.import_manifest_payloadA   s    \\,//O8<<3O3O
 	75666HIII^j0
!JO3&z<@@##XLW[is#tttr+   rQ   c                    dz  }|                                 sd S t          j        |                    d                    }|                    d          p|                    d          pj        }||d<   t          fddD             d           }|t          d          | j        |z  |j        z  }t          ||          }| 
                    |||j        	          S )
Nmanifest.jsonrU   rV   rX   ri   c              3   P   K   | ] }|z                                   |z  V  !d S rL   )exists)rN   r_   rQ   s     r)   rP   z9PreparedPackageImporter._import_folder.<locals>.<genexpr>S   s?      ||tdjmqdqcycyc{c{|Vd]||||||r+   )z	video.mp4z	video.movz
video.webmzvideo file missingrk   )ru   r   loads	read_textr    r_   nextrn   rB   r   ro   )rF   rQ   manifest_pathrf   rX   source_videorl   rm   s    `      r)   r]   z&PreparedPackageImporter._import_folderL   s   0##%% 	4:m55w5GGHH\\,//^8<<3O3O^SYS^
!+||||7_|||  C  D  D1222~
2\5FF&|\BB##XLW[ioit#uuur+   )video_asset_idrS   rT   rX   rY   rR   r{   rS   rT   c                    t          | j                  5 }|                    t          ||||||                     |                                 d d d            d S # 1 swxY w Y   d S N)rX   rY   rR   r{   rS   rT   )r   rD   addr   commit)rF   rX   rY   rR   r{   rS   rT   sessions           r)   rb   zPreparedPackageImporter._logZ   s    T[!! 	WKK	Z[Y_p~  IP  X]  ^  ^  ^  _  _  _NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =AA#&A#c           	         t          |                    d          t                    r|                    d          ni }t          |                    d          t                    r|                    d          ni }|p|t          |                    d          t                    r|                    d          ni t          |                    d          t                    r|                    d          ni t          |                    d          t                    r|                    d          ni d}t          |                    d          t                    r|                    d          ni }|d         }g d}g }|r1|D ].}	|                    |	          d	u r|                    |	           /|                    d
          du rd	|d<   |                    d           |                    d          du s|                    d          dk    rd	|d<   |                    d           |                    d          du s|                    d          du rd	|d<   |                    d           d|v r/|                    d          sd	|d<   |                    d           |rWi |i |ddt	          t          |                    d}i |d         i |ddt	          t          |                    d|d<   t          |                    d          p|d                             d          pd                                          }
|
|d<   ||d<   |S )Nqualityquality_reportvoice_qa	visual_qaproduction_report)r   r   r   r   checks)premium_ai_styleframes_usedstyleframes_text_freeno_large_top_titleno_unnecessary_lower_third_dimno_powerpoint_layoutrenderer_owned_text_listedFlarge_top_title_detectedTr   $unnecessary_lower_third_dim_detectedlower_third_dim_detectedunnecessaryr   powerpoint_layout_detectedpowerpoint_lookr   renderer_owned_textr   r/   )r   visual_gateoverall
blocked_byr    gates)r!   r    r;   r^   r[   setr"   lower)rF   rf   r   manifest_quality_reportreportsr   r   required_visual_checksblockersr'   r   s              r)   _quality_payloadz(PreparedPackageImporter._quality_payload_   s   -7Y8O8OQU-V-V^(,,y)))\^DNx||\lOmOmosDtDt"|(,,/?"@"@"@z|5@4>x||J?W?WY]4^4^fZ000df6@kAZAZ\`6a6aik222giFPQYQ]Q]^qQrQrtxFyFy  "B.A!B!B!B  @B	
 
 +5W[[5J5JD*Q*QYX&&&WYK(	"
 "
 "
 ! 	)- ) )::c??e++OOC(((==344<<+0F'(OO0111==?@@DHHIMMZtLuLu  zG  MG  MG7<F34OO<=====566$>>)--PaBbBbfjBjBj-2F)*OO2333 I--immDY6Z6Z-38F/0OO8999 	o K  KJvJx\dtz{~  @H  |I  |I  uJ  uJ  K  K  KG )o73C+D  )oPZSYPZks  AI  Y_  `c  dl  `m  `m  Yn  Yn  )o  )o  )oG$%gkk),,^8H0I0M0Mi0X0X^\^__eegg$	"r+   c                 b   |                     d          }|                     dd          }|                     |          }|                     d          pd}|dk    r'|r%|                     d          dk    rt          j        S 	 t          |          S # t          $ r t          j        cY S w xY w)Nqueue_item_idsourceprepared_packagerR   ready_for_reviewr   passed)r    r   r   needs_internal_fixr`   r   )rF   rf   r   r   r   status_values         r)   _status_from_manifestz-PreparedPackageImporter._status_from_manifest   s     _55h(:;;''11||H--C1C'''M'{{9%%11"55	0|,,, 	0 	0 	0////	0s   B B.-B.)rY   rl   rm   c                   |                     d          p|                     d          }|st          d          |                     |          }|                     |          }|                     d          p|                     d          pi }t	          |                     d|                     dd                              }	t	          |                     d	|                     d
d          p|                     dd                              }
t          | j                  5 }|                    t          t                    
                    t          j        |k                                                        }|r3|                     |||d|j        dd            |j        cd d d            S |                    t          t                    
                    t          j        |d         k                                                        }|r3|                     |||d|j        dd            |j        cd d d            S | j        | dz  }t#          ||           t          dSi d|d|d|                     dd          dt%          |          d|j        d|                     d          d|                     d          pdd|d         d|                     d          d|                     d          d|                     d          d|                     d          d|                     d          dt%          |          d|                     d          d |                     d           d!|                     d!          d"|                     d"          d#|                     d#          d$|                     d$          d|	d%|
d&dd'|                     d'          d(|                     d(          d)|}|                    |           |                                 |                    |           |                    t/          d*|j        d+d,||j        |                     d-          pd d./                     |                     d0          s?|                     d1          s*|                     d2          s|                     d-          r,|                    t/          d*|j        d3d4|/                     |                     d5          }|                     d6          }t3          |t4                    rt5          |          ni }|                    |||                     d7          |                     d8          |                     d9          |                     dd          t	          |                     d:d                    d;           t9          |          }|r0||_        |                    |           |                                 |                    t=          |j        t>          j         |                     d<          |                     d=          pg |	|
dt3          |t4                    r|ndt%          |          id>t3          |t4                    r|ndt%          |          id?@                     |                    t=          |j        t>          j!        |                     dA          p|                     d"          |                     dB          |                     dC          p|                     d=          pg dD|	|
dt3          |t4                    r|ndt%          |          idE|t3          |t4                    r|ndt%          |          id?F
  
                   |rF|                     tD          |          }|r(|tF          j$        k    rdGndH|_%        ||_&        |j        |_'        t%          |j(                  |_)        t%          |j(        dIz            |_*        |tF          j$        k    rdJ|_+        nd |_+        |                    |           |tF          j$        k    rdKndL}|tF          j$        k    rdMndN}|                    t/          dO|j        ||||j        ||dP/                     |                    t/          d*|j        |||j        ||dQ/                     |                     |||d+|j        dRd            |                                 |j        cd d d            S # 1 swxY w Y   d S )TNrX   ri   rj   
disclosurecommercial_disclosuresynthetic_mediais_aigcTcommercial_contentpromotes_own_brandFpromotes_third_partyr0   zduplicate package_idchecksumzduplicate checksumz.jpgr   r   	file_pathoriginal_file_name	mime_type	file_sizer   duration_secwidthheightfpsaspect_ratiothumbnail_path
transcriptscriptlanguageworking_titletopic_idseriescommercial_promotes_own_brandcommercial_promotes_third_partyquality_score
hook_scorerR   videor.   zPackage importedr   )rX   r   quality_overall)entity_type	entity_id
event_typelabelpayload_jsonr   r   r   quality_report_importedzQuality report importedr   source_metadata	family_ididea_idcontent_script_idtest_package)rX   r   r   r   r   r   r   suggested_tiktok_captionsuggested_hashtags)r   r   requires_consentr   draft)r{   providercaptionhashtags_jsonmetadata_jsonsource_metadata_jsonrR   suggested_youtube_titlesuggested_youtube_descriptionyoutube_tagsprivate)containsSyntheticMediacommercialContentselfDeclaredMadeForKidsr   )
r{   r   titledescription	tags_jsonprivacy_statusr   external_post_idr   rR   package_readyr   rs   zFQuality gate missing or failed; package not eligible for active reviewproduction_package_importedproduction_quality_failedzProduction package importedz&Production package failed quality gateproduction_queue)rX   r{   manifest_queue_item_idr   )r   rX   r   zpackage importedr<   ),r    rn   r   r   boolr   rD   execr   r   whereri   first_write_log_in_sessionidr   rC   r   r"   r_   r~   r   refreshr	   r   r!   r;   updater*   r   r   r   tiktokyoutuber   r   r   rR   actual_package_idr{   parentattached_package_pathexpected_package_manifestrT   )rF   rf   rl   rm   rY   rX   rR   quality_payloadr   r   r   r   existing	duplicatethumbr   r   raw_source_metadatar   
youtube_id
queue_itemr   r   s                          r)   ro   z'PreparedPackageImporter._create_records   s%   \\,//O8<<3O3O
 	75666++H55//99\\,//^8<<@W3X3X^\^
z~~.?iY]A^A^__``!*..1Ez~~VjlqGrGr  Hd  wA  wE  wE  F\  ^c  wd  wd  #e  #e  f  fT[!! f	W||F:$6$6$<$<Z=TXb=b$c$cddjjllH #**7JYX`Xce{  ~B  C  C  C{	f	 f	 f	 f	 f	 f	 f	 f	
  VJ%7%7%=%=j>QUYZdUe>e%f%fggmmooI $**7JYXaXdfz  }A  B  B  B |f	 f	 f	 f	 f	 f	 f	 f	 O&9&9&99E|U333   'Z%:  ||H.@AAA l+++	
 $0#4#4 ((;/// ((;//41 j)) "XXn555 hhw''' xx))) HHUOOO "XXn555  #5zzz $<<555   ||H---!" "j111#$ 'll?;;;%& "j111'(  ||H---)* (+, /A.@-. 16/0 'll?;;;12 $<<55534 v5E8 KKNNOOE"""KK'UXZdl~  ]g  sx  s  Tc  Tg  Tg  hq  Tr  Tr  Tz  vz  N{  N{  |  |  |  }  }  }""#344 y8K8KJ8W8W y[j[n[noz[{[{ y  @O  @S  @S  T]  @^  @^ yMg^w  @Y  hw  x  x  x  y  y  y$LL99M"*,,/@"A"AAKL_aeAfAf$nD)<$=$=$=lnO""(!.%\\+66#<<	22%-\\2E%F%F",,x1CDD $X\\.%%H%H I I$ $    -X66J !,6)E"""   KK	$x! %?@@&ll+?@@FB2AYk  BF  nx  yH  JN  nO  nO  [u  [j  [j  V^  `c  ds  `t  `t  Uu  v  v8B?TX8Y8Y%__`hjmn}j~j~_      KK	$x!)ll#<==^oA^A^$LL)HII",,~66b(,,G[:\:\b`b(9H_q  OT  |F  GV  X\  |]  |]  iC  ix  ix  dl  nq  rA  nB  nB  cC  D  D!+8B?TX8Y8Y%__`hjmn}j~j~_       a$[[)<mLL
 a;A[Ea;a;ag{J%3=J005J-7:<;N7O7OJ4;>|?RUd?d;e;eJ8!===+s
((+/
(KK
+++BHKLhBhBh!>!>  oJJ=C{Gc=c=c99  jREKK:LXbXer|  EJ  hr  FK  FN  jw  DS  YT  YT  !U  !U  !U  V  V  VKK'UXblty  [e  [h  xB  O^  I_  I_  !`  !`  !`  a  a  a&&w
KUZU]_qswxxxNN8Mf	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	s!   *Be2:Be2\e22e69e6r   c           
      V    |                     t          ||||||                     d S r}   )r~   r   )rF   r   rX   rY   rR   r{   rS   rT   s           r)   r   z-PreparedPackageImporter._write_log_in_session  sS    IU[lz  EL  TY  Z  Z  Z  	[  	[  	[  	[  	[r+   rL   )r5   r6   r7   r   rG   r-   re   r;   r   r"   rq   r]   rb   r   r   r   ro   r   r   r<   r+   r)   r>   r>   #   s{       ?H ? ? ? ?<    ,	u 	u 	u$+ 	uY\ 	u 	u 	u 	uvT vcDj v v v v rv  NR  hl   #* 3: s dgjndn   AD  GK  AK   [^  ae  [e    
, ,$ , , , ,\0d 0{ 0 0 0 0 lp o o o4 ot o4 o^adh^h otw o o o ob[W [#* [[^ae[e [or [  EH  KO  EO [  Z]  `d  Zd [  mp  sw  mw [ [ [ [ [ [r+   r>   )dataclassesr   r   pathlibr   r   r   sqlmodelr   r   app.core.configr   app.models.corer	   r
   r   r   r   r   r   r   app.services.video_metadatar   r   r;   r"   r*   r-   r>   r<   r+   r)   <module>r
     s   ( ( ( ( ( ( ( (        				 $ $ $ $ $ $ $ $ $ $ $ $ $ $ G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G S S S S S S S S
 
#* 
 
 
 
 4 4 4 4 4 4 4 4i[ i[ i[ i[ i[ i[ i[ i[ i[ i[r+   