
    g                     0   d Z ddlZddlZddlZddlZddlZddlZddlZddlZ ej	        e
          ZdZddhZ G d dej                  Z G d d	          Z G d
 de          Z G d de          Z G d d          Z G d d          ZeddfdZdS )z
Simplistic RPC implementation.
Exposes all functions of a Server object.

This code is for demonstration purposes only, and does not include certain
security protections. It is not meant to be run on an untrusted network or
in a production environment.
    Ni /  numpyznumpy.core.multiarrayc                       e Zd Zd ZdS )RestrictedUnpicklerc                     |t           v r"t          t          j        |          |          S t	          j        d|d|d          )Nzglobal '.z' is forbidden)safe_modulesgetattr	importlibimport_modulepickleUnpicklingError)selfmodulenames      O/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/rpc.py
find_classzRestrictedUnpickler.find_class%   sR    \!!926::DAAA$$&,ffddd&4 5 5 	5    N)__name__
__module____qualname__r    r   r   r   r   #   s#        5 5 5 5 5r   r   c                   ,    e Zd ZdZd Zd ZddZd ZdS )	FileSockz7 wraps a socket so that it is usable by pickle/cPickle c                 "    || _         d| _        d S )Nr   )socknr)r   r   s     r   __init__zFileSock.__init__1   s    	r   c                     d}d}|t          |          k     r?| j                            ||||z                      }||z  }|t          |          k     =d S d S )N   r   )lenr   send)r   bufbsnssents        r   writezFileSock.write5   s^     3s88mm9>>#bbj/22D$JB 3s88mmmmmmr   r   c                 .   | xj         dz  c_         g }d}t          |          |k     rZ| j                            ||z
            }|sn:|                    |           |t          |          z  }t          |          |k     Zd                    |          S )N   r   r   )r   r    r   recvappendjoin)r   r#   bnbrbs        r   readzFileSock.read?   s    
!ffRiiR((BuHHRLLL#b''MB !ffRii xx{{r   c                 V    t                      }	 |                     d          }||z  })zmay be optimized...Tr(   )bytesr/   r    chr)r   scs      r   readlinezFileSock.readlineM   s/     ''	iillAqDA	r   N)r   )r   r   r   __doc__r   r&   r/   r5   r   r   r   r   r   .   s[        ==           r   r   c                       e Zd ZdS )
ClientExitNr   r   r   r   r   r   r8   r8   W           Dr   r8   c                       e Zd ZdS )ServerExceptionNr9   r   r   r   r<   r<   Z   r:   r   r<   c                   F    e Zd ZdZej        dfdZd Zd Zd Z	d Z
d Zd	S )
Serverzr
    server protocol. Methods from classes that subclass Server can be called
    transparently from a client
     c                 X    || _         || _        || _        t          |          | _        d S N)logf
log_prefixconnr   fs)r   r3   rB   rC   s       r   r   zServer.__init__d   s*    	$ 	1++r   c                 R    | j                             d| j        d|d           d S )Nz
Sever log z: 
)rB   r&   rC   )r   r3   s     r   logz
Server.logn   s-    	CDDDDDr   c                 t   	 t          | j                                                  \  }}n# t          $ r t	          d          w xY w|                     d|z             d}d}	 t          | |          }n7# t          $ r* t          d|z             }|                     d           Y nw xY w	  || }n# t          $ r}d	                    t          j        t          j                    d                             t          |          z   }|                     d           t          j        d	| j                   | j                                         Y d}~nd}~ww xY wt$                              d
           	 t)          j        ||f| j        d           dS # t          $ r t	          d          w xY w)a  
        Executes a single function with associated I/O.
        Protocol:
        - the arguments and results are serialized with the pickle protocol
        - client sends : (fname,args)
            fname = method name to call
            args = tuple of arguments
        - server sends result: (rid,st,ret)
            rid = request id
            st = None, or exception if there was during execution
            ret = return value or None if st!=None
        z	read argszexecuting method %sNzunknown method zunknown methodr?      zexception in method2   return   protocolzfunction return)r   rE   loadEOFErrorr8   rH   r	   AttributeError	Exceptionr+   	traceback	format_tbsysexc_infostr	print_excrB   flushLOGinfor   dump)r   fnameargsstretfes          r   one_functionzServer.one_functionq   s   	*/88==??MUDD 	* 	* 	*[)))	*&.///	'd5!!AA 	' 	' 	' 1% 788BHH%&&&&&	'	!T(CC 
	 
	 
	 wwy*3<>>!+<==>>s1vvEBHH*+++49---IOO
	 		0KS	47Q777777 	0 	0 	0.///	0s@   ), A&A7 71B+*B+/B5 5
