a
    h                     @   s\   d dl Z ddlmZ ddlmZmZmZ G dd deZG dd	 d	eZG d
d deZ	dS )    N   )PostProcessor   )	Namespacefilter_dictfunction_with_reprc                       sl   e Zd Z fddZedd Zedd Zedd Zd	d
 Z	e
dd Ze
dd ZeeedZ  ZS )MetadataParserPPc                    sN   t  | g | _|D ]2}|^}}|| jv s0J | j|| g|R   qd S N)super__init___actionsActionsappend)self
downloaderactionsfactionargs	__class__ X/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/postprocessor/metadataparser.pyr      s    zMetadataParserPP.__init__c                 G   s,   || j vrt|d|| g|R   dS )zEach action can be:
                (Actions.INTERPRET, from, to) OR
                (Actions.REPLACE, field, search, replace)
        z is not a valid actionN)r   
ValueError)clsr   datar   r   r   validate_action   s    
z MetadataParserPP.validate_actionc                 C   s:   t d| rd|  dS ddlm} || }|r6|| S )Nz[a-zA-Z_]+$z%(z)sr   )	YoutubeDL)rematchr   Zvalidate_outtmpl)tmplr   errr   r   r   field_to_template   s    
z"MetadataParserPP.field_to_templatec                 C   s   t d| s| S d}d}t d| D ]<}|t | ||  7 }|d|d d7 }| }q$|t| k r|t | |d 7 }|S )	z
        Converts a string like
           '%(title)s - %(artist)s'
        to a regex like
           '(?P<title>.+)\ \-\ (?P<artist>.+)'
        z	%\(\w+\)sr    z%\((\w+)\)sz(?P<r   z>.+)N)r   searchfinditerescapestartgroupendlen)fmtlastposregexr   r   r   r   format_to_regex%   s    
z MetadataParserPP.format_to_regexc                 C   s   | j D ]}|| qg |fS r	   )r   )r   infor   r   r   r   run:   s    

zMetadataParserPP.runc                    s2    fdd}  t|S )Nc              	      s   j | }djd |}|d u rRd d d S t|  D ],\}}|| |< d| dd| qbd S )NzSearching for  in zCould not interpret z as zParsed z from z: )	Z_downloaderZevaluate_outtmplwrite_debugpatternr$   	to_screenr   	groupdictitems)r/   Zdata_to_parser   	attributevalueinpoutZout_rer   templater   r   r   A   s    
z(MetadataParserPP.interpretter.<locals>.f)r"   r   compiler.   )r   r:   r;   r   r   r9   r   interpretter?   s    
zMetadataParserPP.interpretterc                    s"    fdd}t |S )Nc                    s   |   }|d u r&d   d S t|tsPd  dt|j  d S dd  d |\|  < }|rd  d|     nd	d   d S )
NzVideo does not have a zCannot replace in field z since it is a zReplacing all r1   z with zChanged z to: zDid not find )	getr4   
isinstancestrZreport_warningtype__name__r2   subn)r/   valnfieldreplacer$   Z	search_rer   r   r   r   R   s    

z$MetadataParserPP.replacer.<locals>.f)r   r=   )r   rH   r$   rI   r   r   rG   r   replacerP   s    
zMetadataParserPP.replacer)	INTERPRETZREPLACE)rC   
__module____qualname__r   classmethodr   staticmethodr"   r.   r0   r   r>   rJ   r   r   __classcell__r   r   r   r   r      s   
	




r   c                       s(   e Zd Zedd Z fddZ  ZS )MetadataFromFieldPPc                 C   sD   t d|}|d u r"td|| jj|ddd|dfS )Nz#(?s)(?P<in>.*?)(?<!\\):(?P<out>.+)$zit should be FROM:TO, not inz\::r;   )r   r   r   r   rK   r(   rI   )r   r   r   r   r   r   	to_actionh   s    zMetadataFromFieldPP.to_actionc                    s    t  | fdd|D  d S )Nc                    s   g | ]}  |qS r   )rT   ).0r   r   r   r   
<listcomp>t       z0MetadataFromFieldPP.__init__.<locals>.<listcomp>)r
   r   )r   r   formatsr   rV   r   r   s   s    zMetadataFromFieldPP.__init__)rC   rL   rM   rN   rT   r   rP   r   r   r   r   rQ   g   s   

rQ   c                       s   e Zd Z fddZ  ZS )MetadataFromTitlePPc                    s(   t  || jjd|fg | d d S )Ntitlezyt_dlp.postprocessor.MetadataFromTitlePP is deprecated and may be removed in a future version. Use yt_dlp.postprocessor.MetadataFromFieldPP instead)r
   r   r   rK   Zdeprecation_warning)r   r   Ztitleformatr   r   r   r   y   s    zMetadataFromTitlePP.__init__)rC   rL   rM   r   rP   r   r   r   r   rZ   x   s   rZ   )
r   commonr   utilsr   r   r   r   rQ   rZ   r   r   r   r   <module>   s
   `