3
uQh                 @   s   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Zeejd dd  Z	eej
d dd  Ze	jejdZdd Zdd ZG d	d
 d
ZG dd deZdS )    N)datetimedate	timedeltatimezone   )tzinfoc             C   sD   | j d kr| jtjd} t| t j }tjdtj	d|d@ d S )N)r   iIl    r   )
r   replacer   utcint_EPOCHtotal_secondsstructunpackpack)dtZsecs r   8/tmp/pip-build-2nz6shyl/telethon/telethon/tl/tlobject.py_datetime_to_timestamp   s    
r   c             C   s8   t | trtj| jdS t | tr,| j S t| S d S )Nascii)
isinstancebytesbase64	b64encodedecoder   	isoformatrepr)valuer   r   r   _json_default   s
    

r   c               @   s   e Zd ZdZdZedddZedd Zedd Zdd	 Z	d
d Z
dd Zdd Zdd ZdefddZdd Zdd Zedd ZdS )TLObjectNc             C   s@  |dkrt | tr| j } t | trLdj| jdddjdd | j D S t | ts`t | t	rht
| S t| drd	jdjd
d | D S t
| S ng }t | tr| j } t | tr|j| jdd |jd | rv|jd |d7 }x^| j D ]R\}}|dkrq|jd|  |j| |jd |jtj|| |jd qW |j  |d8 }|jd |jd|  |jd nt | tst | t	r|jt
|  nt| dr$|jd |d7 }x8| D ]0}|jd|  |jtj|| |jd qW |d8 }|jd|  |jd n|jt
|  dj|S dS )z
        Pretty formats the given object as a string which is returned.
        If indent is None, a single line will be returned.
        Nz{}({})_dictz, c             s   s,   | ]$\}}|d krdj |tj|V  qdS )r!   z{}={}N)formatr    pretty_format).0kvr   r   r   	<genexpr>2   s   z)TLObject.pretty_format.<locals>.<genexpr>__iter__z[{}]c             s   s   | ]}t j|V  qd S )N)r    r$   )r%   xr   r   r   r(   9   s    (
   	=z,
)z[
] )r   r    to_dictr"   r#   getjoinitemsstrr   r   hasattrappendr$   pop)objindentresultr&   r'   r*   r   r   r   r$   &   sb    











zTLObject.pretty_formatc             C   s   t | ts2t | tr | jd} ntdjt| g }t| dk rt| d d }|dkrbd| }|jtt| g |j|  n\t| d }|dkrd| }|jtdt| d t| d? d t| d	? d g |j|  |jt| d
j	|S )z(Write bytes by using Telegram guidelineszutf-8zbytes or str expected, not {}   r-      r                )
r   r   r7   encode	TypeErrorr#   typelenr9   r5   )datarpaddingr   r   r   serialize_bytesi   s.    



zTLObject.serialize_bytesc             C   s   |  rt | t rdS t | tr*t| } nPt | trLtt| j| j| j} n.t | tr`t	| } nt | trzttj
 |  } t | t	rtjd| S tdj| d S )Ns       z<iz Cannot interpret "{}" as a date.)r   r   r   r   r   yearmonthdayfloatr   utcnowr   r   rE   r#   )r   r   r   r   serialize_datetime   s    






zTLObject.serialize_datetimec             C   s   t |t| o| j |j kS )N)r   rF   r3   )selfor   r   r   __eq__   s    zTLObject.__eq__c             C   s    t |t|  p| j |j kS )N)r   rF   r3   )rR   rS   r   r   r   __ne__   s    zTLObject.__ne__c             C   s
   t j| S )N)r    r$   )rR   r   r   r   __str__   s    zTLObject.__str__c             C   s   t j| ddS )Nr   )r<   )r    r$   )rR   r   r   r   	stringify   s    zTLObject.stringifyc             C   s   t d S )N)NotImplementedError)rR   r   r   r   r3      s    zTLObject.to_dictc             K   s>   | j  }|r$tj||fd|i|S tj|fd|i|S dS )an  
        Represent the current `TLObject` as JSON.

        If ``fp`` is given, the JSON will be dumped to said
        file pointer, otherwise a JSON string will be returned.

        Note that bytes and datetimes cannot be represented
        in JSON, so if those are found, they will be base64
        encoded and ISO-formatted, respectively, by default.
        defaultN)r3   jsondumpdumps)rR   fprY   kwargsdr   r   r   to_json   s    zTLObject.to_jsonc             C   s*   y| j  S  tk
r$   tdY nX d S )Nz0a TLObject was expected but found something else)_bytesAttributeErrorrE   )rR   r   r   r   	__bytes__   s    zTLObject.__bytes__c             C   s   t d S )N)rX   )rR   r   r   r   ra      s    zTLObject._bytesc             C   s   t d S )N)rX   )clsreaderr   r   r   from_reader   s    zTLObject.from_reader)N)__name__
__module____qualname__ZCONSTRUCTOR_IDZSUBCLASS_OF_IDstaticmethodr$   rK   rQ   rT   rU   rV   rW   r3   r   r`   rc   ra   classmethodrf   r   r   r   r   r    "   s   B#r    c               @   s$   e Zd ZdZedd Zdd ZdS )	TLRequestzO
    Represents a content-related `TLObject` (a request that can be sent).
    c             C   s   | j  S )N)Ztgread_object)re   r   r   r   read_result   s    zTLRequest.read_resultc                s   d S )Nr   )rR   clientutilsr   r   r   resolve   s    zTLRequest.resolveN)rg   rh   ri   __doc__rj   rm   rp   r   r   r   r   rl      s   rl   )r   rZ   r   r   r   r   r   timegmtimeZ_EPOCH_NAIVE	localtimeZ_EPOCH_NAIVE_LOCALr
   r   r   r   r   r    rl   r   r   r   r   <module>   s   	 4