mò Sã¸Ec@sÜdZdkZdkZdkZdkZdklZlZdkl Z dk Z dk l Z dk lZddZd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zdeifd„ƒYZdS(s Provide a mixin base class for storage tests. The StorageTestBase class provides basic setUp() and tearDown() semantics (which you can override), and it also provides a helper method _dostore() which performs a complete store transaction for a single object revision. N(sPicklers Unpickler(sStringIO(su64(sMinPOticCs8tiƒ}x%|tiƒjotidƒqWdS(Nf0.10000000000000001(ttimetnowtsleep(R((t9/data/zmath/zope/lib/python/ZODB/tests/StorageTestBase.pytsnooze$s cCs;t|ddƒ}t|ddƒdj odSn|SdS(Nt_p_oidt__get__(tgetattrtobjtNonetoid(R R ((Rt_persistent_id-scCs¶tƒ}t|dƒ}t|_|i}t |dƒ p t d‚d}t |ddƒ}|dj o||if}n|iƒ}|i||fƒ|i|ƒ|idƒS(s/Create a pickle in the format expected by ZODB.it__getinitargs__snot ready for constructorst __module__N(tStringIOtftPicklertpR t persistent_idR t __class__tklassthasattrtAssertionErrorR targsRtmodt__name__t __getstate__tstatetdumptgetvalue(R RRRRRR((Rt zodb_pickle4s      cCs+d|dd|ddt|dƒfS(Nsref to %s.%s oid=%sii(tpidtu64(R ((Rtpersistent_loadGsc CsQt|ƒ} t| ƒ} t| _| iƒ}t|t i ƒoÞt|dt ƒo|\} }| pt‚nŸt|dtƒo|d\}}n |\}}|djo tƒ}nt|ƒ}|i}y||} Wn*tj otid||fIJnX| ƒ}ntdt|ƒƒ‚| iƒ}|i|ƒ|S(s<Unpickle an object stored using the format expected by ZODB.it__main__scan't find %s in %rsexpected class info: %sN(RtdataRt UnpicklertuR"tloadt klass_infot isinstancettypest TupleTypettypeRtxxxRttupletmodnamet klassnametglobalstnst import_helperRt__dict__tKeyErrortsyststderrtinstt ValueErrortreprRt __setstate__( R$R(RR2R-R8R0RR/RR&R((Rt zodb_unpickleKs2             cGs‹h}x~|D]v}t|tiƒo|||R@((Rthandle_all_serialsks    cGst||Œ|S(ssReturn the serialno for oid based on multiple return values. A helper for function _handle_all_serials(). N(RAR R(R R((Rthandle_serials…scCst|ƒti|S(N(t __import__tnameR6tmodules(RD((RR3Œs tStorageTestBasecBs}tZd„Zd„Zd„Zdddddddd„Zddddddd„Zddd„Zd„Z d „Z RS( NcCs d|_dS(N(R tselft_storage(RG((RtsetUp–scCs%|idj o|iiƒndS(N(RGRHR tclose(RG((Rt_closešscCs|iƒdS(N(RGRK(RG((RttearDown sic Cso|djo|iiƒ}n|djo t}n|djotdƒ}nt |ƒt i jot|ƒ}n|pt |ƒ}n|djo d}ntiƒ} |dj o || _n|dj o || _nyf|ii| ƒ|ii||||| ƒ}|ii| ƒ} t||| ƒ}|ii| ƒWn|ii| ƒ‚nX|S(sFDo a complete storage transaction. The defaults are: - oid=None, ask the storage for a new oid - revid=None, use a revid of ZERO - data=None, pickle up some arbitrary data (the integer 7) - version=None, use the empty string version Returns the object's new revision id. itN(R R RGRHtnew_oidtrevidtZEROR$tMinPOR,R*tIntTypetalready_pickledRtversiont transactiont Transactiontttusert descriptiont tpc_begintstoretr1ttpc_votetr2RBt tpc_finisht tpc_abort( RGR ROR$RTRSRXRYR\R^RW((Rt_dostore£s8            cCs|i||||d||ƒS(Ni(RGRaR ROR$RTRXRY(RGR ROR$RTRXRY((Rt _dostoreNPÍscCsÒtiƒ}|i|pdƒ|ii|ƒ|ii||ƒ\}}|ii |ƒ|ii |ƒ|dj oM|it|ƒt|ƒt|ƒƒx%|D]}|i||jƒq¤Wn|iiƒS(Ntundo(RURVRWtnoteRGRHRZRcttidtoidsR]R_t expected_oidsR t assertEqualtlenR:R tassert_tlastTransaction(RGReRgRdR RfRW((Rt_undoÓs  %cCsutiƒ}|id||fƒ|ii|ƒ|ii |||ƒ\}}|ii |ƒ|ii |ƒ|S(Nscommit %r to %r(RURVRWRdtsrctdstRGRHRZt commitVersionReRfR]R_(RGRmRnRfRWRe((Rt_commitVersionâs cCsltiƒ}|id|ƒ|ii|ƒ|ii||ƒ\}}|ii |ƒ|ii |ƒ|S(Nsabort %r( RURVRWRdtverRGRHRZt abortVersionReRfR]R_(RGRqRfRWRe((Rt _abortVersionës ( RRRIRKRLR RaRbRlRpRs(((RRF‘s   * (t__doc__R6RR*tunittesttcPickleRR%t cStringIORRUt ZODB.utilsR!tZODB.tests.MinPORQRPRR RR"R<RARBR3tTestCaseRF(R RURR3RuRR!RBR6RPRFRQRARRRR<R%R*R"((Rt?s&