mς TγΈEc@sdkZdkZdklZdklZlZdefd„ƒYZdefd„ƒYZ dZ dZ d Z d Z d Zeie ƒe jpt‚eie ƒe jpt‚eid ƒZd efd„ƒYZd„Zdefd„ƒYZd„Zdefd„ƒYZdS(N(s POSKeyError(su64soid_reprtCorruptedErrorcBstZRS(N(t__name__t __module__(((t6/data/zmath/zope/lib/python/ZODB/FileStorage/format.pyR…stCorruptedDataErrorcBs#tZdddd„Zd„ZRS(NcCs||_||_||_dS(N(toidtselftbuftpos(RRRR((Rt__init__Šs  cCsZ|io dt|iƒ|if}nd|i}|io|d|i7}n|S(NsError reading oid %s. Found %rs$Error reading unknown oid. Found %rs at %d(RRtoid_reprRtmsgR(RR ((Rt__str__s     (RRtNoneR R (((RRˆss>8sQcHHHs >8s8sQQHQii*i:sZODB.FileStorage.formattFileStorageFormattercBs‰tZdZdZdZd„Zed„Zd„Zed„Z e d„Z e d„Z d „Z d „Zd „Zd „Zd „ZRS(s9Mixin class that can read and write the low-level format.lt21cCs&|ii|ƒt|iidƒƒS(sRead an 8-byte number.iN(Rt_filetseekRtu64tread(RR((Rt _read_num­scCsλ|ii|ƒ|iitƒ}t|ƒtjot|||ƒ‚nt |ƒ}|dj o&||i jot|||ƒ‚n|i o*|iid|i ƒ}|i|ƒn|ipt|iidƒƒ|_n|S(s(Return a DataHeader object for data record at pos. If ois is not None, raise CorruptedDataError if oid passed does not match oid in file. If there is version data, reads the version part of the header. If there is no pickle data, reads the back pointer. iiN(RRRRRt DATA_HDR_LENtstlenRRtDataHeaderFromStringthR tvlent parseVersiontplenRtback(RRRRR((Rt_read_data_header²s   cCs*tid||ƒ}|i||ƒdS(Ns>8s8s(tstructtpacktpnvtvprevRtfiletwritetversion(RR#R!R"R%R((Rt_write_version_headerΙscCsΦ|ii|ƒ|iitƒ}t|ƒtjot|||ƒ‚nt |ƒ}|dj o&||i jot|||ƒ‚n|ii|i ƒ|_|ii|iƒ|_|ii|iƒ|_|S(N(RRRRRt TRANS_HDR_LENRRRttidtTxnHeaderFromStringRR tulentusertdlentdescrtelentext(RRR(RR((Rt_read_txn_headerΝs cCs x™|pt|ƒ‚n|i|ƒ}|io)|ii|iƒ|i ||i fSn|idjo"| od|i ||i fSn|i}qWdS(Nii( Rt POSKeyErrorRRRRRRRR(ttloctfailR (RRRR3R((Rt_loadBack_implΪs )cCs|i|||ƒd S(s'Return data and txn id for backpointer.iN(RR4RRR3(RRRR3((Rt _loadBackTxnμscCs|i||ƒdS(Ni(RR4RR(RRR((Rt _loadBackPOSπscCs|i||ƒ}|iS(s'Return transaction id for data at back.N(RRRRRR((RRRR((RtgetTxnFromDataσscGs8d||i|f|}ti|ƒt|ƒ‚dS(Ns%s:%s:( R Rt_nameRtargsRtloggerterrorR(RRR R9R((RR3ψs cCsΦ|i|ijo,|i|dt|iƒt|iƒƒn|i|_|idjo|i|dƒn|idjo|i|d|iƒn|i|i ƒjo#|i|d|i|i ƒƒndS(Nstime-stamp reduction: %s <= %stcs$transaction with checkpoint flag sets pusinvalid transaction status: %rs7invalid transaction header: txnlen (%d) < headerlen(%d)( tthR(RtltidR3RR tstatusttlent headerlen(RR=R((RtcheckTxnύs    cCsϊ|i|jo|i|d|i|ƒn||iƒ||ijo+|i|d||iƒ||iƒn|i |jo|i|d|i ƒn|i oL|i |jo|i|d|i ƒn|i o|i|dƒqφndS(Ns:data record does not point to transaction header: %d != %ds2data record size exceeds transaction size: %d > %dsinvalid previous pointer: %dsinvalid back pointer: %ds%data record has back pointer and data( tdhR2ttposRR3Rt recordlenR=R@tprevRR(RR=RDRCR((Rt checkData s    (RRt__doc__t_metadata_sizet_format_versionRR RR&R0tTrueR4R5R6R7R3RBRG(((RR₯s          cCsttit|ƒŒS(N(t DataHeaderRtunpacktDATA_HDRR(R((RRsRLc BsAtZdZdZd „Zd „Zd „Zd„Zd„ZRS(sHeader for a data record.RR(RFR2RRRR!R"R%cCsLd|_d|_||_||_||_||_||_||_dS(Nit( RRR%RR(RFR2RR(RRR(RFR2RR((RR $s       cCsstit|i|i|i|i|i|i ƒ}|i o.tid|i |i ƒ}|||i Sn|SdS(Ns>QQ(RR RNRRR(RFR2RRRR%R!R"tv(RRPR((RtasString.s  cCs.||_t|ƒ|_||_||_dS(N(R%RRRR!R"(RR%R!R"((Rt setVersion7s  cCs?tid|d ƒ\}}||_||_|d|_dS(Ns>QQi(RRMRR!R"RR%(RRR"R!((RR=s  cCs7t|ipd}|io|d|i7}n|S(Nii(RRRtrlenR%R(RRS((RRECs ( soidstidsprevstlocsvlensplensbackspnvsvprevsversion( RRRHt __slots__R RQRRRRE(((RRLs   cCsttit|ƒŒS(N(t TxnHeaderRRMt TRANS_HDRR(R((RR)IsRUc Bs/tZdZd Zd „Zd „Zd „ZRS(s Header for a transaction record.R(R@R?R+R-R/R*R,R.cCsN||_||_||_||_||_||_|djpt‚dS(Ni(R(RR@R?R*R,R.tAssertionError(RR(R@R?R*R,R.((RR Rs      cCs^tit|i|i|i|i|i|i ƒ}di t t ||i|i|igƒƒS(NRO(RR RVRR(R@R?R*R,R.RtjointmaptstrR+R-R/(RR((RRQ[scCst|i|i|iS(N(R'RR*R,R.(R((RRA`s( stidstlensstatussusersdescrsextsulensdlenselen(RRRHRTR RQRA(((RRULs  (RtloggingtZODB.POSExceptionR1t ZODB.utilsRR t ExceptionRRRVRNR'RtDATA_VERSION_HDR_LENtcalcsizeRWt getLoggerR:tobjectRRRLR)RU(RR[RRRRVRRR_RNRURLR)RR'R R1R:((Rt?~s$   t -