a
    +h`                     @   sH  d dl Z d dlZd dlmZmZ zd dlmZ e  W n eyJ   Y n0 d dlm	Z	m
Z
 edZdd Zdd	 ZG d
d deZdwddZdd Zdd Zdd ZdxddZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z d-d. Z!d/d0 Z"d1d2 Z#d3d4 Z$d5d6 Z%d7d8 Z&d9d: Z'd;d< Z(d=d> Z)d?d@ Z*dAdB Z+e,dfdCdDZ-e,dfdEdFZ.e,fdGdHZ/dIdJ Z0dKdL Z1dMdN Z2dOdP Z3dQdR Z4dSdT Z5dUdV Z6dWdX Z7dYdZ Z8d[d\ Z9d]d^ Z:d_d` Z;dadb Z<dcdd Z=dedf Z>dgdh Z?didj Z@dkdl ZAdmdn ZBdodp ZCdqdr ZDdydsdtZEdudv ZFdS )z    N)datetime	timedelta)MonkeyPatch)protocolversion_matchingz((?:[^,"']|"[^"]*"|'[^']*')+)c                 C   s
   t | S N)r   fromisoformat)value r
   @/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/m3u8/parser.pycast_date_time   s    r   c                 K   s   | j f i |S r   )	isoformat)r	   kwargsr
   r
   r   format_date_time   s    r   c                   @   s   e Zd Zdd Zdd ZdS )
ParseErrorc                 C   s   || _ || _d S r   linenoline)selfr   r   r
   r
   r   __init__#   s    zParseError.__init__c                 C   s   d| j | jf S )Nz'Syntax error in manifest on line %d: %sr   )r   r
   r
   r   __str__'   s    zParseError.__str__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r   "   s   r   Fc                 C   s  dddddddg g g g g g g g i i g g g d}ddddd}t | }|rft|}t|dkrft|t|dD ]z\}}| }|||||d}	|drt|r|||||}
|
rqp|t	j
rtf i |	 qpqp|t	jrtf i |	 qp|t	jrtf i |	 qp|t	jr.tf i |	 qp|t	jrLtf i |	 qp|t	jrjtf i |	 qp|t	jrtf i |	 qp|t	jrtf i |	 qp|t	jrtf i |	 qp|t	j d	rtf i |	 qp|t	j d	rtf i |	 qp|t	j r*t!f i |	 qp|t	j"rHt#f i |	 qp|t	j$rft%f i |	 qp|t	j&rt'f i |	 qp|t	j(rt)f i |	 qp|t	j*rt+f i |	 qp|t	j,rt-f i |	 qp|t	j.rt/f i |	 qp|t	j0rt1f i |	 qp|t	j2r8t3f i |	 qp|t	j4rVt5f i |	 qp|t	j6rtt7f i |	 qp|t	j8rt9f i |	 qp|t	j:rt;f i |	 qp|t	j<rt=f i |	 qp|t	j>rt?f i |	 qp|t	j@r
tAf i |	 qp|t	jBr(tCf i |	 qp|t	jDrFtEf i |	 qp|t	jFrdtGf i |	 qp|t	jHrtIf i |	 qp|t	jJrtKf i |	 qp|t	jLrtMf i |	 qp|t	jNrtOf i |	 qp|t	jPrtQf i |	 qp|t	jRrtSf i |	 qp|t	jTr6tUf i |	 qp|t	jVrTtWf i |	 qp|t	jXrrtYf i |	 qp|t	jZrqp| d
krqp|ds|d rt[f i |	 qp|ds|d rt\f i |	 qp|rpt]||qpd|v r|d ^|_d |S )zP
    Given a M3U8 playlist content returns a dictionary with all data found
    r   FN)media_sequence