E?BEE=F F7c                 r   |                      d           	 	 |                                  # t          $ r"}|                      d|z             Y d}~nd}~wt          j        $ r<}|                      d|z             t          j        d| j                   Y d}~nd}~wt          $ r2 |                      d           t          j        d| j                   Y nBt          $ r6 t          j        dt          j                   t          j        d           Y nw xY wt                              d	           dS )
z3 main execution loop. Loops and handles exit stateszin exec_loopTzClientExit %sNzsocket error %srK   zEOF during communicationr(   z
exit sever)rH   rd   r8   socketerrorrT   rY   rB   rQ   BaseExceptionrV   stderrexitr[   r\   )r   rc   s     r   	exec_loopzServer.exec_loop   sb    	   	$!!###$ 	( 	( 	(HH_Q&''''''''| 	. 	. 	.HH&q()))49-------- 	. 	. 	.HH/00049----- 	 	 	3:...HQKKKKK	
 	s,   - 
DAD&2B<D<DDc                     d S rA   r   )r   s    r   exec_loop_cleanupzServer.exec_loop_cleanup   s    r   c                     d}t          j        ddt          j                    z  z   dz   dz             }|D ]}||z  }|S )Nr?   zFecho ============ `hostname` uptime:; uptime;echo ============ self:; z*ps -p %d -o pid,vsize,rss,%%cpu,nlwp,psr; zecho ============ run queue:;z?ps ar -o user,pid,%cpu,%mem,ni,nlwp,psr,vsz,rss,cputime,command)ospopengetpid)r   ra   rb   ls       r   get_ps_statszServer.get_ps_stats   sj    
( /?	KL 33 U	U V V
  	 	AFCC
r   N)r   r   r   r6   rV   ri   r   rH   rd   rk   rm   rs   r   r   r   r>   r>   ^   s         
  #zb    E E E-0 -0 -0^  ,  	 	 	 	 	r   r>   c                   0    e Zd ZdZedfdZd Zd Zd ZdS )Clientza
    Methods of the server object can be called transparently. Exceptions are
    re-raised.
    Fc                    |rt           j        nt           j        }t          j         |t           j                  }t                              d|||           |                    ||f           || _        t          |          | _	        d S )Nz$connecting to %s:%d, socket type: %s)
rf   AF_INET6AF_INETSOCK_STREAMr[   r\   connectr   r   rE   )r   HOSTportv6socktyper   s         r   r   zClient.__init__   so    &(<6??fn}Xv'9::7tXNNNdD\"""	4..r   c                 f    t          j        ||f| j        d           |                                 S )NrM   rN   )r   r]   rE   
get_result)r   r^   r_   s      r   generic_funzClient.generic_fun   s/    UDM47Q7777   r   c                     t          | j                                                  \  }}|d k    rt          |          |S rA   )r   rE   rP   r<   )r   r`   ra   s      r   r   zClient.get_result   s=    '005577	St88!"%%%Jr   c                       fdS )Nc                  0                         |           S rA   )r   )xr   r   s    r   <lambda>z$Client.__getattr__.<locals>.<lambda>   s    $**422 r   r   )r   r   s   ``r   __getattr__zClient.__getattr__   s    222222r   N)	r   r   r   r6   PORTr   r   r   r   r   r   r   ru   ru      sf          #'5 ! ! ! !! ! !
  3 3 3 3 3r   ru   Fc                 |   d}|rt           j        nt           j        }t          j         |t           j                  }|                    t           j        t           j        d           t                              d||           |	                    ||f           |
                    d           t                              d           |Tt                              d|           t          |d                              dt          j                    |fz             	 	 |                                \  }}n)# t           j        $ r}	|	d         d
k    rY d }	~	: d }	~	ww xY wt                              d|            | |          }
t!          j        |
j        d          }t                              d|           )Nr?   r(   z
bind %s:%d   zaccepting connectionszstoring host+port in %swz%s:%d TzInterrupted system callzConnected to %sr   zThread ID: %d)rf   rw   rx   ry   
setsockopt
SOL_SOCKETSO_REUSEADDRr[   r\   bindlistenopenr&   gethostnameacceptrg   _threadstart_new_threadrk   debug)new_handlerr|   report_to_filer}   r{   r~   r3   rD   addrrc   ibstids               r   
run_serverr      s   D"$8v&.Hh 233ALL"F$7;;;HH\4&&&FFD$<HHQKKKHH$%%%!*N;;;^S!!''F4F4H4H$3O(OPPP(	JD$$| 	 	 	t...	 	"D)))k$&s}R88		/3'''(s   !D9 9EEEE)r6   r
   ro   r   rV   r   rT   rf   logging	getLoggerr   r[   r   r   	Unpicklerr   r   rS   r8   r<   r>   ru   r   r   r   r   <module>r      s        				  



       g!!  5 5 5 5 5&* 5 5 5' ' ' ' ' ' ' 'R	 	 	 	 	 	 	 		 	 	 	 	i 	 	 	g g g g g g g gR3 3 3 3 3 3 3 3< "&du ( ( ( ( ( (r   