HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/flask_restx/__pycache__/mask.cpython-310.pyc
o

/we^�@s�ddlZddlZddlmZddlmZddlmZe�e	�Z
e�d�ZGdd�de�Z
Gd	d
�d
e
�ZGdd�de�Zddd�ZdS)�N)�OrderedDict)�isclass�)�	RestErrorz\{|\}|\,|[\w_:\-\*]+c@�eZdZdZdS)�	MaskErrorz#Raised when an error occurs on maskN��__name__�
__module__�__qualname__�__doc__�r
r
�I/home/arjun/projects/env/lib/python3.10/site-packages/flask_restx/mask.pyr�rc@r)�
ParseErrorz#Raised when the mask parsing failedNrr
r
r
rrrrcsJeZdZdZd�fdd�	Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	�Z
S)�Maskz�
    Hold a parsed mask.

    :param str|dict|Mask mask: A mask, parsed or not
    :param bool skip: If ``True``, missing fields won't appear in result
    NFcsv||_t|t�rtt|���|�|�dSt|ttf�r+tt|�j|fi|��dS||_tt|�jdi|��dS)Nr
)	�skip�
isinstance�str�superr�__init__�parse�dictr)�self�maskr�kwargs��	__class__r
rr"s
z
Mask.__init__cCs�|sdS|�|�}|}d}g}t�|�D]B}|dkr4||vr"td��t|jd�||<|�|�||}n |dkrC|s>td��|��}n|dkrP|dvrOtd	��nd
||<|}q|r]td��dS)a�
        Parse a fields mask.
        Expect something in the form::

            {field,nested{nested_field,another},last}

        External brackets are optionals so it can also be written::

            field,nested{nested_field,another},last

        All extras characters will be ignored.

        :param str mask: the mask string to parse
        :raises ParseError: when a mask is unparseable/invalid

        N�{zUnexpected opening bracket)r�}zUnexpected closing bracket�,)r rNzUnexpected commaT�Missing closing bracket)�clean�LEXER�findallrrr�append�pop)rr�fields�previous�stack�tokenr
r
rr-s4



��z
Mask.parsecCs@|�dd���}|ddkr|ddkrtd��|dd�}|S)	zRemove unnecessary characters�
�rr���rr!r)�replace�stripr)rrr
r
rr"\sz
Mask.cleancs�ddlm}t|tttf�r�fdd�|D�St||j|j|jf�r'|�	��St
|�|jkr8|j|j|j
�d�S||jkrC|j�d�St||j�sSt|�rWt||j�rWtd��t|ttf�sft|d�rf|j}��|�S)	z�
        Apply a fields mask to the data.

        :param data: The data or model to apply mask on
        :raises MaskError: when unable to apply the mask

        r)r'csg|]}��|��qSr
)�apply)�.0�d�rr
r�
<listcomp>rszMask.apply.<locals>.<listcomp>)�default�	attributer)rzMask is inconsistent with model�__dict__)r,r'r�list�tuple�set�Nested�List�	Polymorph�clone�type�Rawr5r6r�
issubclassrrr�hasattrr7�filter_data)r�datar'r
r3rr0fs&


��
�
z
Mask.applycCs�i}|��D]=\}}|dkrqt|t�r3|�|d�}|jr"|dur"q|dur+d||<q|�|�||<q|jr;||vr;q|�|d�||<qd|��vr[|��D]\}}||vrZ|||<qN|S)z�
        Handle the data filtering given a parsed mask

        :param dict data: the raw data to filter
        :param list mask: a parsed mask to filter against
        :param bool skip: whether or not to skip missing fields

        �*N)�itemsrr�getrr0�keys)rrD�out�field�content�nested�key�valuer
r
rrC�s(	

�zMask.filter_datacCsd�d�dd�|��D���S)Nz{{{0}}}r cSs0g|]\}}t|t�rd�|t|�f�n|�qS)r,)rr�joinr)r1�k�vr
r
rr4�s��z Mask.__str__.<locals>.<listcomp>)�formatrOrFr3r
r
r�__str__�s���zMask.__str__)NF)r	r
rrrrr"r0rCrS�
__classcell__r
r
rrrs/
  rFcCst||��|�S)a
    Apply a fields mask to the data.

    :param data: The data or model to apply mask on
    :param str|Mask mask: the mask (parsed or not) to apply on data
    :param bool skip: If rue, missing field won't appear in result
    :raises MaskError: when unable to apply the mask

    )rr0)rDrrr
r
rr0�s
r0)F)�logging�re�collectionsr�inspectr�errorsr�	getLoggerr	�log�compiler#rrrr0r
r
r
r�<module>s