is_variant
is_endlistis_i_frames_onlyis_independent_segmentsis_images_onlyZplaylist_type	playlistssegmentsiframe_playlistsimage_playliststilesmediakeysrendition_reportsskippart_infsession_datasession_keyssegment_map)expect_segmentexpect_playlistcurrent_keycurrent_segment_map   )r   r   datastatestrict#: r-   r.   segmentr!   )`string_to_linesr   validatelen	Exception	enumeratestrip
startswithcallabler   ext_x_byterange_parse_byterangeZext_x_bitrate_parse_bitrateZext_x_targetduration_parse_targetdurationZext_x_media_sequence_parse_media_sequenceZext_x_discontinuity_sequence_parse_discontinuity_sequenceZext_x_program_date_time_parse_program_date_timeZext_x_discontinuity_parse_discontinuityext_x_cue_out_cont_parse_cueout_context_x_cue_out_parse_cueoutZext_oatcls_scte35_parse_oatcls_scte35ext_x_asset_parse_assetZext_x_cue_in_parse_cue_inZext_x_cue_span_parse_cue_spanZext_x_version_parse_versionZext_x_allow_cache_parse_allow_cache	ext_x_key
_parse_keyextinf_parse_extinfext_x_stream_inf_parse_stream_infext_x_i_frame_stream_inf_parse_i_frame_stream_infext_x_media_parse_mediaZext_x_playlist_type_parse_playlist_typeZext_i_frames_only_parse_i_frames_onlyZext_is_independent_segments_parse_is_independent_segmentsZext_x_endlist_parse_endlist	ext_x_map_parse_x_mapext_x_start_parse_startext_x_server_control_parse_server_controlext_x_part_inf_parse_part_infext_x_rendition_report_parse_rendition_report
ext_x_part_parse_part
ext_x_skip_parse_skipext_x_session_data_parse_session_dataext_x_session_key_parse_session_keyext_x_preload_hint_parse_preload_hintext_x_daterange_parse_daterangeZ	ext_x_gap
_parse_gapext_x_content_steering_parse_content_steeringext_x_image_stream_inf_parse_image_stream_infZext_x_images_only_parse_is_images_onlyext_x_tiles_parse_tilesZext_m3u_parse_ts_chunk_parse_variant_playlistr   appendpop)contentr4   Zcustom_tags_parserr2   r3   linesZfound_errorsr   r   parse_kwargsZgo_to_next_liner
   r
   r   parse+   s   
	
r   c           	      K   sv   t | tjd ddd d }i }|D ]$}|dd\}}t||t|< q*||d< ||d vrr|d | d S )Nr6   r7   r1      =r/   r&   )ATTRIBUTELISTPATTERNsplitreplacer   rT   remove_quotesnormalize_attributer   )	r   r2   r3   r   paramskeyparamnamer	   r
   r
   r   rU      s    rU   c                 K   s   |  tjd ddd}t|dkr0|\}}n(t|dkrX|rLt|| n|d }d}d|vrhi |d< t||d d< ||d d	< d
|d< d S )Nr6   r7   ,r1   r   r   r8   durationtitleTr-   )r   r   rV   r   r;   r   float)r   r3   r   r4   r   chunksr   r   r
   r
   r   rW     s    
rW   c                 K   s  | d}|dr"| d|d< |drR|d |d< |d  t|d d7  < | |d< | dd|d< | d	d|d	< | d
d|d
< | dd|d< |d	 r|jn|j }|dd |d< |dd |d< |dd |d< |dd |d< |dd |d< | dd|d< |dr|d |d< nd |d vr:|d d  |drR|d |d< | dd |d< | dd |d< |d | d|d< d S ) Nr8   program_date_timecurrent_program_date_timer   secondsuricue_inFcue_outcue_out_startcue_out_explicitly_durationcurrent_cue_out_scte35scte35current_cue_out_oatcls_scte35Zoatcls_scte35current_cue_out_durationZscte35_durationcurrent_cue_out_elapsedtimeZscte35_elapsedtimeasset_metadatadiscontinuityr/   r   r&   r0   Zinit_section
daterangesgapgap_tagr!   r-   )r   getr   r   )r   r2   r3   r   r8   Zscte_opr
   r
   r   r     s<    


