o
    i~
                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZ G dd de	ZG d	d
 d
eejddZG dd dejZejG dd dZG dd deejddZd ddZd!ddZd"ddZejrejeegef Z dS dS )#z
PUBLIC API    )annotationsN)IEContentProviderIEContentProviderErrorregister_preference_genericregister_provider_generic)_pot_cache_provider_preferences_pot_cache_providers_pot_pcs_providers)PoTokenRequestc                   @  s   e Zd ZdZdS )PoTokenCacheProviderErrorz+An error occurred while fetching a PO TokenN)__name__
__module____qualname____doc__ r   r   V/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/youtube/pot/cache.pyr      s    r   c                   @  s<   e Zd ZejdddZejdd
dZejdddZdS )PoTokenCacheProviderkeystrreturn
str | Nonec                 C     d S Nr   selfr   r   r   r   get      zPoTokenCacheProvider.getvalue
expires_atintc                 C  r   r   r   )r   r   r   r   r   r   r   store!   r   zPoTokenCacheProvider.storec                 C  r   r   r   r   r   r   r   delete%   r   zPoTokenCacheProvider.deleteN)r   r   r   r   )r   r   r   r   r   r   )r   r   )r   r   r   abcabstractmethodr   r    r!   r   r   r   r   r      s    r   PCP)suffixc                   @  s   e Zd Ze Ze ZdS )CacheProviderWritePolicyN)r   r   r   enumauto	WRITE_ALLWRITE_FIRSTr   r   r   r   r&   *   s    r&   c                   @  s8   e Zd ZU ded< ded< ejZded< dZded	< dS )
PoTokenCacheSpeczdict[str, str | None]key_bindingsr   default_ttlr&   write_policyNzPoTokenCacheSpecProvider | None	_provider)r   r   r   __annotations__r&   r)   r.   r/   r   r   r   r   r+   /   s
   
 r+   c                   @  s&   e Zd ZdddZejddd	Zd
S )PoTokenCacheSpecProviderr   boolc                 C     dS )NTr   )r   r   r   r   is_available;   s   z%PoTokenCacheSpecProvider.is_availablerequestr
   PoTokenCacheSpec | Nonec                 C  r3   )z+Generate a cache spec for the given requestNr   )r   r5   r   r   r   generate_cache_spec>   s   z,PoTokenCacheSpecProvider.generate_cache_specN)r   r2   )r5   r
   r   r6   )r   r   r   r4   r"   r#   r7   r   r   r   r   r1   9   s    
r1   PCSPprovidertype[PoTokenCacheProvider]c                 C     t | ttjdS )z%Register a PoTokenCacheProvider classr9   
base_classregistry)r   r   r   r   r9   r   r   r   register_providerD   
   r@   type[PoTokenCacheSpecProvider]c                 C  r;   )z)Register a PoTokenCacheSpecProvider classr<   )r   r1   r	   r   r?   r   r   r   register_specM   rA   rC   	providersr   Ctyping.Callable[[CacheProviderPreference], CacheProviderPreference]c                  G  s   t ttjg| R  S )z0Register a preference for a PoTokenCacheProvider)r   r   r   r   )rD   r   r   r   register_preferenceV   s   rF   )r9   r:   )r9   rB   )rD   r:   r   rE   )!r   
__future__r   r"   dataclassesr'   typing&yt_dlp.extractor.youtube.pot._providerr   r   r   r   &yt_dlp.extractor.youtube.pot._registryr   r   r	   %yt_dlp.extractor.youtube.pot.providerr
   r   ABCr   Enumr&   	dataclassr+   r1   r@   rC   rF   TYPE_CHECKINGCallabler   CacheProviderPreferencer   r   r   r   <module>   s*    	

	
	
