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]v\}‰‰ˆddkr0d‰ˆdd…‰nd‰tˆƒt|jƒkrˆt|jƒkrˆrh‡‡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)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)rr1rr0r,r'r r r Ú_standard_listen_example?s.      r4c 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.r/r1)rr3rr%)rr1rr'r rrr r r Ú_legacy_listen_examplesps r5cCs:|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-r/r.)rr3rr%rr)Úparent_dispatch_clsrr rrr r r Ú_version_signature_changesˆs r7cCs`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(r4rr5r7rZinject_docstring_textÚ__doc__)rr6rÚheaderr1r'r r r Ú_augment_fn_docs›s    r=)N) r;r+rr r r(r4r5r7r=r r r r Ú s  !1