\c@sddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl j Z ddlmZddlmZe jjZdejfdYZdS(i(t interfacesiN(tpolkit(tGLibt DBusExportercBseZdZdZedZedZedZdZdZ dZ dZ d Z d Z d Zd ZRS( s+ Export method calls through DBus Interface. We take a method to be exported and create a simple wrapper function to call it. This is required as we need the original function to be bound to the original object instance. While the wrapper will be bound to an object we dynamically construct. cCstjjjdtd|_d|_i|_t |_ ||_ ||_ ||_ d|_d|_t|_tjtj}tj|_tjtj|dS(Ntset_as_default(tdbustmainlooptglibt DBusGMainLooptTruetNonet_dbus_object_clst _dbus_objectt _dbus_methodstsett_signalst _bus_namet_interface_namet _object_namet_threadt _bus_objectRt_polkittsignalt getsignaltSIGINTRtMainLoopt _main_loop(tselftbus_nametinterface_namet object_nametsignal_handler((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyt__init__s          cCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyR/scCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyR3scCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyR7scCs |jdk S(N(RR (R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pytrunning;scstjstdnj}|jkrEtdnfd}tj|j}tjj j ||dd|}|j|s 'cstjstdnj}||jkrEtdnfd}tj|j}tjj |j ||}||j|<|j j |dS(Ns#Only bound methods can be exported.s*Method with this name is already exported.cs ||S(N((R-R.R/R0(R4(s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyR5gs( R7R8R9R&R R:R;RR<RRRtadd(RR4R>R?R5((R4s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyR_s  cOst}||jks$|jdkr-t}nyt|j|}Wntk r\t}nX|rvtd|n |||dS(NsSignal '%s' doesn't exist.(tFalseRRR R tgetattrtAttributeErrorR9(RRR/R0terrR4((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyt send_signalps   cCsY|jdk rtdndt|}t|tjjf|j}||_dS(Ns%The exporter class was already build.sDBusExporter_%d( R R R9tidttypeRR<tObjectR (Rt unique_nametcls((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyt_construct_dbus_object_class}s cCs|jrdS|jdkr,|jn|jtj}tjj|j |}|j||j ||_ t j d|j|_|jjdS(Nttarget(R!R R RLtstopRt SystemBusR<tBusNameRRRt threadingtThreadt _thread_codeRtstart(RtbusR((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyRTs    cCsH|jdk rD|jjrD|jj|jjd|_ndS(N(RR tis_aliveRtquittjoin(R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyRNs  cCs |jj|`d|_dS(N(RtrunRR (R((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyRSs (R&t __module__t__doc__R tpropertyRRRR!R@RRFRLRTRNRS(((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyRs   !  (R#RR:t dbus.serviceRtdbus.mainloop.glibtdbus.exceptionsR7RQRt tuned.logsttunedt tuned.constsR$ttuned.utils.polkitRt gi.repositoryRtlogstgetR'tExporterInterfaceR(((s?/usr/lib/python2.7/site-packages/tuned/exports/dbus_exporter.pyts