U
    2tc                     @   s   d Z zddlZW n ek
r,   ddlZY nX ddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ er~ddlmZ eddd	d
ZG dd dZdS )z Base class for Telegram Objects.    N)TYPE_CHECKINGListOptionalTupleTypeTypeVar)JSONDictset_new_attribute_deprecated)BotTOTelegramObjectT)bound	covariantc                       s  e Zd ZU dZdZeedf ed< dZe	dddZ
e	ed	d
dZe	eddddZeee ee dddZeee ee dee dddZeee eee  deee  dddZe	dddZedddZeed fddZed fd d!Z  ZS )"r   z%Base class for most Telegram objects. .	_id_attrs)__dict__)returnc                 C   s   t |  S N)strto_dictselfr   r   1/tmp/pip-unpacked-wheel-2u9rcp5s/telegram/base.py__str__/   s    zTelegramObject.__str__)itemr   c                 C   s   t | |d S r   )getattr)r   r   r   r   r   __getitem__2   s    zTelegramObject.__getitem__N)keyvaluer   c                 C   s   t | || d S r   r	   )r   r   r   r   r   r   __setattr__5   s    zTelegramObject.__setattr__)datar   c                 C   s   | d krd S |   S r   )copy)r!   r   r   r   _parse_data8   s    zTelegramObject._parse_datar   )clsr!   botr   c                 C   s6   |  |}|dkrdS | tkr$|  S | f d|i|S )zConverts JSON data to a Telegram object.

        Args:
            data (Dict[:obj:`str`, ...]): The JSON data.
            bot (:class:`telegram.Bot`): The bot associated with this object.

        Returns:
            The Telegram object.

        Nr%   )r#   r   r$   r!   r%   r   r   r   de_json<   s    
zTelegramObject.de_jsonc                    s   |sg S  fdd|D S )a  Converts JSON data to a list of Telegram objects.

        Args:
            data (Dict[:obj:`str`, ...]): The JSON data.
            bot (:class:`telegram.Bot`): The bot associated with these objects.

        Returns:
            A list of Telegram objects.

        c                    s   g | ]} | qS r   )r'   ).0dr%   r$   r   r   
<listcomp>`   s     z*TelegramObject.de_list.<locals>.<listcomp>r   r&   r   r*   r   de_listQ   s    zTelegramObject.de_listc                 C   s   t |  S )zXGives a JSON representation of object.

        Returns:
            :obj:`str`
        )jsondumpsr   r   r   r   r   to_jsonb   s    zTelegramObject.to_jsonc                 C   s   i }dd | j jdd D }|D ]L}|dks"|dr:q"t| |d}|dk	r"t|drf| ||< q"|||< q"|dr|dd|d	< |S )
zaGives representation of object as :obj:`dict`.

        Returns:
            :obj:`dict`
        c                 S   s   h | ]}|j D ]}|qqS r   )	__slots__)r(   r$   attrr   r   r   	<setcomp>v   s       z)TelegramObject.to_dict.<locals>.<setcomp>Nr%   _r   Z	from_userfrom)	__class____mro__
startswithr   hasattrr   getpop)r   r!   attrsr   r   r   r   r   r   j   s    


zTelegramObject.to_dict)otherr   c                    sd   t || jrX| jdkr,td| jj d |jdkrLtd|jj d | j|jkS t |S )Nr   zObjects of type z0 can not be meaningfully tested for equivalence.)
isinstancer6   r   warningswarn__name__super__eq__)r   r=   r6   r   r   rC      s    

zTelegramObject.__eq__c                    s    | j rt| j| j fS t  S r   )r   hashr6   rB   __hash__r   rD   r   r   rF      s    zTelegramObject.__hash__)rA   
__module____qualname____doc__r   r   object__annotations__r0   r   r   r   r    staticmethodr   r   r#   classmethodr   r   r'   r   r,   r/   r   boolrC   intrF   __classcell__r   r   rD   r   r   %   s    
"*)rI   Zujsonr-   ImportErrorr?   typingr   r   r   r   r   r   Ztelegram.utils.typesr   Ztelegram.utils.deprecater
   Ztelegramr   r   r   r   r   r   r   <module>   s    