o znh@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 convertersinceB/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/legacy.pylegs z_legacy_signature..legr )r rr r r rr _legacy_signaturesrcsjD]D\}ddkrdddndtt|jkrGt|jurGr:r/Jfdd}|Sfdd}|SqS) Nz**kwTFcs |SNr )args)convrr r wrap_leg)s z%_wrap_fn_for_legacy..wrap_legcs<ttj|fddD}r|i|S|S)Ncsg|]}|qSr r ).0nameargdictr r 0sz9_wrap_fn_for_legacy..wrap_leg..)dictzip arg_names)rkw)rdispatch_collectionrhas_kwrr r.s )legacy_signatureslenrboolvarkw)rrargspecr rr )rrrrrr _wrap_fn_for_legacys   r%csdfdd|dDS)N c3s|]}|VqdSrr )rlineindentr r <sz_indent..)joinsplit)textr)r r(r _indent;sr.cCstddd|jddDd}|jr tdd|jD}nd}d}t|jd kr/|d 7}||r6d |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*As  z+_standard_listen_example..rrz css|]\}}}|VqdSrr )rr rrr r r r*Hs  afrom 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), **kw, ) current_since event_namehas_kw_argumentsnamed_event_argumentsexample_kw_arg sample_target)r.r+rr maxr!__name__r)rr9rr8r4r-r r r _standard_listen_example?s8         r<c CsDd}|jD]\}}}|d||j|jrdndd||d7}q|S)Nr1a& # 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 **kwr3)r r5r6r7r9)r r;rr+)rr9rr-r rrr r r _legacy_listen_examplespsr=cCs@|jd\}}}d||j|jd|j|jrddSddS)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.r3r2r1)r clsnamer5r7r6)r r;rr+rr)parent_dispatch_clsrr rrr r r _version_signature_changess  r@cCs`d}t|dd}|tt|||d}|jr(|tt|||d7}|t||7}t|j|dS)Nz@.. container:: event_signatures Example argument forms:: _target_class_docobjz ) getattrr.r<r r=r@rinject_docstring_text__doc__)rr?rheaderr9r-r r r _augment_fn_docss    rHr) rFr1rrr%r.r<r=r@rHr r r r s   !1