o
    Zzjù2  ã                   @   s°   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZ dd
lmZ erNddlmZmZ G dd„ deƒZdS )zSThis module contains an object that represents a Telegram EncryptedPassportElement.é    )Ú	b64decode)ÚSequence)ÚTYPE_CHECKING)Údecrypt_json)ÚIdDocumentDataÚPersonalDetailsÚResidentialAddress)ÚPassportFile)ÚTelegramObject)Úde_json_decrypted_optionalÚde_json_optionalÚde_list_decrypted_optionalÚde_list_optionalÚparse_sequence_arg)ÚJSONDict)ÚBotÚCredentialsc                       sà   e Zd ZdZdZ								dddœdededeeB eB dB dedB d	edB d
e	e
 dB de
dB de
dB de
dB de	e
 dB dedB f‡ fdd„Zeddedddd f‡ fdd„ƒZededddddd f‡ fdd„ƒZ‡  ZS )ÚEncryptedPassportElementa›  
    Contains information about documents or other Telegram Passport elements shared with the bot
    by the user. The data has been automatically decrypted by python-telegram-bot.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`type`, :attr:`data`, :attr:`phone_number`, :attr:`email`,
    :attr:`files`, :attr:`front_side`, :attr:`reverse_side` and :attr:`selfie` are equal.

    Note:
        This object is decrypted only when originating from
        :attr:`telegram.PassportData.decrypted_data`.

    Args:
        type (:obj:`str`): Element type. One of "personal_details", "passport", "driver_license",
            "identity_card", "internal_passport", "address", "utility_bill", "bank_statement",
            "rental_agreement", "passport_registration", "temporary_registration", "phone_number",
            "email".
        hash (:obj:`str`): Base64-encoded element hash for using in
            :class:`telegram.PassportElementErrorUnspecified`.
        data (:class:`telegram.PersonalDetails` | :class:`telegram.IdDocumentData` |             :class:`telegram.ResidentialAddress` | :obj:`str`, optional):
            Decrypted or encrypted data; available only for "personal_details", "passport",
            "driver_license", "identity_card", "internal_passport" and "address" types.
        phone_number (:obj:`str`, optional): User's verified phone number; available only for
            "phone_number" type.
        email (:obj:`str`, optional): User's verified email address; available only for "email"
            type.
        files (Sequence[:class:`telegram.PassportFile`], optional): Array of encrypted/decrypted
            files with documents provided by the user; available only for "utility_bill",
            "bank_statement", "rental_agreement", "passport_registration" and
            "temporary_registration" types.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        front_side (:class:`telegram.PassportFile`, optional): Encrypted/decrypted file with the
            front side of the document, provided by the user; Available only for "passport",
            "driver_license", "identity_card" and "internal_passport".
        reverse_side (:class:`telegram.PassportFile`, optional): Encrypted/decrypted file with the
            reverse side of the document, provided by the user; Available only for
            "driver_license" and "identity_card".
        selfie (:class:`telegram.PassportFile`, optional): Encrypted/decrypted file with the
            selfie of the user holding a document, provided by the user; available if requested for
            "passport", "driver_license", "identity_card" and "internal_passport".
        translation (Sequence[:class:`telegram.PassportFile`], optional): Array of
            encrypted/decrypted files with translated versions of documents provided by the user;
            available if requested requested for "passport", "driver_license", "identity_card",
            "internal_passport", "utility_bill", "bank_statement", "rental_agreement",
            "passport_registration" and "temporary_registration" types.

            .. versionchanged:: 20.0
                |sequenceclassargs|

    Attributes:
        type (:obj:`str`): Element type. One of "personal_details", "passport", "driver_license",
            "identity_card", "internal_passport", "address", "utility_bill", "bank_statement",
            "rental_agreement", "passport_registration", "temporary_registration", "phone_number",
            "email".
        hash (:obj:`str`): Base64-encoded element hash for using in
            :class:`telegram.PassportElementErrorUnspecified`.
        data (:class:`telegram.PersonalDetails` | :class:`telegram.IdDocumentData` |             :class:`telegram.ResidentialAddress` | :obj:`str`):
            Optional. Decrypted or encrypted data; available only for "personal_details",
            "passport", "driver_license", "identity_card", "internal_passport" and "address" types.
        phone_number (:obj:`str`): Optional. User's verified phone number; available only for
            "phone_number" type.
        email (:obj:`str`): Optional. User's verified email address; available only for "email"
            type.
        files (tuple[:class:`telegram.PassportFile`]): Optional. Array of encrypted/decrypted
            files with documents provided by the user; available only for "utility_bill",
            "bank_statement", "rental_agreement", "passport_registration" and
            "temporary_registration" types.

            .. versionchanged:: 20.0

                * |tupleclassattrs|
                * |alwaystuple|

        front_side (:class:`telegram.PassportFile`): Optional. Encrypted/decrypted file with the
            front side of the document, provided by the user; available only for "passport",
            "driver_license", "identity_card" and "internal_passport".
        reverse_side (:class:`telegram.PassportFile`): Optional. Encrypted/decrypted file with the
            reverse side of the document, provided by the user; available only for "driver_license"
            and "identity_card".
        selfie (:class:`telegram.PassportFile`): Optional. Encrypted/decrypted file with the
            selfie of the user holding a document, provided by the user; available if requested for
            "passport", "driver_license", "identity_card" and "internal_passport".
        translation (tuple[:class:`telegram.PassportFile`]): Optional. Array of
            encrypted/decrypted files with translated versions of documents provided by the user;
            available if requested for "passport", "driver_license", "identity_card",
            "internal_passport", "utility_bill", "bank_statement", "rental_agreement",
            "passport_registration" and "temporary_registration" types.

            .. versionchanged:: 20.0

                * |tupleclassattrs|
                * |alwaystuple|

    )
