U a7@sNdZddlmZdddZddZdd Zd d Zd d ZddZddZ dS)zhRoutines to handle adaption of legacy call signatures, generation of deprecation notes and docstrings. )utilNcsfdd}|S)Ncs&t|dsg|_|jf|S)N_legacy_signatures)hasattrrappend)fnargnames convertersinceXC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\event\legacy.pylegs z_legacy_signature..legr )r rr r r rr _legacy_signaturesrcsjD]\ddkr.dddndtt|jkrt|jkrdjdjrjdnd f}d jj|frrt fd d }nfd d }|SqS)Nz**kwTFz def %s(%s%s), , **kwzThe argument signature for the "%s.%s" event listener has changed as of version %s, and conversion for the old argument signature will be removed in a future release. The new signature is "%s"cstjd|S)Nversion)rwarn_deprecated)args)convrr warning_txtr r wrap_leg;sz%_wrap_fn_for_legacy..wrap_legcsJtjdttj|fddD}r>||S|SdS)Nrcsg|] }|qSr r ).0nameZargdictr r Dsz9_wrap_fn_for_legacy..wrap_leg..)rrdictzip arg_names)rkw)rdispatch_collectionrhas_kwr rrr rAs  ) legacy_signatureslenrboolvarkwrjoinr!clsnameAssertionError)r#rZargspecZ formatted_defrr )rrr#rr$r rr _wrap_fn_for_legacys6     r,csdfdd|dDS)N c3s|]}|VqdSNr )rlineindentr r Psz_indent..)r)split)textr1r r0r _indentOsr5cCstddd|jddDd}|jr@tdd|jD}nd}d}||rVd |nd |j|jrfd nd d |j||d ;}|S)Nr-css|]}dd|iVqdS)z%(arg)s = kw['%(arg)s']argNr )rr6r r r r2Usz+_standard_listen_example..rrz css|]\}}}|VqdSr.r )rr rrr r r r2\szfrom sqlalchemy import event @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 (arguments as of %s)rrr) current_since event_namehas_kw_argumentsnamed_event_argumentsexample_kw_arg sample_target)r5r)r!r%max__name__r$)r#r<rr;r7r4r r r _standard_listen_exampleSs0        r?c CsDd}|jD]4\}}}|d||j|jr(dndd||d7}q |S)Nra& # 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 **kwr)r r8r9r:r<)r%r>r$r))r#r<rr4r rrr r r _legacy_listen_examplesxsr@cCs:|jd\}}}d||j|jd|j|jr0dnddS)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.rrr)r r*r8r:r9)r%r>rr)r!r$)parent_dispatch_clsr#r rrr r r _version_signature_changess  rBcCs`d}t|dd}|tt|||d}|jrP|tt|||d7}|t||7}t|j|dS)Nz@.. container:: event_signatures Example argument forms:: Z_target_class_docobjz ) getattrr5r?r%r@rBrZinject_docstring_text__doc__)r#rArheaderr<r4r r r _augment_fn_docss"   rH)N) rFrrrr,r5r?r@rBrHr r r r s  5%