r   c           
      C   s   t || d ddd d }i }|| d s6|S |D ]h}|dd}t|dkrdd}|d }	n|\}}	t|}||v r|| |	}	n|d ur||	}	|	||< q:|S )Nr6   r7   r1   r   r   r   )r   r   r   r?   r;   r   )
prefixr   attribute_parserdefault_parserr   
attributesr   Zparam_partsr   r	   r
   r
   r   _parse_attribute_list>  s"     

r   c                 K   sn   d|d< d|d< d |d< t ddddd	d
d}t|d< dd |d< t|d< t|d< t|d< ttj| ||d< d S )NTr.   r   r   codecsaudiovideoZvideo_rangeZ	subtitles
pathway_idstable_variant_id
program_idc                 S   s   t t| S r   )intr   xr
   r
   r   <lambda>f      z#_parse_stream_inf.<locals>.<lambda>	bandwidthaverage_bandwidthZ
frame_rate
hdcp_levelstream_info)remove_quotes_parserr   r   strr   r   rX   )r   r2   r3   r   r   r
   r
   r   rY   X  s(    	rY   c                 K   s^   t dddd}t|d< t|d< t|d< t|d< ttj| |}|d|d	}|d
 | d S )Nr   r   r   r   r   r   r   r   )r   iframe_stream_infor"   )r   r   r   r   r   rZ   r   r   )r   r2   r   r   r   Ziframe_playlistr
   r
   r   r[   o  s    r[   c                 K   s^   t dddd}t|d< t|d< t|d< t|d< ttj| |}|d|d	}|d
 | d S )Nr   r   r   r   r   r   r   
resolution)r   image_stream_infor#   )r   r   r   r   r   r{   r   r   )r   r2   r   r   r   Zimage_playlistr
   r
   r   r|     s    r|   c                 K   s   d|d< d S )NTr   r
   r   r2   r   r
   r
   r   r}     s    r}   c                 K   s@   t d}t|d< t|d< t|d< ttj| |}|d | d S )Nr   r   Zlayoutr   r$   )r   r   r   r   r   r~   r   )r   r2   r3   r   r   Z
tiles_infor
   r
   r   r     s    r   c                 K   s<   t ddddddddd	d
d}ttj| |}|d | d S )Nr   Zgroup_idlanguageZassoc_languager   Zinstream_idZcharacteristicsZchannelsZstable_rendition_idZ
thumbnailsimager%   )r   r   r   r\   r   )r   r2   r   quotedr%   r
   r
   r   r]     s    r]   c                 K   s*   | | dd}|d | d|d< d S )Nr   )r   r   r    Fr.   )r   r   )r   r2   r3   r   Zplaylistr
   r
   r   r     s    r   c                 K   s.   d| vri | d< t f dti|| d d< d S )Nr8   cast_toZbitrate_parse_simple_parameterr   r3   r   r
   r
   r   rC     s    rC   c                 K   s6   d|vri |d< |  tjd d|d d< d|d< d S )Nr8   r6   r7   	byterangeTr-   )r   r   rA   r   r3   r   r
   r
   r   rB     s    rB   c                  K   s   t f dti| S Nr   r   r   r
   r
   r   rD     s    rD   c                  K   s   t f dti| S r   r   r   r
   r
   r   rE     s    rE   c                  K   s   t f dti| S r   r   r   r
   r
   r   rF     s    rF   c                 K   s>   t | fdti|\}}|ds*||d< ||d< ||d< d S )Nr   r   r   )!_parse_simple_parameter_raw_valuer   r   )r   r3   r2   r   _r   r
   r
   r   rG     s    

