U
    g                     @   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                    sL   t  | g | _|D ]0}|^}}|| jks0t| j|| f|  qd S N)super__init___actionsActionsAssertionErrorappend)self
downloaderactionsfactionargs	__class__ G/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/postprocessor/metadataparser.pyr      s    zMetadataParserPP.__init__c                 G   s*   || j krt|d|| f|  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 k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)r0   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   r:   r   interpretter?   s    
zMetadataParserPP.interpretterc                    s"    fdd}t |S )Nc                    s   |   }|d k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 r2   z with zChanged z to: zDid not find )	getr5   
isinstancestrZreport_warningtype__name__r3   subn)r0   valnfieldreplacer%   Z	search_rer   r   r   r   R   s    

z$MetadataParserPP.replacer.<locals>.f)r   r>   )r   rI   r%   rJ   r   r   rH   r   replacerP   s    
zMetadataParserPP.replacer)	INTERPRETZREPLACE)rD   
__module____qualname__r   classmethodr   staticmethodr#   r/   r1   r   r?   rK   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 k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   rL   r)   rJ   )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   )rU   ).0r   r   r   r   
<listcomp>t   s     z0MetadataFromFieldPP.__init__.<locals>.<listcomp>)r
   r   )r   r   formatsr   rW   r   r   s   s    zMetadataFromFieldPP.__init__)rD   rM   rN   rO   rU   r   rQ   r   r   r   r   rR   g   s   

rR   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   rL   Zdeprecation_warning)r   r   Ztitleformatr   r   r   r   y   s    zMetadataFromTitlePP.__init__)rD   rM   rN   r   rQ   r   r   r   r   rZ   x   s   rZ   )
r   commonr   utilsr   r   r   r   rR   rZ   r   r   r   r   <module>   s
   `