hWc@sddlZddlZdZejjdr9dZndZdZdZdZ dZ d Z d Z d Z d ZdZdZdZdZdZdZd Zd Zd ZddZdefdYZdddYZdZedkrendS(iNit MonitorDebugiiiiiiiii cCs tjS(N(t_gamintErrno(((s)/usr/lib/python2.7/site-packages/gamin.pyt GaminErrno"scCs|dkrtj}n|tkr0d}n|tkrEd}no|tkrZd}nZ|tkrod}nE|tkrd}n0|tkrd}n|t krd}nd}|S( Nsbad argument errorsfilename errorsconnection errorsauthentication errorsmemory allocation errorsunimplemented part errorsinterrupted system callt( tNoneRRtGAM_ARGtGAM_FILEt GAM_CONNECTtGAM_AUTHtGAM_MEMt GAM_UNIMPLEMtGAM_INTR(terrtmsg((s)/usr/lib/python2.7/site-packages/gamin.pyt GaminErrmsg%s$               tGaminExceptioncBseZdZdZRS(cCs&tj|||_t|_dS(N(t Exceptiont__init__tvalueRterrno(tselfR((s)/usr/lib/python2.7/site-packages/gamin.pyR;s  cCs=t|j}|dkr0t|jd|St|jS(NRs: (RRtreprR(Rtstr((s)/usr/lib/python2.7/site-packages/gamin.pyt__str__@s (t__name__t __module__RR(((s)/usr/lib/python2.7/site-packages/gamin.pyR:s t WatchMonitorcBseZdZdddYZdZdZdZddZdZ ddZ dd Z d Z d Z d Zd ZdZdZRS(s|This is a wrapper for a FAM connection. It uses a single connection to the gamin server, over a socket. Use get_fd() to get the file descriptor which allows to plug it in an usual event loop. The watch_directory(), watch_file() and stop_watch() are direct mapping to the FAM API. The event raised are also a direct mapping of the FAM API events.t WatchObjectcBs&eZddZdZdZRS(cCs ||_||_||_||_||_|dkrstj|j||}|dkrtd|qn|dkrtj|j||}|dkrtd|qnF|dkrtj |j||}|dkrtd|qn||_ dS(NiisFailed to monitor directory %ssFailed to monitor file %sisFailed to debug %s( tmonitortcallbacktdatatpatht_WatchObject__mon_noRtMonitorDirectoryRt MonitorFileRt_WatchObject__req_no(RRtmon_noR tdirRRtret((s)/usr/lib/python2.7/site-packages/gamin.pyROs*           cCsy<|jdkr+|j|||jn|j||Wnddl}|jnX|tkry|jjj|WqdGHqXndS(Nis%gamin failed to remove from cancelled( RRRt tracebackt print_exctGAMAcknowledgeRt cancelledtremove(RR teventR(((s)/usr/lib/python2.7/site-packages/gamin.pyt_internal_callbackfs  cCsdtj|j|j}|dkr:td|jny|jjj|Wn dGHnXdS(NisFailed to stop monitor on %ss)gamin cancel() failed to add to cancelled( Rt MonitorCancelR!R$RR RR+tappend(RR'((s)/usr/lib/python2.7/site-packages/gamin.pytcancelys N(RRRRR.R1(((s)/usr/lib/python2.7/site-packages/gamin.pyRNs  cCstj|_|jdkr-tdni|_tj|j|_|jdkrytj|jtdng|_dS(NisFailed to connect to gam_serversFailed to get file descriptor( RtMonitorConnectt_WatchMonitor__noRtobjectstGetFdt_WatchMonitor__fdt MonitorCloseR+(R((s)/usr/lib/python2.7/site-packages/gamin.pyRs cCs|jdS(N(t disconnect(R((s)/usr/lib/python2.7/site-packages/gamin.pyt__del__scCstddS(NsAlready disconnected(R(((s)/usr/lib/python2.7/site-packages/gamin.pyt__raise_disconnectedscCs^tdkrdS|jdkr,|jn|j||j|d||}||jd<|S(Niitdebug(t has_debug_apiR3t!_WatchMonitor__raise_disconnectedRR4(RRRRtobj((s)/usr/lib/python2.7/site-packages/gamin.pyt _debug_objects  ! cCs/|jdkr"tj|jnd|_dS(Nii(R3RR7(R((s)/usr/lib/python2.7/site-packages/gamin.pyR8scCs|jdkr|jntjj|}|j||j|d||}|jj|rx|j|j|n|g|j|<|S(Nii( R3R=tosR tabspathRR4thas_keyR0(Rt directoryRRR>((s)/usr/lib/python2.7/site-packages/gamin.pytwatch_directorys !cCs|jdkr|jntjj|}|j||j|d||}|jj|rx|j|j|n|g|j|<|S(Ni( R3R=R@R RARR4RBR0(RtfileRRR>((s)/usr/lib/python2.7/site-packages/gamin.pyt watch_files !cCs)|jdkrdStj|j}|S(Ni(R3RtMonitorNoExists(RR'((s)/usr/lib/python2.7/site-packages/gamin.pyt no_existsscCs||jdkrdStjj|}y|j|}Wntd|nXx|D]}|jqWWg|j|((s)/usr/lib/python2.7/site-packages/gamin.pyt stop_watchs cCs#|jdkr|jn|jS(Ni(R3R=R6(R((s)/usr/lib/python2.7/site-packages/gamin.pytget_fds cCsM|jdkr|jntj|j}|dkrItdn|S(NisFailed to check pending events(R3R=Rt EventPendingR(RR'((s)/usr/lib/python2.7/site-packages/gamin.pyt event_pendings   cCsM|jdkr|jntj|j}|dkrItdn|S(NisFailed to process one event(R3R=RtProcessOneEventR(RR'((s)/usr/lib/python2.7/site-packages/gamin.pythandle_one_events   cCsM|jdkr|jntj|j}|dkrItdn|S(NisFailed to process events(R3R=Rt ProcessEventsR(RR'((s)/usr/lib/python2.7/site-packages/gamin.pyt handle_eventss   (N(RRt__doc__RRR9R=RR?R8RDRFRHRJRKRMRORQ(((s)/usr/lib/python2.7/site-packages/gamin.pyRFs5       cCsd}t}dGH|jd|ddl}|jddG|jGH|j}dG|GH|dkr|j}d |GH|j}d |GHnd GH|jdd GH~dS( NcSsd||fGHdS(NsGot callback: %s, %s((R R-((s)/usr/lib/python2.7/site-packages/gamin.pyRsswatching current directoryt.iisfd: s pending: isprocessed %d eventsprocessed %d remaining eventssstop watching current directoryt disconnecting( RRDttimetsleepRKRMRORQRJ(RtmonRUR'((s)/usr/lib/python2.7/site-packages/gamin.pytrun_unit_testss$            t__main__((Rtos.pathR@R<t__dict__RBt GAMChangedt GAMDeletedtGAMStartExecutingtGAMStopExecutingt GAMCreatedtGAMMovedR*t GAMExistst GAMEndExisttGAM_OKRRRR R R R RRRRRRRXR(((s)/usr/lib/python2.7/site-packages/gamin.pyts8