ÚdataÚemailÚfilesÚ
front_sideÚhashÚphone_numberÚreverse_sideÚselfieÚtranslationÚtypeN©Ú
api_kwargsr   r   r   r   r   r   r   r   r   r   r   c                   s„   t ƒ j|d� || _|| _|| _|| _t|ƒ| _|| _|| _	|	| _
t|
ƒ| _|| _| j| j| j| j| j| j| j	| j
f| _|  ¡  d S )Nr   )ÚsuperÚ__init__r   r   r   r   r   r   r   r   r   r   r   Ú	_id_attrsÚ_freeze)Úselfr   r   r   r   r   r   r   r   r   r   r   ©Ú	__class__© úf/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/_passport/encryptedpassportelement.pyr!   ›   s*   

øz!EncryptedPassportElement.__init__Úbotz
Bot | NoneÚreturnc                    s�   |   |¡}t| d¡t|ƒpd|d< t| d¡t|ƒ|d< t| d¡t|ƒ|d< t| d¡t|ƒ|d< t| d¡t|ƒp=d|d< tƒ j||d�S )z,See :meth:`telegram.TelegramObject.de_json`.r   Nr   r   r   r   ©r   r)   )Ú_parse_datar   Úgetr	   r   r    Úde_json)Úclsr   r)   r%   r'   r(   r.   Æ   s   
z EncryptedPassportElement.de_jsonÚcredentialsr   c                    s`  |d dvr¨t |j|d ƒ}|jdurct|d tƒs.tt|jjƒt|jjƒt|d ƒƒ|d< |d dkr@t	j
|d |d�|d< n#|d dv rRtj
|d |d�|d< n|d dkrctj
|d |d�|d< t| d	¡t||jƒpod|d	< t| d
¡t||jƒ|d
< t| d¡t||jƒ|d< t| d¡t||jƒ|d< t| d¡t||jƒp¥d|d< tƒ j
||d�S )a  Variant of :meth:`telegram.TelegramObject.de_json` that also takes into account
        passport credentials.

        Args:
            data (dict[:obj:`str`, ...]): The JSON data.
            bot (:class:`telegram.Bot` | :obj:`None`): The bot associated with these object.
                May be :obj:`None`, in which case shortcut methods will not be available.

                .. versionchanged:: 21.4
                   :paramref:`bot` is now optional and defaults to :obj:`None`

                .. deprecated:: 21.4
                   This argument will be converted to an optional argument in future versions.
            credentials (:class:`telegram.FileCredentials`): The credentials

        Returns:
            :class:`telegram.EncryptedPassportElement`:

        r   )r   r   Nr   Úpersonal_details)r)   )ÚpassportÚinternal_passportÚdriver_licenseÚidentity_cardÚaddressr   r   r   r   r   r+   )ÚgetattrÚsecure_datar   Ú
isinstanceÚdictr   r   Úsecretr   r   r.   r   r   r   r-   r	   r   r   r   r   r   r   r    )r/   r   r)   r0   r8   r%   r'   r(   Úde_json_decryptedÓ   sB   



ýþÿÿÿÿüz*EncryptedPassportElement.de_json_decrypted)NNNNNNNN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ústrr   r   r   r   r	   r   r!   Úclassmethodr.   r<   Ú__classcell__r'   r'   r%   r(   r   )   s`    dõóþýüûú
ùø	÷
ö
õó+ÿÿÿþr   N)r@   Úbase64r   Úcollections.abcr   Útypingr   Útelegram._passport.credentialsr   Útelegram._passport.datar   r   r   Útelegram._passport.passportfiler	   Útelegram._telegramobjectr
   Útelegram._utils.argumentparsingr   r   r   r   r   Útelegram._utils.typesr   Útelegramr   r   r   r'   r'   r'   r(   Ú<module>   s   