o
    i,                     @   s  U 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
 i dee	je
jddee	je
jddee	je
jddee	je
jdd	ee	je
jdd
ee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jddee	je
jdee	je
jdee	je
jdee	je
jdee	je
jdee	je
jdee	je
jdee	je
jdee	je
jdddee	je
jdidZeed< G dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZd*S )+    )ABCabstractmethod)Optional)CommandPoliciesCommandsParserPolicyRecordsRequestPolicyResponsePolicy
explaincli)request_policyresponse_policysuglenprofile	dropindexaliasupdatealter	aggregatesyndumpcreateexplainsuggetdictdelaliasadddictadd	synupdatedropinfo)sugadddictdumpcursorsearchtagvalsaliasdelsugdel
spellcheckcommand)ftcoreSTATIC_POLICIESc                   @   4   e Zd Zededee fddZed	ddZdS )
PolicyResolvercommand_namereturnc                 C      dS a  
        Resolves the command name and determines the associated command policies.

        Args:
            command_name: The name of the command to resolve.

        Returns:
            CommandPolicies: The policies associated with the specified command.
        N selfr+   r/   r/   K/home/ubuntu/.local/lib/python3.10/site-packages/redis/commands/policies.pyresolve}      zPolicyResolver.resolvefallbackc                 C   r-   )a  
        Factory method to instantiate a policy resolver with a fallback resolver.

        Args:
            fallback: Fallback resolver

        Returns:
            PolicyResolver: Returns a new policy resolver with the specified fallback resolver.
        Nr/   r1   r5   r/   r/   r2   with_fallback   r4   zPolicyResolver.with_fallbackNr5   r*   r,   r*   	__name__
__module____qualname__r   strr   r   r3   r7   r/   r/   r/   r2   r*   |   
    r*   c                   @   r)   )
AsyncPolicyResolverr+   r,   c                    s   dS r.   r/   r0   r/   r/   r2   r3      s   zAsyncPolicyResolver.resolver5   c                 C   r-   )a  
        Factory method to instantiate an async policy resolver with a fallback resolver.

        Args:
            fallback: Fallback resolver

        Returns:
            AsyncPolicyResolver: Returns a new policy resolver with the specified fallback resolver.
        Nr/   r6   r/   r/   r2   r7      r4   z!AsyncPolicyResolver.with_fallbackNr5   r?   r,   r?   r9   r/   r/   r/   r2   r?      r>   r?   c                   @   R   e Zd ZdZ	ddedee ddfddZdedee	 fd	d
Z
edddZdS )BasePolicyResolverz*
    Base class for policy resolvers.
    Npoliciesr5   r,   c                 C      || _ || _d S N	_policies	_fallbackr1   rC   r5   r/   r/   r2   __init__      
zBasePolicyResolver.__init__r+   c                 C   s   | d}t|dkrtd| t|dkr|nd|d f\}}| j|d d u r8| jd ur6| j|S d S | j||d d u rQ| jd urO| j|S d S | j||S N.   zWrong command or module name: r'   r   splitlen
ValueErrorrG   getrH   r3   r1   r+   partsmoduler%   r/   r/   r2   r3      s   
 

zBasePolicyResolver.resolver*   c                 C      d S rE   r/   r6   r/   r/   r2   r7         z BasePolicyResolver.with_fallbackrE   r8   )r:   r;   r<   __doc__r   r   r*   rJ   r=   r   r3   r   r7   r/   r/   r/   r2   rB          
rB   c                   @   rA   )AsyncBasePolicyResolverz0
    Async base class for policy resolvers.
    NrC   r5   r,   c                 C   rD   rE   rF   rI   r/   r/   r2   rJ      rK   z AsyncBasePolicyResolver.__init__r+   c                    s   | d}t|dkrtd| t|dkr|nd|d f\}}| j|d d u r<| jd ur:| j|I d H S d S | j||d d u rX| jd urV| j|I d H S d S | j||S rL   rO   rT   r/   r/   r2   r3      s   
 

