ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@s\dZddlmZd dZdZdZdZdZdZ d Z d S( shRoutines to handle adaption of legacy call signatures, generation of deprecation notes and docstrings. i(tutilcsfd}|S(Ncs8t|dsg|_n|jjf|S(Nt_legacy_signatures(thasattrRtappend(tfn(targnamest convertertsince(sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pytlegs ((RRRR((RRRsJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_legacy_signaturescsxjD]\}ddkr?tdd!nttt|jkr t|jkr r stfd}nfd}|Sq WSdS(Nis**kwics|S(N((targs(tconvR(sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pytwrap_leg)scsVttj|}gD]}||^q}rH||S|SdS(N(tdicttzipt arg_names(R tkwtargdicttname(Rtdispatch_collectionRthas_kw(sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyR .s  (tlegacy_signaturestTruetFalsetlenR tbooltvarkwtAssertionError(RRtargspecRR ((RR RRRsJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_wrap_fn_for_legacys! cs&djfd|jdDS(Ns c3s|]}|VqdS(N((t.0tline(tindent(sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pys <s(tjointsplit(ttextR ((R sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_indent;scCstdjd|jdd!Dd}|jrQtd|jD}nd}d}t|jdkr|d 7}n|i|rd |nd d 6|jd 6|jrdnd d6dj|jd6|d6|d6;}|S(Ns css |]}di|d6VqdS(s%(arg)s = kw['%(arg)s']targN((RR%((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pys Bsiis css|]\}}}|VqdS(N((RRR R ((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pys Issfrom sqlalchemy import event # standard decorator style%(current_since)s @event.listens_for(%(sample_target)s, '%(event_name)s') def receive_%(event_name)s(%(named_event_arguments)s%(has_kw_arguments)s): "listen for the '%(event_name)s' event" # ... (event handling logic) ... is # named argument style (new in 0.9) @event.listens_for(%(sample_target)s, '%(event_name)s', named=True) def receive_%(event_name)s(**kw): "listen for the '%(event_name)s' event" %(example_kw_arg)s # ... (event handling logic) ... s (arguments as of %s)tt current_sincet event_names, **kwthas_kw_argumentss, tnamed_event_argumentstexample_kw_argt sample_target( R$R!RRtmaxtNoneRt__name__R(RR,RR+R'R#((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_standard_listen_example?s.      cCssd}xf|jD][\}}}|di|d6|jd6|jrHdndd6dj|d6|d 67}qW|S( NR&s& # DEPRECATED calling style (pre-%(since)s, will be removed in a future release) @event.listens_for(%(sample_target)s, '%(event_name)s') def receive_%(event_name)s(%(named_event_arguments)s%(has_kw_arguments)s): "listen for the '%(event_name)s' event" # ... (event handling logic) ... RR(s **kwR)s, R*R,(RR/RR!(RR,RR#RR R ((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_legacy_listen_examplesps cCsb|jd\}}}di|d6|jd6|jd6dj|jd6|jrYdnd d 6S( Nis> .. deprecated:: %(since)s The :class:`.%(clsname)s.%(event_name)s` event now accepts the arguments ``%(named_event_arguments)s%(has_kw_arguments)s``. Support for listener functions which accept the previous argument signature(s) listed above as "deprecated" will be removed in a future release.RtclsnameR(s, R*s, **kwR&R)(RR/RR!RR(tparent_dispatch_clsRRR R ((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_version_signature_changess  cCsd}t|dd}|tt|||d}|jru|tt|||d7}|t||7}ntj|j|dS( Ns@.. container:: event_signatures Example argument forms:: t_target_class_doctobjt iis s ( tgetattrR$R0RR1R4Rtinject_docstring_textt__doc__(RR3RtheaderR,R#((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt_augment_fn_docss   N( R:R&RR.R RR$R0R1R4R<(((sJ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/event/legacy.pyt s !  1