;ò g Ec@sqdZdklZdkZdkZdklZdkZdkZdfd„ƒYZ de fd„ƒYZ dS(s9Given a pair of pipes with a python process at each end, this module allows one end to make calls on the other. This is used by the su module to allow control of a subprocess running as another user, but it may also be useful in other situations. The caller end should use the master_proxy module. EXPERIMENTAL. (s generatorsN(sselectsProxycBsStZed„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z RS( NcCs€t|dƒ oti|dƒ}nt|dƒ oti|dƒ}n||_||_d|_d|_|iƒdS(Nsfilenoswsrs( shasattrsto_peersossfdopens from_peersselfs out_buffers in_buffersenable_read_watch(sselfsto_peers from_peers slave_object((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys__init__s    cs#tiˆiti‡d†ƒdS(Ncs ˆiƒS(N(sselfs read_ready(ssrcscond(sself(sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys s(sgobjects io_add_watchsselfs from_peersIO_IN(sself((sselfsS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pysenable_read_watchscs)tiˆiiƒti‡d†ƒdS(Ncs ˆiƒS(N(sselfs write_ready(ssrcscond(sself(sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys$s(sgobjects io_add_watchsselfsto_peersfilenosIO_OUT(sself((sselfsS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pysenable_write_watch"scCsu|itjotdƒ‚n|i o|iƒnti|ƒ}t t |ƒƒd|}|i|7_dS(NsPeer is defuncts:( sselfsto_peersNones Exceptions out_buffersenable_write_watchspicklesdumpssobjectsssstrslen(sselfsobjectss((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys write_object&s cCs|xq|ioftg|iggdƒd}| o dGHtSnti|iiƒ|iƒ}|i||_qWt SdS(s0Returns True if the buffer is not empty on exit.iisNot ready for writingN( sselfs out_buffersselectsto_peerswsTruesosswritesfilenosnsFalse(sselfsnsw((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys write_ready0s cCsãti|iiƒdƒ}| o|iƒ|iƒtSn|i |7_ xŠd|i joy|i i ddƒ\}}t |ƒ}t|ƒ|jotSn|| }|||_ ti|ƒ}|i|ƒqQWtSdS(Niès:i(sossreadsselfs from_peersfilenosnewsfinishslost_connectionsFalses in_bufferssplitslsrestsintslensTruessspicklesloadssvalues _dispatch(sselfsvalueslsrestsssnew((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys read_ready;s"     cCst|_|_dS(N(sNonesselfsto_slaves from_slave(sself((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pysfinishMscCstdƒ‚dS(NsLost connection to peer!(s Exception(sself((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pyslost_connectionPs( s__name__s __module__sNones__init__senable_read_watchsenable_write_watchs write_objects write_readys read_readysfinishslost_connection(((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pysProxys    s SlaveProxycBs)tZdZd„Zd„Zd„ZRS(srMethods invoked on MasterProxy.root will be invoked on slave_object. The result is a master_proxy.RequestBlocker.cCs ti|||ƒ||_dS(N(sProxys__init__sselfs to_masters from_masters slave_object(sselfs to_masters from_masters slave_object((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys__init__VscCs`|\}}}yt|i|ƒ|Œ}Wntj o}|}nX|i ||fƒdS(N( svaluesserialsmethodsargssgetattrsselfs slave_objectsresults Exceptionses write_object(sselfsvaluesesargssresultsserialsmethod((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys _dispatchZs  cCstiƒdS(N(ssyssexit(sself((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pyslost_connectionbs(s__name__s __module__s__doc__s__init__s _dispatchslost_connection(((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys SlaveProxySs   ( s__doc__s __future__s generatorssosssyssselectscPicklespicklesgobjectsProxys SlaveProxy(s SlaveProxyspicklessyss generatorssProxysgobjectsossselect((sS/mnt/gmirror/ports/devel/py-roxlib/work/rox-lib2-2.0.5/ROX-Lib2/python/rox/proxy.pys?s    B