PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  YFTc@sdZddlZddlZddlmZddddgZeddd d d gZdefd YZde fd YZ de fdYZ dS(s+Common library shared by different engines.iN(t namedtupletDBHandlet DatabaseErrortRecordt BaseEnginetsingle_threadedtmulti_threadedtmulti_processingtpreforkcBseZRS((t__name__t __module__(((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyRscBsMeZdZdddddddZdZdZdZdZRS(sTPrefix conventions used in this class: r = report (spam) wl = whitelist icCs:||_||_||_||_||_||_dS(N(tr_counttwl_countt r_enteredt r_updatedt wl_enteredt wl_updated(tselfR R R RRR((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt__init__s      cCsV|jtjkr$|jd7_n|jdkrHtjj|_n|jdS(Ni(R tsystmaxintRtNonetdatetimetnowt wl_update(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt wl_increment s cCsV|jtjkr$|jd7_n|jdkrHtjj|_n|jdS(Ni(R RRR RRRtr_update(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt r_increment(s cCstjj|_dS(N(RRR(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyR0scCstjj|_dS(N(RRR(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyR3sN( R R t__doc__RRRRRR(((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyRs    cBsteZdZeZeZdZdZdZ dZ dZ dZ dZ dZed d ZRS( sBase class for Pyzor engines.cCs tdS(sIterate over all keysN(tNotImplementedError(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt__iter__<scCs tdS(s$Iterate over pairs of (key, record).N(R(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt iteritems@scCs tdS(sReturn a list of (key, record).N(R(R((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pytitemsDscCs tdS(s*Get the record for this corresponding key.N(R(Rtkey((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt __getitem__HscCs tdS(sqSet the record for this corresponding key. 'value' should be a instance of the ``Record`` class. N(R(RR!tvalue((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt __setitem__LscCs tdS(s2Remove the corresponding record from the database.N(R(RR!((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt __delitem__RscCs tdS(sReport the corresponding key as spam, incrementing the report count. Engines that implement don't implement this method should have handles_one_step set to False. N(R(Rtkeys((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pytreportVscCs tdS(sReport the corresponding key as ham, incrementing the whitelist count. Engines that implement don't implement this method should have handles_one_step set to False. N(R(RR&((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyt whitelist^scCs tdS(sYields an unlimited number of partial functions that return a new engine instance, suitable for using toghether with the Pre-Fork server. N(R(tclstfntmodetmax_age((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pytget_prefork_connectionshsN(R R RtTruetabsolute_sourcetFalsethandles_one_stepRRR R"R$R%R'R(t classmethodRR-(((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyR7s        ( RRRt collectionsRt__all__Rt ExceptionRtobjectRR(((s8/usr/lib/python2.7/site-packages/pyzor/engines/common.pyts   %