zAsyncBasePolicyResolver.resolver?   c                 C   rW   rE   r/   r6   r/   r/   r2   r7      rX   z%AsyncBasePolicyResolver.with_fallbackrE   r@   )r:   r;   r<   rY   r   r   r?   rJ   r=   r   r3   r   r7   r/   r/   r/   r2   r[      rZ   r[   c                       @   e Zd ZdZ	ddedee ddf fddZdd	d
Z  Z	S )DynamicPolicyResolverzB
    Resolves policy dynamically based on the COMMAND output.
    Ncommands_parserr5   r,   c                    s   || _ t | | dS )z
        Parameters:
            commands_parser (CommandsParser): COMMAND output parser.
            fallback (Optional[PolicyResolver]): An optional resolver to be used when the
                primary policies cannot handle a specific request.
        N)_commands_parsersuperrJ   get_command_policies)r1   r^   r5   	__class__r/   r2   rJ     s   	zDynamicPolicyResolver.__init__r*   c                 C      t | j|S rE   )r]   r_   r6   r/   r/   r2   r7        z#DynamicPolicyResolver.with_fallbackrE   r8   )
r:   r;   r<   rY   r   r   r*   rJ   r7   __classcell__r/   r/   rb   r2   r]      s    r]   c                       :   e Zd ZdZd
dee ddf fddZddd	Z  ZS )StaticPolicyResolverz?
    Resolves policy from a static list of policy records.
    Nr5   r,   c                       t  t| dS )z
        Parameters:
            fallback (Optional[PolicyResolver]): An optional fallback policy resolver
            used for resolving policies if static policies are inadequate.
        Nr`   rJ   r(   r6   rb   r/   r2   rJ        zStaticPolicyResolver.__init__r*   c                 C      t |S rE   )rh   r6   r/   r/   r2   r7   "     z"StaticPolicyResolver.with_fallbackrE   r8   )	r:   r;   r<   rY   r   r*   rJ   r7   rf   r/   r/   rb   r2   rh         rh   c                       r\   )AsyncDynamicPolicyResolverz1
    Async version of DynamicPolicyResolver.
    Npolicy_recordsr5   r,   c                    s   t  || dS )z
        Parameters:
            policy_records (PolicyRecords): Policy records.
            fallback (Optional[AsyncPolicyResolver]): An optional resolver to be used when the
                primary policies cannot handle a specific request.
        N)r`   rJ   )r1   rp   r5   rb   r/   r2   rJ   +  s   z#AsyncDynamicPolicyResolver.__init__r?   c                 C   rd   rE   )ro   rG   r6   r/   r/   r2   r7   8  re   z(AsyncDynamicPolicyResolver.with_fallbackrE   r@   )
r:   r;   r<   rY   r   r   r?   rJ   r7   rf   r/   r/   rb   r2   ro   &  s    ro   c                       rg   )AsyncStaticPolicyResolverz0
    Async version of StaticPolicyResolver.
    Nr5   r,   c                    ri   )z
        Parameters:
            fallback (Optional[AsyncPolicyResolver]): An optional fallback policy resolver
            used for resolving policies if static policies are inadequate.
        Nrj   r6   rb   r/   r2   rJ   A  rk   z"AsyncStaticPolicyResolver.__init__r?   c                 C   rl   rE   )rq   r6   r/   r/   r2   r7   I  rm   z'AsyncStaticPolicyResolver.with_fallbackrE   r@   )	r:   r;   r<   rY   r   r?   rJ   r7   rf   r/   r/   rb   r2   rq   <  rn   rq   N)abcr   r   typingr   redis._parsers.commandsr   r   r   r   r	   DEFAULT_KEYLESSDEFAULT_KEYEDSPECIALr(   __annotations__r*   r?   rB   r[   r]   rh   ro   rq   r/   r/   r/   r2   <module>   s   		!%)-159=AEgp&&