B ÃÌ4]ã@sNdZddlmZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Zdd„Z dS)zhRoutines to handle adaption of legacy call signatures, generation of deprecation notes and docstrings. é)ÚutilNcs‡‡‡fdd„}|S)Ncs&t|dƒsg|_|j ˆˆˆf¡|S)NÚ_legacy_signatures)ÚhasattrrÚappend)Úfn)ÚargnamesÚ converterÚsince©úJ/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/event/legacy.pyÚlegs z_legacy_signature..legr )r rrr r )rrr r Ú_legacy_signaturesr cs’xŒˆjD]~\}‰‰ˆddkr0d‰ˆdd…‰nd‰tˆƒt|jƒkrˆt|jƒkrˆrpˆr`t‚‡‡fdd„}n‡‡‡‡fdd„}|SqWˆSdS) Néÿÿÿÿz**kwTéFcs ˆˆ|ŽŽS)Nr )Úargs)Úconvrr r Úwrap_leg)sz%_wrap_fn_for_legacy..wrap_legcs<ttˆj|ƒƒ‰‡fdd„ˆDƒ}ˆr0ˆ||ŽSˆ|ŽSdS)Ncsg|] }ˆ|‘qSr r )Ú.0Úname)Úargdictr r ú 0sz9_wrap_fn_for_legacy..wrap_leg..)ÚdictÚzipÚ arg_names)rÚkw)rÚdispatch_collectionrÚhas_kw)rr r.s  )Úlegacy_signaturesÚlenrÚboolZvarkwÚAssertionError)rrZargspecr rr )rrrrrr Ú_wrap_fn_for_legacys  r!csd ‡fdd„| d¡Dƒ¡S)NÚ c3s|]}ˆ|VqdS)Nr )rÚline)Úindentr r ú <sz_indent..)ÚjoinÚsplit)Útextr$r )r$r Ú_indent;sr)cCs˜td dd„|jdd…Dƒ¡dƒ}|jr@tdd„|jDƒƒ}nd}d}t|jƒd kr^|d 7}||rld |nd |j|jr|d nd d |j¡||dœ;}|S)Nr"css|]}dd|iVqdS)z%(arg)s = kw['%(arg)s']ÚargNr )rr*r r r r%Bsz+_standard_listen_example..rrz css|]\}}}|VqdS)Nr )rr rrr r r r%Isafrom 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) ... ézð # 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) ... z (arguments as of %s)Úz, **kwz, )Ú current_sinceÚ event_nameÚhas_kw_argumentsÚnamed_event_argumentsÚexample_kw_argÚ sample_target)r)r&rrÚmaxrÚ__name__r)rr2rr1r-r(r r r Ú_standard_listen_example?s.      r5c CsHd}x>|jD]4\}}}|d||j|jr*dndd |¡|dœ7}q W|S)Nr,a& # 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) ... z **kwz, )r r.r/r0r2)rr4rr&)rr2rr(r rrr r r Ú_legacy_listen_examplesps r6cCs:|jd\}}}d||j|jd |j¡|jr0dnddœS)Nra> .. 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.z, z, **kwr,)r Zclsnamer.r0r/)rr4rr&rr)Úparent_dispatch_clsrr rrr r r Ú_version_signature_changesˆs r8cCs`d}t|ddƒ}|tt|||ƒdƒ}|jrP|tt|||ƒdƒ7}|t||ƒ7}t |j|d¡S)Nz@.. container:: event_signatures Example argument forms:: Z_target_class_docÚobjz é) Úgetattrr)r5rr6r8rZinject_docstring_textÚ__doc__)rr7rÚheaderr2r(r r r Ú_augment_fn_docs›s    r>)N) r<r,rr r!r)r5r6r8r>r r r r Ú s  !1