L i.NdZddlmZddlZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZedeZeddZ d' d(dZ d) d*dZ d) d+dZ d, d-dZ d. d/d Z d0d!Z d' d1d"Z!d2d#Z"d3d$Z# d' d4d%Z$ d5 d6d&Z%y)7zSHelpers related to deprecation of functions, methods, classes, other functionality.) annotationsN)Any)Callable)Dict)Match)Optional)Sequence)Set)Tuple)Type)TypeVar)Union)compat)_hash_limit_string)_warnings_warn) decorator)inject_docstring_text)inject_param_text)exc_T)bound_FzCallable[..., Any]cF|||}||_t||dzy)Ncoder stacklevel)deprecated_sincer)msgversiontype_rrwarns b/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py_warn_with_versionr&*s& 4 D#D4JN3c@t||tj||y)Nr)r&rSADeprecationWarning)r!r"rrs r%warn_deprecatedr*7s Wc.. r'c^|r t|d|}t||tj||y)zhIssue a deprecation warning with a parameterized string, limiting the number of registrations. rN)rr&rr))r!argsr"rrs r%warn_deprecated_limitedr.?s.  b$/ Wc.. r'c8ddxsddfd }|S)N.. deprecated::  c Zt|tjtzS)Nfunc)_decorate_cls_with_warningrr)dict)cls constructorheadermessager"s r%decoratez deprecated_cls..decorateVs2)    $ $ d , ,     r')r8Type[_T]returnr=)r"r;r9r<r:s``` @r%deprecated_clsr@Qs&)0'-R- AF   Or'c|r ddxsdnddtjdzz dfd }|S) aDecorates a function and issues a deprecation warning on use. :param version: Issue version in the warning. :param message: If provided, issue message in the warning. A sensible default is used if not provided. :param add_deprecation_to_docstring: Default True. If False, the wrapped function's __doc__ is left as-is. If True, the 'message' is prepended to the docs if provided, or sensible default if message is omitted. r0r1r2Nz$Call to deprecated function %(func)sz (deprecated since: %s)cdJJt|t|jzS)Nr4)enable_warnings)_decorate_with_warningr7__name__)fnrCr:r;r"warnings r%r<zdeprecated..decoratesH""""""%   d , ,  +   r'rFrr>r)rr))r"r;add_deprecation_to_docstringrGrCr<r:s`` `` @r% deprecatedrJcs].$  ]]  8** (722G    Or'c <t d|tjd|S)Nr;rG2.0)rJrMovedIn20Warning)r;kws r%moved_20rQs,   (<(< @B r'c :tjd|}|rdddd|jd}nd}d|d |d d d }d |vr1|jdd}|s|j ddus Jd|z|r|d |zz }t j }td||d|S)Nz^:(attr|func|meth): attributefunctionmethod)attrr5methr constructzThe r1z= is considered legacy as of the 1.x series of SQLAlchemy and zbecomes a legacy constructz in 2.0.z:attr:warn_on_attribute_accessFrCzattribute %s will emit a warning on read access. If you *really* want this, add warn_on_attribute_access=True. Otherwise please add enable_warnings=False.rLrM)rematchgrouppopgetrLegacyAPIWarningrJ)api_name alternativerPtype_regr#r; attribute_ok warning_clss r%became_legacy_20resxx-x8H$j(K NN1     (   8vv8%@ 66+,5 ),44 53$$&&K  HWk HR HHr'c iiijD].\}\}}||<t||<tj|<0dfd }|S)aKDecorates a function to warn on use of certain parameters. e.g. :: @deprecated_params( weak_identity_map=( "0.7", "the :paramref:`.Session.weak_identity_map parameter " "is deprecated.", ) ) def some_function(**kwargs): ... cT tj|}|jtt |j t |j t |jz d|j t j  t j  nZ|jA|j t j  t j  n d t  |jtd fd }|jduxr |jxsd}|rDt| jDcic]\}\}}|d|dk(rdn|d|xsdc}}}}||}||_ |Scc}}}w) Nr?cFD]6}|||||||k7st| | |d8vr6t|jrJt  dD]}||vst| | |d!||i|SNr)r&set difference) rFr-kwargsm check_any_kwcheck_defaultscheck_kwdefaultsmessagesversion_warningsversionss r%warnedz3deprecated_params..decorate..warneds# QK'F1I,AQK+q Xa[0H&    (+#$  x'CK,B,B-$///"\*\*$\2  ;&    (+#$  t&v& &r'r2r0rNz1.4r1rFrr-rrmrr>r)rinspect_getfullargspecrrr7zipr-lenrk intersectionrlkwonlydefaultsvarkwr__doc__ritems)rFspecrvdocparamr"r; decoratedrorprqrrrsspecsrtrus @@@@r%r<z#deprecated_params..decorates,,R0 == $IIs499~DMM0BBEFMMH !]77AN8}//9H  ,**H ]77AN8}//9HN8}Hzz   ' '  'Bjj$39r #6;[[]21 '5 0ug= 2 PPC2J  s(!F#rH)r_sanitize_restructured_textrr))rrr"r;r<rsrtrus` @@@r%deprecated_paramsrsp "H!HBD%*[[];!!!5g>"%":":; GGR Or'chdd}tjdd|}tjd||S)NcB|jdd\}}|dvr|dz }|S)Nrr)r5rWz()r\)rnr#names r%replz)_sanitize_restructured_text..repl-s,ggam t $ $ DLD r'z:ref:`(.+) <.*>`c*d|jdzS)Nz"%s"rr)rns r%z-_sanitize_restructured_text..3s!''!*1Dr'z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rnz Match[str]r>str)rZsub)textrs r%rr,s1 66%'Dd KD 663T4 @@r'c *|jduxr |jxsd}|||t|z}t|tjr|dz }t ||d}d}t |t urgt|j}||d<|jdd|jddt |j|j|}|||}n||_| t||}|"|J|Jt||t||||d|S)Nr2r4@ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)rr~__dict__ __weakref__)r~r7 issubclassrBase20DeprecationWarningrtyperr]rE __bases__getattrsetattrrD) r8r9wtyper;r"docstring_headerrconstructor_fnclsdicts r%r6r67s9 ++T ! 1ckk 7RC#  " + 6 6  eS99 : 0  $C)91= 9 3<<(G!$GI  KK D ) KK t ,s||S]]G.warned{sC** fjj /  w1 E4"6""r'Nr4rc"tdSri)r&)r;r"rsr%rz(_decorate_with_warning..s!3%A"r'rw) rrrrrr~r7rEr_sa_warn) r5rr;r"rrCdoc_onlyrvrrs ``` ` r%rDrDgs*'2G%556 ,  ## ,,d " 3t|| 9rC#Ddmm44H$#C)91=t III r')N) r!rr"rr#Type[exc.SADeprecationWarning]rintr Optional[str]r>None)rjN) r!rr"rrrrrr>r) r!rr-z Sequence[Any]r"rrrrrr>r)__init__)r"rr;rr9rr>zCallable[[Type[_T]], Type[_T]])NTNT) r"rr;rrIboolrGz(Optional[Type[exc.SADeprecationWarning]]rCrr>Callable[[_F], _F])r;rrPrr>z0Callable[[Callable[..., _T]], Callable[..., _T]])r`rrarrPrr>r)rzTuple[str, str]r>r)rrr>r)r8r=r9rrrr;rr"rrrr>r=)NT)r5rrrr;rr"rrrrCrr>r)&r~ __future__rrZtypingrrrrrr r r r r rr2r langhelpersrrrrrrrrr&r*r.r@rJrQrerrr6rDr?r'r%rs# +'".* T T-. 4  4  4 * 4 4  4  4HL (+7D         &>H -:#(")-8< 3 3 3#'36 3  3  3l 515#I#I -#I