Ñò GBMc@sddkZddkZddkZddkZddkZddkZddkZddkZddk Z ddk Z ddk Z ddk Z ddk Z ddklZddklZddkZeiZeiZddklZddklZdZdefd„ƒYZeƒZhed 6Zd efd „ƒYZd efd „ƒYZdefd„ƒYZeƒZ eƒZ!eƒZ"he d6e!d6e"d6Z#d„Z$d„Z%ei&dei'ƒZ(d„Z)defd„ƒYZ*e+djoddk,Z,e,i-ƒndS(iÿÿÿÿN(turlparse(tescape(tWeaveStorageException(t WeaveHandlers(http://ns.opensocial.org/2008/opensocialtHTMLEscapeTypecBseZd„ZRS(cCs ti|ƒS(N(tcgiR(tstr((s+/usr/local/www/weave/opensocial_handlers.pyR s(t__name__t __module__R(((s+/usr/local/www/weave/opensocial_handlers.pyRst htmlEscapetXMLFormatHandlercBs#eZd„Zd„Zd„ZRS(cCsw|idtƒ|id|ƒx0|iƒD]"\}}|i||||ƒq/W|id|ƒ|idƒdS(Ns s<%s> s s (twritetOPENSOCIAL_NS_URItitemstwriteKV(tselfthandlertescapert responseTypetresponseObjecttkeytvalue((s+/usr/local/www/weave/opensocial_handlers.pyt writeResponse(s c CsŸyF|iƒ}|o/x,|D] }|i|||||ƒqWnWnRtj oF}|i|ƒ}|i|i|ƒƒ}|id|||ƒnXdS(Ns <%s>%s (tkeysRtAttributeErrort excapeXMLt escapeXMLRR (RRRRRRtettag((s+/usr/local/www/weave/opensocial_handlers.pyR0s &cCst|ƒidƒS(sS >>> XMLFormatHandler().escapeXML(u"ac&d\u00e9") "a<b>c&d&xe9;" sutf-8(t saxescapetencode(RR((s+/usr/local/www/weave/opensocial_handlers.pyR<s(RRRRR(((s+/usr/local/www/weave/opensocial_handlers.pyR &s  tAtomFormatHandlercBseZd„ZRS(cCsdS(NsAtom Format Not Supported((RRRtdata((s+/usr/local/www/weave/opensocial_handlers.pyR Fs(RRR (((s+/usr/local/www/weave/opensocial_handlers.pyREstJSONFormatHandlercBseZd„ZRS(cCs titƒS(N(tjsontdumpstobj(RRRR ((s+/usr/local/www/weave/opensocial_handlers.pyR Js(RRR (((s+/usr/local/www/weave/opensocial_handlers.pyR!IstxmltatomR"cCs?d|ijo+|idd}|tjo t|SntS(sGResolves an HTTP request to a formatter object; returns JSON by defaulttformati(t argumentstFormatst JSONFormat(trequesttfmt((s+/usr/local/www/weave/opensocial_handlers.pytresolveFormatArgRs   cCs?d|ijo+|idd}|tjo t|SntS(sEResolves an HTTP request to an Escape object; returns HTML by defaultt escapeTypei(R(tEscapest HTMLEscape(R+tet((s+/usr/local/www/weave/opensocial_handlers.pytresolveEscapeArgZs   s6(?P\d\d\d\d) ([-])?(?P\d\d) ([-])?(?P\d\d) ( (T|\s+) (?P\d\d) ( ([:])?(?P\d\d) ( ([:])?(?P\d\d) ( ([.])?(?P\d+) )? )? )? )? ( (?PZ) | (?P[-+]) (?P\d\d) ([:])?(?P\d\d) )? $ c CsFd|ijo2|idd}ti|ƒ}|iƒ}d}|do"yt|dƒ}WqoqoXnd}|do"yt|dƒ}Wq¢q¢Xnd}|do"yt|dƒ}WqÕqÕXnd}|do"yt|dƒ}WqqXnd}|doªyt|dƒ}WnnX|do}|d or|dd jo d } nd } yC|t|d ƒ| 7}|d o|t|d ƒ| 7}nWq¿q¿XqÃnd} |doEy7t|dƒ} |do| t|dƒ7} nWqqXnti|||||| ddd f ƒSdS(sVIf the provided HTTP request header contains a 'updatedSince' value, parses the value and returns it as a number of seconds since 1970. >>> class R(object): pass >>> r = R() >>> r.arguments = {'updatedSince':['2002-05-06T13:12:13']} >>> time.gmtime(resolveUpdatedSinceArg(r)) time.struct_time(tm_year=2002, tm_mon=5, tm_mday=6, tm_hour=13, tm_min=12, tm_sec=13, tm_wday=0, tm_yday=126, tm_isdst=0) >>> r.arguments = {'updatedSince':['2002-05-06T13:12:13-00:00']} >>> time.gmtime(resolveUpdatedSinceArg(r)) time.struct_time(tm_year=2002, tm_mon=5, tm_mday=6, tm_hour=13, tm_min=12, tm_sec=13, tm_wday=0, tm_yday=126, tm_isdst=0) >>> r.arguments = {'updatedSince':['2002-05-06T13:12:13+07:30']} >>> time.gmtime(resolveUpdatedSinceArg(r)) time.struct_time(tm_year=2002, tm_mon=5, tm_mday=6, tm_hour=20, tm_min=42, tm_sec=13, tm_wday=0, tm_yday=126, tm_isdst=0) >>> r.arguments = {'updatedSince':['2002-05-06T13:12:13-07:30']} >>> time.gmtime(resolveUpdatedSinceArg(r)) time.struct_time(tm_year=2002, tm_mon=5, tm_mday=6, tm_hour=5, tm_min=42, tm_sec=13, tm_wday=0, tm_yday=126, tm_isdst=0) t updatedSinceityeartmonthtdaytminutethourttzoffsetttzhourt-iÿÿÿÿittzminutetsecondtfractionN( R(t dateTimeREtmatcht groupdicttinttfloattcalendarttimegmtNone( R+tustmatmR4R5R6R7R8tsigntseconds((s+/usr/local/www/weave/opensocial_handlers.pytresolveUpdatedSinceArg}sl            )tOpenSocialPeopleHandlercBseZd„Zdd„ZRS(c CsÎ|djo½d|iijotiiddƒ‚nt|iƒ}t|iƒ}t|iƒ}ti |ƒ}ti |ddƒ}|o |i }|i |||ƒqÊtiiddƒ‚ndS( Ns@selftuserIdisFuserId is not a legal argument for REST OpenSocial Get Person requeststprofiletrooti”s Not Found( R+R(ttornadotwebt HTTPErrorR2R-RLtstoraget get_contexttgettpayloadR ( RtusernametargumentRR'R3tctxtwbot profileData((s+/usr/local/www/weave/opensocial_handlers.pyRVÇs  cCs_|i|ƒ|ptiiddƒ‚nti|||iiƒ}|it |ƒƒdS(NisMissing required collection( tcheck_account_matchRQRRRSRTt handle_putR+tbodyR R(Rtnamet collectiontts((s+/usr/local/www/weave/opensocial_handlers.pytputãs  N(RRRVRFRc(((s+/usr/local/www/weave/opensocial_handlers.pyRMÆs t__main__(.ttornado.httpserverRQttornado.ioloopt tornado.webtostrettimeRDtbase64t tracebacktloggingt cStringIOR"RRtxml.sax.saxutilsRRt server_configtaccountRTRtweave_handlersRR tobjectRR0R/R RR!t XMLFormatt AtomFormatR*R)R-R2tcompiletVERBOSER?RLRMRtdoctestttestmod(((s+/usr/local/www/weave/opensocial_handlers.pytsN                        I%