rG   c                 K   s   d| d< d S )NTr   r
   r3   r   r
   r
   r   rH     s    rH   c                 K   s   d| d< d S )NTr   r
   r   r
   r
   r   rP     s    rP   c                 K   s   d| d< d S )NTr   r
   r   r
   r
   r   rQ     s    rQ   c                  K   s   t f dti| S r   r   r   r
   r
   r   rR     s    rR   c                  K   s   t f dti| S r   )r   r   r   r
   r
   r   rS     s    rS   c                 K   s
   t | |S r   )r   r   r
   r
   r   r^     s    r^   c                 K   s2   t dd}ttj| |}||d< |d | d S )Nr   r   r0   r,   )r   r   r   rb   r   )r   r2   r3   r   Zquoted_parserZsegment_map_infor
   r
   r   rc     s    
rc   c                 K   s&   ddd i}t tj| |}||d< d S )NZtime_offsetc                 S   s   t | S r   r   r   r
   r
   r   r     r   z_parse_start.<locals>.<lambda>start)r   r   rd   )r   r2   r   r   Z
start_infor
   r
   r   re     s    re   c                 K   s   d| d< d S )NTr   r
   r   r
   r
   r   rx     s    rx   c                 K   s<   |  dd\}}t|dd}|r0|  }|||fS )Nr6   r1   z#EXT-X-r7   )r   r   r   r>   lower)r   r   	normalizer   r   r	   r
   r
   r   r     s
    r   c                 K   s    t | ||\}}|||< || S r   )r   )r   r2   r   r   r   r   r	   r
   r
   r   )_parse_and_set_simple_parameter_raw_value  s    r   c                 K   s   t | ||dS )NT)r   )r   r2   r   r   r
   r
   r   r     s    r   c                 K   s   d| d< d S )NTr   r
   r2   r   r
   r
   r   r_     s    r_   c                 K   s   d| d< d S )NTr   r
   r   r
   r
   r   r`     s    r`   c                 K   s   d| d< d S )NTr   r
   r   r
   r
   r   ra   "  s    ra   c           
      K   s   d|d< |  dd}t|dkr$d S ttj| tddd}|d	}|r| d
d}t|dkrn|d |d< n|d |d< |d |d< |d}|r||d< |d}|r||d< |d}	|	r|	|d< d S )NTr   r6   r1   r   r   elapsedtimer   r7   /r   r   r   r   )r   r;   r   r   rI   r   r   )
r   r3   r   elementscue_infoprogressZprogress_partsr   r   r   r
   r
   r   rJ   &  s2    




rJ   c                 K   s   d|d< d|d< d|   v r$d|d< | dd}t|dkr@d S ttj| td	}|d	}|d
pn|d}|d}|p||d< ||d< d S )NTr   r   ZDURATIONr   r6   r1   r   Zcuer   r7   r   r   )upperr   r;   r   r   rK   r   r   )r   r3   r   r   r   Zcue_out_scte35Zcue_out_durationr   r
   r
   r   rL   K  s"    

rL   c                 K   s2   t dd dd dd t d}ttj| ||d< d S )Nc                 S   s   t | S r   r   r   r
   r
   r   r   e  r   z'_parse_server_control.<locals>.<lambda>c                 S   s   t | S r   r   r   r
   r
   r   r   f  r   c                 S   s   t | S r   r   r   r
   r
   r   r   g  r   )Zcan_block_reloadZ	hold_backZpart_hold_backZcan_skip_untilZcan_skip_daterangesZserver_control)r   r   r   rf   r   r2   r   r   r
   r
   r   rg   b  s    rg   c                 K   s"   ddd i}t tj| ||d< d S )NZpart_targetc                 S   s   t | S r   r   r   r
   r
   r   r   q  r   z!_parse_part_inf.<locals>.<lambda>r)   )r   r   rh   r   r
   r
   r   ri   p  s    ri   c                 K   s8   t d}t|d< t|d< ttj| |}|d | d S )Nr   Zlast_msnZ	last_partr'   )r   r   r   r   rj   r   )r   r2   r   r   Zrendition_reportr
   r
   r   rk   x  s    rk   c                 K   s   t d}dd |d< t|d< t|d< t|d< ttj| |}|drj|d |d	< |d  t|d d
