o
    i                     @   s   d Z ddlZddlmZ ddlZddlZddlmZ ddlm	Z	 ddlm
Z dazddlmZ W n ey;   eZY nw d	d
 Zdd ZG dd deZeZddgZdS )zDummy Frame object    N)Event)ETERM   )ffi)lib)
bufferablec                 C   s*   t | tu r| S t| tst| } |  S )zReturn content of obj as bytes)typebytes
isinstance
memoryviewtobytes)obj r   S/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/backend/cffi/message.py_content   s
   
r   c                 C   s`   t  }| dkr.|tjkrtj||tjkrtjt|t	kr(tj
|tj|dS )Nr   )C	zmq_errnoerrnoEINTRzmqerrorInterrruptedSystemCallEAGAINAgainr   ContextTerminatedZMQError)rcerrr   r   r   	_check_rc!   s   

r   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdddZdd Zdd Zd	d
 Zedd Zedd Zdd Zdd Zdd Zedd Zdd Zdd Zdd ZdS )FrameNFc           
      C   s  d| _ tdttd| _|rtj| _	t
|trtd|d u r2t| j}t| d| _ d S || _t|tu r>|| _t|| _t| j}| jj}|d u r\|rZ||k rZd}nd}|r}t| j|}t| | jtt| j|d d < d| _ d S |rt }|| _t|| _	td u rddlma tdttd	}	t || j|	d _!tj"st# t_"td
tj"|	d _$tdtj%j&|	d _'t(| j|||	}|dkrt)|	 t)| j t| d| _ d S )NTzzmq_msg_t[1]	zmq_msg_tz@Unicode strings are not allowed. Only: bytes, buffer interfaces.Fr   )gczzhint[1]zhintzmutex_t*zvoid*)*_failed_initr   castr   mallocsizeofzmq_msgr   _FINISHED_TRACKERtrackerr
   str	TypeErrorzmq_msg_initr   _datar   r	   _bytesr   _bufferfrom_buffernbyteszmq_msg_init_sizebufferzmq_msg_datar   tracker_eventMessageTrackerzmq_gczmq.utils.garbager"   storeid_push_mutexmutex_allocatemutex_push_socket
underlyingsockzmq_wrap_msg_init_datafree)
selfdatatrackcopycopy_thresholdr   c_data
data_len_cevthintr   r   r   __init__:   sh   




zFrame.__init__c                 C   s    | j s| js|   d S d S d S N)closedr$   closerD   r   r   r   __del__   s   zFrame.__del__c                 C   sV   | j s| js| jd u rd S d| _ t| j}t| j d | _|dkr)t| d S d S )NTr   )rO   r$   r(   r   zmq_msg_closerC   r   )rD   r   r   r   r   rP      s   zFrame.closec                 C   sF   | j du rtt| jt| j| _ | jdu r!t| j | _dS dS )zQone-time extract buffer from zmq_msg

        for Frames created by recv
        N)	r.   r   r4   r   r5   r(   zmq_msg_sizer0   r   rQ   r   r   r   _buffer_from_zmq_msg   s   

zFrame._buffer_from_zmq_msgc                 C   s   | j d u r	|   | j S rN   )r0   rU   rQ   r   r   r   r4      s   
zFrame.bufferc                 C   s   | j d u r| j | _ | j S rN   )r/   r4   r   rQ   r   r   r   r	      s   
zFrame.bytesc                 C   s   | j jS rN   )r4   r2   rQ   r   r   r   __len__   s   zFrame.__len__c                 C   s   | j t|kS rN   )r	   r   )rD   otherr   r   r   __eq__   s   zFrame.__eq__c                 C   
   | j  S rN   )r	   decoderQ   r   r   r   __str__   s   
zFrame.__str__c                 C   rY   rN   )r*   donerQ   r   r   r   r\      s   
z
Frame.donec                 C   s   | j S rN   )r4   )rD   flagsr   r   r   
__buffer__   s   zFrame.__buffer__c                 C   s   |   S )a<  Create a shallow copy of the message.

        This does not copy the contents of the Frame, just the pointer.
        This will increment the 0MQ ref count of the message, but not
        the ref count of the Python object. That is only done once when
        the Python is first turned into a 0MQ message.
        )	fast_copyrQ   r   r   r   __copy__   s   zFrame.__copy__c                 C   s:   t  }t|j| j | j|_| j|_| j|_| j|_|S )zPFast shallow copy of the Frame.

        Does not copy underlying data.
        )r    r   zmq_msg_copyr(   r.   r0   r6   r*   )rD   new_msgr   r   r   r_      s   zFrame.fast_copy)NFNN)__name__
__module____qualname__r.   r*   rO   morer0   r/   r$   r6   r(   rM   rR   rP   rU   propertyr4   r	   rV   rX   r[   r\   r^   r`   r_   r   r   r   r   r    /   s4    
Q




r    Message)__doc__r   	threadingr   r   	zmq.errorzmq.constantsr   _cffir   r   r   r8   __pypy__.bufferabler   maybe_bufferableImportErrorobjectr   r   r    rh   __all__r   r   r   r   <module>   s(    	 1