FRTc@sddlZddlZddlmZddlZddlmZddlmZddl m Z m Z ddl m Z m Z mZddlmZmZddlmZmZmZd Zd efd YZd efd YZdefdYZdS(iN(t find_class(tKey(tBlob(t ListPropertyt MapProperty(tdatetimetdatettime(tSDBPersistenceErrortS3ResponseError(tmaptsixt long_types%Y-%m-%dT%H:%M:%SZtTimeDecodeErrorcBseZRS((t__name__t __module__(((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR $st SDBConvertercBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZeZdZdZdZdZdZdZdZ RS(s Responsible for converting base Python types to format compatible with underlying database. For SimpleDB, that means everything needs to be converted to a string when stored in SimpleDB and from a string when retrieved. To convert a value, pass it to the encode or decode method. The encode method will take a Python native value and convert to DB format. The decode method will take a DB format value and convert it to Python native format. To find the appropriate method to call, the generic encode/decode methods will look for the type-specific method by searching for a method called"encode_" or "decode_". cCsddlm}||_||_i |j|jft6|j|jft 6|j |j ft 6|j |jf|j6|j |jft6|j|jft6|j|jft6|j|jft6|j|jft6|j|jft6|_t j!r|j"|j#f|jt$|j||S|j|j|SdS(N(R8RRARR<R5t data_type(R0R=R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyt encode_prop~s cCst|ts|g}nt|drt|d}i}x_|D]W}|dk rF|j||\}}yt|}Wn |}nX|||(R0R=R4R3tdec_valtvalR?R@((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyt decode_lists    cCsgt|ts|g}ni}t|d}x0|D](}|j||\}}||||j||S|j|j|SdS(N(R8RRQRRSR6RK(R0R=R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyt decode_props cCst|}|d7}d|S(NIs%010d(R(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRs  cCsTyt|}Wn!tjjd|d}nXt|}|d8}t|S(NsError, %s is not an integeriI(Rtbototlogterror(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRs   cCst|}|d7}d|S(Nls%020d(R (R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR-s  cCst|}|d8}|S(Nl(R (R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR.s  cCs0|tks$t|jdkr(dSdSdS(Nttruetyestfalse(struesyes(tTrueR*tlower(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRs$cCs|jdkrtStSdS(NR\(R`R_tFalse(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRscCsd|}|jd}|djdd}|d}|dkrTd}d }n-|dd kr|dd krd }|djd d}n|dd kr|dd krd}dt|}d|}n|dd kr;|dd kr;d}ddt|}|jdd}|djd d}nFd}ddt|}|jdd}dt|}d|}d|||fS(sM See http://tools.ietf.org/html/draft-wood-ldapext-float-00. s%eteiit0igt3t000t-t+t5it4is%03dt2s%fi t1s%s %s %s(RVtljusttrjustRR(R0R4tstltmantissatexponenttcase((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRs2         cCs|d}|dd!}|d}|dkr1dS|dkr@n~|dkrcd t|d }n[|d krd t|d }d|}n.d t|d }d tt|d }t|d|S(NiiiiRdgRhRis%03diRjs%fi RfRb(RRtabs(R0R4RrRqRp((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRs        cCs@t|tjr|St|tr2|jtS|jSdS(N(R8R t string_typesRtstrftimetISO8601t isoformat(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR s  cCs|dkr|Syd|kr[d|krHtj|jdddStj|tSn=|jd}tt|dt|dt|dSWntk rdSXdS( s'Handles both Dates and DateTime objectstTt.is%Y-%m-%dT%H:%M:%SRfiiN(R7RtstrptimeRVRvRRt Exception(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR!s   2 cCs t|tjr|S|jS(N(R8R RtRw(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR"%scCsPyA|jd}tt|dt|dt|dSWndSXdS(NRfiii(RVRRR7(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR#*s 2cCsd|ksd|kr+td|n|jd}tt|djd}t|dkr|jt|dnt|S( s converts strings in the form of HH:MM:SS.mmmmmm (created by datetime.time.isoformat()) to datetime.time objects. Timzone-aware strings ("HH:MM:SS.mmmmmm+HH:MM") won't be handled right now and will raise TimeDecodeError. RfRgs'Can't handle timezone aware objects: %rRyiRTii(R RVR RtlenRFR(R0R4ttmptarg((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR%3scCs1|dkrdSt|tjr&|S|jSdS(NR7tt (NsNoneRR(R7R8R RtRU(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRDs  cCs| s|dkrdS|S(NR7(R7(R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyRLscCs|s dSt|tjr |S|jsr|jj}|jtt j }d|j j |j f|_nvt jd|j}|r|jj}|j|jddt}|j|jd}ntd|j|jdk r |j|jn|jS(Ns s3://%s/%ss^s3:\/\/([^\/]*)\/(.*)$itvalidateisInvalid Blob ID: %s(R7R8R RtRURtget_blob_buckettnew_keyR*tuuidtuuid4tbuckettnametretmatchtget_s3_connectiont get_buckettgroupRatget_keyRR4tset_contents_from_string(R0R4RRIRts3((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR&Qs" cCs|s dStjd|}|r|jj}|j|jddt}y|j|jd}Wqt k r}|j dkrndSXndS|rt d|dd|j j |j fSdSdS( Ns^s3:\/\/([^\/]*)\/(.*)$iRit ForbiddentfileRUs s3://%s/%s(R7RRRRRRRaRR treasonRRR(R0R4RRRRIRb((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR'hs &cCsrt|ts|Sytj|dSWnDg}x*|D]"}|jtjt|q:Wdj|SXdS(s/Convert ASCII, Latin-1 or UTF-8 to pure Unicodesutf-8uN(R8R*R t text_typeRFtunichrtordtjoin(R0R4tarrtch((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR(|s  cCs|S(sHDecoding a string is really nothing, just return the value as-is((R0R4((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR)s(!RRt__doc__R1R5R6RAR<RLRQRSRNRXRRR-R.RRRRR R!R"R#R$R%RRR&R'R(R)(((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR(s>                        t SDBManagercBseZddZedZedZdZdZdZ dZ dZ ddZ d Z dd Zd Zd Zeddd ZdZdddZdZdZddZdZdZdZdZdZdZdZRS(c Cs||_||_||_||_||_||_||_||_| |_d|_ d|_ t ||_ d|_d|_| dkrt|dr|j} n| |_dS(Nt__consistent__(tclstdb_nametdb_usert db_passwdtdb_hosttdb_porttdb_tabletddl_dirt enable_sslR7RRRt convertert_sdbt_domainRMRt consistent( R0RRRRRRRRRR((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pyR1s"              cCs#|jdkr|jn|jS(N(RR7t_connect(R0((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pytsdbs cCs#|jdkr|jn|jS(N(RR7R(R0((sK/opt/freeware/lib/python2.7/site-packages/boto/sdb/db/manager/sdbmanager.pytdomains cCstd|jd|jd|j}yFgtjjD]}|j|jkr7|^q7d}||ds   j