7  < |dd |d< |dd |d< d|vri |d< |d }d|vrg |d< |d | d S )Nr   c                 S   s   t | S r   r   r   r
   r
   r   r     r   z_parse_part.<locals>.<lambda>r   Zindependentr   r   r   r   r   r   r   r8   parts)	r   r   r   r   rl   r   r   r   r   )r   r3   r   r   partr8   r
   r
   r   rm     s"    
rm   c                 K   s&   t d}t|d< ttj| ||d< d S )NZrecently_removed_daterangesZskipped_segmentsr(   )r   r   r   r   rn   )r   r2   r   r   r
   r
   r   ro     s    ro   c                 K   s.   t dddd}ttj| |}|d | d S )NZdata_idr	   r   r   r*   )r   r   r   rp   r   )r   r2   r   r   r*   r
   r
   r   rq     s    rq   c                 K   sb   t | tjd ddd d }i }|D ]$}|dd\}}t||t|< q*|d | d S )Nr6   r7   r1   r   r   r+   )r   r   r   r   rr   r   r   r   )r   r2   r   r   r   r   r   r	   r
   r
   r   rs     s    rs   c                 K   s6   t d}t|d< t|d< t|d< ttj| ||d< d S )Nr   typeZbyterange_startZbyterange_lengthZpreload_hint)r   r   r   r   r   rt   r   r
   r
   r   ru     s    ru   c                 K   sn   t dddd}t|d< t|d< t|d< t|d< t|d	< t|d
< ttj| |}d|vr\g |d< |d | d S )NidclassZ
start_dateend_dater   Zplanned_durationZend_on_nextZ
scte35_cmdZ
scte35_outZ	scte35_inr   )r   r   r   r   r   rv   r   )r   r3   r   r   parsedr
   r
   r   rw     s    rw   c                 K   s    t dd}ttj| ||d< d S )NZ
server_urir   Zcontent_steering)r   r   r   ry   r   r
   r
   r   rz     s    
rz   c                 K   s$   |  ddd }||d< ||d< d S )Nr6   r1   r   r   )r   )r   r3   r   Z
scte35_cuer
   r
   r   rM     s    rM   c                 K   s   t tj| i td|d< d S )N)r   r   )r   r   rN   r   r   r
   r
   r   rO     s    
rO   c                 C   s   |    S r   )r>   
splitlines)stringr
   r
   r   r9     s    r9   c                  G   s   t t| ttS r   )dictzip	itertoolsrepeatr   )attrsr
   r
   r   r     s    r   c                 C   s(   d}|  |r$| |r$| dd S | S )zi
    Remove quotes from string.

    Ex.:
      "foo" -> foo
      'foo' -> foo
      'foo  -> 'foo

    )"'r1   )r?   endswith)r   quotesr
   r
   r   r     s    
r   c                 C   s   |  dd  S )N-r   )r   r   r>   )	attributer
   r
   r   r      s    r   c                 C   s0   d| vr|S d| d vr|S | d d  ||S )zf
    Helper function for getting custom values for Segment
    Are useful with custom_tags_parser
    r8   custom_parser_values)r   )r3   r   defaultr
   r
   r   get_segment_custom_value  s
    r   c                 C   s<   d| vri | d< d| d vr(i | d d< || d d |< dS )ze
    Helper function for saving custom values for Segment
    Are useful with custom_tags_parser
    r8   r   Nr
   )r3   r   r	   r
   r
   r   save_segment_custom_value  s
    r   )FN)N)N)Gr   rer   r   Z backports.datetime_fromisoformatr   Zpatch_fromisoformatImportErrorZm3u8r   r   compiler   r   r   r<   r   r   rU   rW   r   r   rY   r[   r|   r}   r   r]   r   rC   rB   rD   rE   rF   rG   rH   rP   rQ   rR   rS   r^   rc   re   rx   r   r   r   r   r_   r`   ra   rJ   rL   rg   ri   rk   rm   ro   rq   rs   ru   rw   rz   rM   rO   r9   r   r   r   r   r   r
   r
   r
   r   <module>   s   
	
 P%
	
	
%
