Files
aitsc/.venv/Lib/site-packages/sqlalchemy/testing/__pycache__/util.cpython-312.pyc

161 lines
21 KiB
Plaintext
Raw Normal View History

2025-02-23 09:07:52 +08:00
<EFBFBD>
2025-08-29 00:34:40 +08:00
<00><19>h<EFBFBD>:<00><01>`<00>ddlmZddlmZddlmZddlZddlZddlZddlm Z ddl
2025-02-23 09:07:52 +08:00
Z
2025-08-29 00:34:40 +08:00
ddl Z ddl Z ddl m Z ddlZddlZddlmZdd lmZdd
lmZd d lmZd d lmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dl m!Z!d dl"m#Z#d dl"m$Z$d dl"m%Z%d dl"m&Z&e%sd<1A>Z'e'xZ(Z)nejTZ(d<1B>Z)d<1C>Z+d6d<1D>Z,d<1E>Z-Gd<1F>d e.<2E>Z/d!<21>Z0d"<22>Z1d#<23>Z2d$<24>Z3d%<25>Z4d&<26>Z5e#d'<27><00>Z6d(<28>Z7d)<29>Z8d*<2A>Z9d7d+<2B>Z:d,<2C>Z;Gd-<2D>d.e<<3C>Z=d/<2F>Z> d8d1<64>Z?d2<64>Z@d3<64>ZAd4<64>ZBej<>d0d9d5<64><05>ZDy):<3A>)<01> annotations)<01>deque)<01>
namedtupleN)<01>chain)<01> getsizeof)<01>Any<6E>)<01>config)<01>mock<63>)<01>inspect)<01>
Connection)<01>Column)<01>DropConstraint)<01> DropTable)<01>ForeignKeyConstraint)<01>MetaData)<01>Table<6C><01>schema)<01>Integer<65><01> decorator)<01> defaultdict)<01>has_refcount_gc)<01>inspect_getfullargspecc<01>T<00>tj<00>tj<00>y<00>N)<02>gc<67>collect)<01>argss <20>DD:\pythonpj\aitsc\.venv\Lib\site-packages\sqlalchemy/testing/util.py<70>non_refcount_gc_collectr#.s<00><00>
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C>
<EFBFBD>
<EFBFBD>
2025-08-29 00:34:40 +08:00
<EFBFBD> <0C>c<01><00>yr<00>r&r$r"<00>lazy_gcr'7s<00><00> r$c#<01><><00>K<00>tdddg<02>}tdtjdz<00>D]<00>|tj<00>fd<06><08><00><01><00> y<00>w)N<>picklers<72>loads<64>dumps<70><73><EFBFBD><EFBFBD><EFBFBD>r c<01>0<00><01>tj|<00><01>Sr)<02>pickler+)<02>d<>protocols <20>r"<00><lambda>zpicklers.<locals>.<lambda>?s<00><><00><16><1C><1C>a<EFBFBD><18>)Br$)r<00>ranger.<00>HIGHEST_PROTOCOLr*)<02>ntr0s @r"r)r);sF<00><><00><><00> <13>J<EFBFBD><17>'<27> 2<> 3<>B<EFBFBD><19>"<22>f<EFBFBD>5<>5<><01>9<>:<3A><08><10><16><1C><1C>B<>C<>C<>;<3B>s<00>AAc<01>0<00>tj||<01><01>S)N)<01>k)<02>random<6F>choices)<02>
populationr6s r"<00>random_choicesr:Bs<00><00> <11>><3E>><3E>*<2A><01> *<2A>*r$c<01><><00>t|t<00>r t||<01>S|tjdd|zz<00>zj tj <00>td|<01>z S)N<>1<>0<>
2025-02-23 09:07:52 +08:00
)<08>
2025-08-29 00:34:40 +08:00
isinstance<EFBFBD>float<61>round<6E>decimal<61>Decimal<61> to_integral<61> ROUND_FLOOR<4F>pow)<02>value<75>precs r"<00> round_decimalrIFs\<00><00><11>%<25><15><1F><14>U<EFBFBD>D<EFBFBD>!<21>!<21> <12>G<EFBFBD>O<EFBFBD>O<EFBFBD>C<EFBFBD>#<23><04>*<2A>$4<>5<> 5<> B<> B<><0F><1B><1B> <06> <0B>B<EFBFBD><04> <0A> <16>r$c<01>0<00>eZdZd<01>Zd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zy)<08> RandomSetc<01>~<00>ttj|<00><00>}tj|<01>t |<01>Sr)<06>list<73>set<65>__iter__r7<00>shuffle<6C>iter)<02>self<6C>ls r"rOzRandomSet.__iter__Qs*<00><00> <10><13><1C><1C>d<EFBFBD>#<23> $<24><01><0E><0E><0E>q<EFBFBD><19><13>A<EFBFBD>w<EFBFBD>r$c<01><><00>tjdt|<00>dz
<00>}ttj |<00><00>|}|j |<02>|S)Nrr )r7<00>randint<6E>lenrMrNrO<00>remove)rR<00>index<65>items r"<00>popz RandomSet.popVsC<00><00><16><0E><0E>q<EFBFBD>#<23>d<EFBFBD>)<29>a<EFBFBD>-<2D>0<><05><13>C<EFBFBD>L<EFBFBD>L<EFBFBD><14>&<26>'<27><05>.<2E><04> <0C> <0B> <0B>D<EFBFBD><19><13> r$c<01>@<00>ttj||<01><00>Sr)rKrN<00>union<6F>rR<00>others r"r\zRandomSet.union\s<00><00><18><13><19><19>4<EFBFBD><15>/<2F>0<>0r$c<01>@<00>ttj||<01><00>Sr)rKrN<00>
differencer]s r"r`zRandomSet.difference_s<00><00><18><13><1E><1E><04>e<EFBFBD>4<>5<>5r$c<01>@<00>ttj||<01><00>Sr)rKrN<00> intersectionr]s r"rbzRandomSet.intersectionbs<00><00><18><13>)<29>)<29>$<24><05>6<>7<>7r$c<01><00>t|<00>Sr)rK)rRs r"<00>copyzRandomSet.copyes <00><00><18><14><EFBFBD>r$N) <09>__name__<5F>
__module__<EFBFBD> __qualname__rOrZr\r`rbrdr&r$r"rKrKPs <00><00><17>
<14> 1<>6<>8<>r$rKc<01><><00>tt<00>}|D]\}}||j|<04><00>t|<01>D]\}}||dD] }|||vs<01> y<00>y)zATrue if the given sorting conforms to the given partial ordering.NFT)rrN<00>add<64> enumerate)<08>tuples<65>sorted_elements<74>deps<70>parent<6E>child<6C>i<>node<64>ns r"<00>conforms_partial_orderingrsise<00><00> <17>s<EFBFBD> <1B>D<EFBFBD><1F> <0A><06><05> <0C>V<EFBFBD> <0C><18><18><15><1F> <20><1C>_<EFBFBD>-<2D><07><01>4<EFBFBD> <20><11><12>$<24>A<EFBFBD><13>t<EFBFBD>A<EFBFBD>w<EFBFBD><EFBFBD><1C>%<25>.<2E>
r$c<01><><00><04><05>tt<00><00>|D]\}}<03>|j|<02><00><00><04>fd<01><08>t<00>|<01><00>S)Nc3<01><><00>K<00>t|<00>dk(rt|<00><00><01>y|D]G}t|<00>j|g<01>}|j <00>|<00>r<01>3<00>|<02>D]
}|g|z<00><01><00> <00>Iy<00>w)Nr )rVrMrNr`rb)<06>elements<74>elem<65>subset<65> sub_ordering<6E>_all_orderings<67>edgess <20><>r"rzz-all_partial_orderings.<locals>._all_orderings|sk<00><><00><><00> <0E>x<EFBFBD>=<3D>A<EFBFBD> <1D><16>x<EFBFBD>.<2E> <20> <20><04><1C>X<EFBFBD><1D>1<>1<>4<EFBFBD>&<26>9<><06><1D>*<2A>*<2A>5<EFBFBD><14>;<3B>7<>(6<>v<EFBFBD>(><3E> <0C>#<23>f<EFBFBD>|<7C>3<>3<>)?<3F>!<21>s <00>AA-<01>A-)rrNrirQ)rkrvrnrorzr{s @@r"<00>all_partial_orderingsr|wsD<00><><00> <17><03> <1C>E<EFBFBD><1F> <0A><06><05> <0A>e<EFBFBD> <0C><18><18><16> <20> <20>4<> <10><0E>x<EFBFBD>(<28> )<29>)r$c<01><><00> ||_|S#t$rEtj|j|j
2025-02-23 09:07:52 +08:00
||j |j<00>}Y|SwxYw)acReturn a function with a given __name__.
Will assign to __name__ and return the original function if possible on
the Python implementation, otherwise a new function will be constructed.
This function should be phased out as much as possible
in favor of @decorator. Tests that "generate" many named tests
should be modernized.
2025-08-29 00:34:40 +08:00
)re<00> TypeError<6F>types<65> FunctionType<70>__code__<5F> __globals__<5F> __defaults__<5F> __closure__)<02>fn<66>names r"<00>function_namedr<64><00>sX<00><00>
2025-02-23 09:07:52 +08:00
<EFBFBD><1A><02> <0B>
<0E>I<EFBFBD><49> <15>
<EFBFBD> <12> <1F> <1F> <0E>K<EFBFBD>K<EFBFBD><12><1E><1E><14>r<EFBFBD><EFBFBD><EFBFBD><02><0E><0E>
<EFBFBD><02> <0E>I<EFBFBD> 
<EFBFBD>s<00> <00>A
A<03>Ac<01><><00>|j<00>} ||g|<02><01>i|<03><01>}|jddd<01>|S#tj<00>}|j|<06>}|s<01>|cYSxYw)aRun the given function under the given contextmanager,
simulating the behavior of 'with' to support older
Python versions.
This is not necessary anymore as we have placed 2.6
as minimum Python version, however some tests are still using
this structure.
2025-08-29 00:34:40 +08:00
N)<04> __enter__<5F>__exit__<5F>sys<79>exc_info)<08>ctxr<78><00>arg<72>kw<6B>obj<62>resultr<74><00>raise_s r"<00>run_as_contextmanagerr<72><00>sj<00><00> <0E>-<2D>-<2D>/<2F>C<EFBFBD>
2025-02-23 09:07:52 +08:00
<1A><13>C<EFBFBD>$<24>#<23>$<24><12>$<24><06> <0B> <0C> <0C>T<EFBFBD>4<EFBFBD><14>&<26><15> <0A><><1A><16><<3C><<3C>><3E><08><1D><13><1C><1C>x<EFBFBD>(<28><06><15> <11><19>M<EFBFBD>s <00> 3<00>*Ac<01>><00>|D<00>chc] }t|<01><00><02>c}Scc}w)z<>Converts the results of sql execution into a plain set of column tuples.
Useful for asserting the results of an unordered query.
2025-08-29 00:34:40 +08:00
<20><01>tuple)<02>results<74>rows r"<00>rowsetr<74><00>s <00><00> #*<2A> *<2A>'<27>3<EFBFBD>E<EFBFBD>#<23>J<EFBFBD>'<27> *<2A>*<2A><> *s<00>c<01><00>J|<00><00>rr&)<01>msgs r"<00>failr<6C><00>s <00><00><15>#<23><15>5r$c<01>p<00>ddlm}tj<00>}|d}t |dd<05>}||_ ||i|<02><01>|j <00>|jj}|r2t||<07>|j<00>j<00>||_St|tj<00>||_S#|j <00>|jj}|r2t||<07>|j<00>j<00>||_wt|tj<00>||_wxYw)ztProvide bound MetaData for a single test, dropping afterwards.
2025-02-23 09:07:52 +08:00
Legacy; use the "metadata" pytest fixture.
2025-08-29 00:34:40 +08:00
r )<01>fixturesr<00>metadataN)<0E>r<>rr<00>getattrr<72><00>close_all_sessions<6E>base<73>_connection_fixture_connection<6F>drop_all_tables_from_metadata<74>get_transaction<6F>commitr
<00>db)r<>r!r<>r<>r<>rR<00> prev_meta<74>cfcs r"<00>provide_metadatar<61><00>s <00><00><1B><15><EFBFBD><EFBFBD> <20>H<EFBFBD> <0F><01>7<EFBFBD>D<EFBFBD><17><04>j<EFBFBD>$<24>/<2F>I<EFBFBD><1C>D<EFBFBD>M<EFBFBD>"<22><11>4<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD> <11>#<23>#<23>%<25><17>m<EFBFBD>m<EFBFBD>:<3A>:<3A><03> <0E> *<2A>(<28>C<EFBFBD> 8<>
2025-02-23 09:07:52 +08:00
<10> <1F> <1F> !<21> (<28> (<28> *<2A>"<22><04> <0A> *<2A>(<28>F<EFBFBD>I<EFBFBD>I<EFBFBD> ><3E>!<21><04> <0A><># <11>#<23>#<23>%<25><17>m<EFBFBD>m<EFBFBD>:<3A>:<3A><03> <0E> *<2A>(<28>C<EFBFBD> 8<>
<10> <1F> <1F> !<21> (<28> (<28> *<2A>"<22><04> <0A> *<2A>(<28>F<EFBFBD>I<EFBFBD>I<EFBFBD> ><3E>!<21><04> <0A>s <00>B8<00>8A=D5c
<01>J<00><02>t<00>}|D]<00>|j<00><02><00>t|<01>}tj|D<00><02>cgc]2<00>dj <00>fd<02>|D<00><00>ft <00>fd<03>|D<00><00>z<00><02>4c}ddt|<01>zzdj |<01>d<07><02>Scc}w)aqA facade around @testing.combinations() oriented towards boolean
keyword-based arguments.
Basically generates a nice looking identifier based on the keywords
and also sets up the argument names.
E.g.::
@testing.flag_combinations(
dict(lazy=False, passive=False),
dict(lazy=True, passive=False),
dict(lazy=False, passive=True),
dict(lazy=False, passive=True, raiseload=True),
)
def test_fn(lazy, passive, raiseload): ...
would result in::
@testing.combinations(
("", False, False, False),
("lazy", True, False, False),
("lazy_passive", True, True, False),
("lazy_passive", True, True, True),
id_="iaaa",
argnames="lazy,passive,raiseload",
)
def test_fn(lazy, passive, raiseload): ...
2025-08-29 00:34:40 +08:00
<20>_c3<01>H<00>K<00>|]}<01>j|d<00>s<01>|<01><01><00>y<01>w<01>FN<46><01>get<65><03>.0r6r/s <20>r"<00> <genexpr>z$flag_combinations.<locals>.<genexpr>s<00><><00><><00>9<><14>A<EFBFBD><11><15><15>q<EFBFBD>%<25><1F>a<EFBFBD><14>s<00>"<01>"c3<01>B<00>K<00>|]}<01>j|d<00><00><01><00>y<01>wr<>r<>r<>s <20>r"r<>z$flag_combinations.<locals>.<genexpr>s<00><><00><><00>2<>T<EFBFBD><01>A<EFBFBD>E<EFBFBD>E<EFBFBD>!<21>U<EFBFBD>O<EFBFBD>T<EFBFBD>s<00>rp<00>a<>,)<02>id_<64>argnames)rN<00>update<74>sortedr
<00> combinations<6E>joinr<6E>rV)r<><00>keysr/s `r"<00>flag_combinationsr<73><00>s<><00><><00>> <0F>5<EFBFBD>D<EFBFBD> <19><01> <0C> <0B> <0B>A<EFBFBD><0E><1A> <12>$<24><<3C>D<EFBFBD> <11> <1E> <1E>"<22>
2025-02-23 09:07:52 +08:00
<EFBFBD>"<22><01><11>X<EFBFBD>X<EFBFBD>9<><14>9<> 9<> ;<3B><13>2<>T<EFBFBD>2<>2<> 3<>!<21>
<EFBFBD>
<10>3<EFBFBD><13>T<EFBFBD><19>?<3F> #<23><14><18><18>$<24><1E> <06><06><>
2025-08-29 00:34:40 +08:00
s<00>7B c <01><00><00>t<00><00>}<00>|dD<00>cgc]}tj<00><00><02>c}<03>}<04>fd<02>}tjt t |<04><00>D<00>cgc] }||<06>f<01><02> c}i|<01><01>Scc}wcc}w)Nrc<01>*<00><01><00><00><02>fd<01>}d<02>z|_|S)Nc<01><00><02><00>di|<00><01><01>S)Nr&r&)r<><00>lambda_arg_sets<74>poss <20><>r"<00>fixturez<lambda_combinations.<locals>.create_fixture.<locals>.fixture&s<00><><00>"<22>(<28>R<EFBFBD>(<28><13>-<2D> -r$z fixture_%3.3d)re)r<>r<>r<>s` <20>r"<00>create_fixturez+lambda_combinations.<locals>.create_fixture%s<00><><00> .<2E>+<2B>S<EFBFBD>0<><07><18><16>r$)rr <00>Mockr
r<>r2rV)r<>r<>r!r<><00>arg_setsr<73>rps` r"<00>lambda_combinationsr<73> s<><00><><00> !<21>/<2F> 2<>D<EFBFBD><1E><04>Q<EFBFBD><07> @<40><07><13><14><19><19><1B><07> @<40>A<>H<EFBFBD><17> <12> <1E> <1E>(-<2D>c<EFBFBD>(<28>m<EFBFBD>(<<3C> =<3D>(<<3C>1<EFBFBD>><3E>!<21> <1C>
2025-02-23 09:07:52 +08:00
<1E>(<<3C> =<3D> <06>AC<41> <06><06><>!A<01><>
>s <00>A6<08>A;c <01><00>t|<00>d}|D<00>cic]}||j|<03><00><02>}}t|j<00>}|j |<01>t j |j|<05>}|di|<04><01>Scc}w)z<>Given a no-arg lambda and a namespace, return a new lambda that
has all the values filled in.
This is used so that we can have module-level fixtures that
refer to instance-level variables using lambdas.
2025-08-29 00:34:40 +08:00
rr&)rrZ<00>dictr<74>r<>rr<>r<>)<07>__fnr<6E><00>pos_argsr<73><00> pass_pos_args<67>glb<6C>new_fns r"<00>resolve_lambdar<61>1sx<00><00>&<26>d<EFBFBD>+<2B>A<EFBFBD>.<2E>H<EFBFBD>19<31>:<3A><18>#<23>S<EFBFBD>"<22>&<26>&<26><13>+<2B>%<25><18>M<EFBFBD>:<3A>
2025-02-23 09:07:52 +08:00
<0E>t<EFBFBD><1F><1F>
<20>C<EFBFBD><07>J<EFBFBD>J<EFBFBD>r<EFBFBD>N<EFBFBD> <12> <1F> <1F><04> <0A> <0A>s<EFBFBD> 3<>F<EFBFBD> <11> "<22>M<EFBFBD> "<22>"<22><> ;s<00>A<c<01><00><00><00>fd<01>}|S)z&Provide MetaData for a pytest fixture.c<01>H<00><01><00><00>fd<01>}tj<00><02><02>|<01>S)Nc3<01>$<00>K<00>tj<00>x}|_ <00>||<01>}|jtj
<00>|<02><02>|j tj
<00>y#|j tj
2025-08-29 00:34:40 +08:00
<00>wxYw<01>wr)rrr<><00>
create_allr
r<><00>drop_all)rRr<>r<>r<>s <20>r"<00>run_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddlFsh<00><><00><><00>'-<2D><EFBFBD><EFBFBD>'8<> 8<>H<EFBFBD>t<EFBFBD>}<7D> -<2D><1B>D<EFBFBD>(<28>+<2B><06><18>#<23>#<23>F<EFBFBD>I<EFBFBD>I<EFBFBD>.<2E><1D> <0C><18>!<21>!<21>&<26>)<29>)<29>,<2C><><08>!<21>!<21>&<26>)<29>)<29>,<2C>s<00>B<01>,A,<00> B<01>,!B <03> B)<01>scope)r
r<>)r<>r<><00>ddls` <20>r"<00>decoratez"metadata_fixture.<locals>.decorateEs <00><><00> -<2D>)<29>v<EFBFBD>~<7E>~<7E>C<EFBFBD>(<28><17>1<>1r$r&)r<>r<>s` r"<00>metadata_fixturer<65>Bs<00><><00> 2<> <14>Or$c<01>$<00><00>t<00>fd<01><08>}|S)ziForce the given table names to be dropped after test complete,
2025-02-23 09:07:52 +08:00
isolating for foreign key cycles
2025-08-29 00:34:40 +08:00
c<01><><00><01> ||i|<02><01>ttjttj<00><00><03><01>S#ttjttj<00><00><03><01>wxYw)N)<01> include_names)<04>drop_all_tablesr
r<>r )r<>r!r<><00>namess <20>r"<00>gozforce_drop_names.<locals>.go\sG<00><><00> P<01><15>t<EFBFBD>?<3F>r<EFBFBD>?<3F> <1B>F<EFBFBD>I<EFBFBD>I<EFBFBD>w<EFBFBD>v<EFBFBD>y<EFBFBD>y<EFBFBD>'9<><15> O<><4F>O<EFBFBD>F<EFBFBD>I<EFBFBD>I<EFBFBD>w<EFBFBD>v<EFBFBD>y<EFBFBD>y<EFBFBD>'9<><15> O<>s <00>><00>5A3r)r<>r<>s` r"<00>force_drop_namesr<73>Vs <00><><00> <0F>P<01><0F>P<01> <0E>Ir$c<01> <00>eZdZdZd<02>Zd<03>ZeZy)<05>adictz,Dict keys available as attributes. Shadows.c<01>X<00> ||S#t$rtj||<01>cYSwxYwr)<03>KeyErrorr<72><00>__getattribute__)rR<00>keys r"r<>zadict.__getattribute__is3<00><00> 4<><17><03>9<EFBFBD> <1C><><17> 4<><17>(<28>(<28><14>s<EFBFBD>3<> 3<> 4<>s <00><00>)<03>)c<01>D<00>t|D<00>cgc]}||<00><02> c}<02>Scc}wrr<>)rRr<>r<>s r"<00>__call__zadict.__call__os#<00><00><14>4<EFBFBD>0<>4<EFBFBD>C<EFBFBD>d<EFBFBD>3<EFBFBD>i<EFBFBD>4<EFBFBD>0<>1<>1<><31>0s<00> N)rerfrg<00>__doc__r<5F>r<><00>get_allr&r$r"r<>r<>fs<00><00>6<>4<> 2<><17>Gr$r<>c<01><><00><00><04>ddlm<01><00><04>fd<03>}t|t<00>s"|j <00>5}||<03>ddd<00>y||<01>y#1swYyxYw)Nr )<01>enginesc<01>
<00><02><00>jj|<00>|jjs4ddlm}|j dd<04><05>5<00>j|<00>ddd<00>y<00>j|<00>y#1swYyxYw)Nr )<01>
assertionszCan't sort tablesF)<01>assert_)<08>testing_reaper<65>prepare_for_drop_tables<65>dialect<63>supports_alterr<72>r<><00>expect_warningsr<73>)<04>
connectionr<EFBFBD>r<>r<>s <20><>r"r<>z)drop_all_tables_from_metadata.<locals>.goxsv<00><><00><0F><1E><1E>6<>6<>z<EFBFBD>B<><19>!<21>!<21>0<>0<> $<24><1B>+<2B>+<2B>#<23>U<EFBFBD>,<2C><0E><19>!<21>!<21>*<2A>-<2D><0E><0E>
<15> <1D> <1D>j<EFBFBD> )<29> <0E><0E>s <00> A9<03>9B)r<>r<>r?r<00>begin)r<><00>engine_or_connectionr<6E>r<>r<>s` @r"r<>r<>usI<00><><00><19> *<2A> <16>*<2A>J<EFBFBD> 7<> !<21> '<27> '<27> )<29>Z<EFBFBD> <0E>z<EFBFBD>N<EFBFBD>*<2A> )<29> <0B> <1F> <20>*<2A> )<29>s <00> A
2025-02-23 09:07:52 +08:00
<03>
2025-08-29 00:34:40 +08:00
Arc <01><><00>|<04> t|<04>}|<02>|dk(sJd<02><00>|f}|j<00>5}t|j|<03><03><00>D]<5D>\}}|r?|<04>|d|vr<01>|j t t |dt<00>|d<00><06><00><00><00>G|s<01>J|jjs<01>a|D]<5D>\}} |<04>|d|vr<01>t |dt<00>tdt<00>tdt<00>|d<00><06>}
2025-02-23 09:07:52 +08:00
|j tt|
jjg|
jj g| <09> <09><00><00><00><><00><01> ddd<00>y#1swYyxYw)
2025-08-29 00:34:40 +08:00
Nrz2consider_schemas and schema are mutually exclusive)<01>consider_schemasr rr<00>x<>y)r<>)rNr<><00>reversed<65>%sort_tables_on_foreign_key_dependency<63>executerrrr<>r<>rrrr<00>cr<63>r<>) <0B>engine<6E> inspectorrr<>r<><00>conn<6E> table_key<65>fkcs<63>t_key<65>fkc<6B>tbs r"r<>r<><00>sf<00><00><15> <20><1B>M<EFBFBD>*<2A> <0A> <0A><19><1F>$
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD> @<01> ?<3F> @<01>
<EFBFBD>#<23>9<EFBFBD><18> <0F><1C><1C><1E>4<EFBFBD>'<27> <15> ;<3B> ;<3B>!1<> <<3C> <0E>
<EFBFBD>O<EFBFBD>I<EFBFBD>t<EFBFBD>
<19>!<21>-<2D>!<21>!<21> <0C>M<EFBFBD>9<><1C><14> <0C> <0C><1D><1D>i<EFBFBD><01>l<EFBFBD>H<EFBFBD>J<EFBFBD>y<EFBFBD><11>|<7C>L<><16><12>
<16><1D>~<7E>~<7E>4<>4<><1C>"&<26>J<EFBFBD>E<EFBFBD>3<EFBFBD>%<25>1<>!<21>!<21>H<EFBFBD>M<EFBFBD>9<> <20><1E><1D>a<EFBFBD><08> <20>
<EFBFBD><1E>s<EFBFBD>G<EFBFBD>,<2C><1E>s<EFBFBD>G<EFBFBD>,<2C>$<24>Q<EFBFBD>x<EFBFBD> <16>B<EFBFBD><19>L<EFBFBD>L<EFBFBD>&<26>0<>"<22>$<24>$<24>&<26>&<26><18>B<EFBFBD>D<EFBFBD>D<EFBFBD>F<EFBFBD>F<EFBFBD>8<EFBFBD>#<23>N<><1A><16>#'<27>'
<EFBFBD>
2025-08-29 00:34:40 +08:00
<18><1E><1E>s<00>A%E<03>B8E<03>E c<01>$<00><00>t<00>fd<01><08>}|S)Nc<01>`<00><01> ||i|<02><01><01>j<00>S#<00>j<00>wxYwr)<01>_clear)r<>r<>r<><00> event_clss <20>r"r<>z!teardown_events.<locals>.decorate<74>s,<00><><00> <1F><15>s<EFBFBD>><3E>b<EFBFBD>><3E> <15> <1C> <1C> <1E><>I<EFBFBD> <1C> <1C> <1E>s<00><00>-r)r r<>s` r"<00>teardown_eventsr<00>s<00><><00><0E><1F><0F><1F> <14>Or$c <01><><00><02><03><04><05>d<01>}ttttttt|t
2025-02-23 09:07:52 +08:00
tt ti<06>t <00><00>td<02><00><03><02><03><04>fd<03><08><00>|<00>S)z<>Returns the approximate memory footprint an object and all of its
contents.
source: https://code.activestate.com/recipes/577504/
2025-08-29 00:34:40 +08:00
c<01>H<00>tj|j<00><00>Sr)r<00> from_iterable<6C>items)r/s r"<00> dict_handlerz total_size.<locals>.dict_handler<65>s<00><00><14>"<22>"<22>1<EFBFBD>7<EFBFBD>7<EFBFBD>9<EFBFBD>-<2D>-r$rc
<01><><00><04>t|<00><00>vry<01>jt|<00><00>t|<00><05>}<01>j<00>D]2\}}t ||<02>s<01>|t t <00>||<00><00><00>z }|S|S)Nr)<07>idrirrr?<00>sum<75>map)<08>o<>s<>typ<79>handler<65> all_handlers<72> default_size<7A>seen<65>sizeofs <20><><EFBFBD><EFBFBD>r"rztotal_size.<locals>.sizeof<6F>sv<00><><00> <0A>a<EFBFBD>5<EFBFBD>D<EFBFBD>=<3D><14> <0C><08><08><12>A<EFBFBD><15><0F> <15>a<EFBFBD><1C> &<26><01>(<28>.<2E>.<2E>0<>L<EFBFBD>C<EFBFBD><17><19>!<21>S<EFBFBD>!<21><11>S<EFBFBD><13>V<EFBFBD>W<EFBFBD>Q<EFBFBD>Z<EFBFBD>0<>1<>1<><01><15><10><08> 1<><11>r$)r<>rQrMrr<>rN<00> frozensetr)rrrrrrs @@@@r"<00>
total_sizer!<00>sR<00><><00>.<2E> <0E>t<EFBFBD> <0C>d<EFBFBD> <0A>t<EFBFBD> <0C>l<EFBFBD> <0B>T<EFBFBD><11>4<EFBFBD> <06>L<EFBFBD> <0F>5<EFBFBD>D<EFBFBD><1C>Q<EFBFBD><<3C>L<EFBFBD>
<11> <12>!<21>9<EFBFBD>r$c<01><><00>|g}t<00>}d}|rB|jd<01>}||ur|dz }n$t|t<00>r|rt |<04>|gz|z}|r<01>B|S)z<>given a cache key tuple, counts how many instances of actual
2025-02-23 09:07:52 +08:00
tuples are found.
used to alert large jumps in cache key complexity.
2025-08-29 00:34:40 +08:00
rr )<05>objectrZr?r<>rM)<05>tup<75>stack<63>sentinel<65> num_elementsrws r"<00>count_cache_key_tuplesr(<00>sh<00><00><11>E<EFBFBD>E<EFBFBD><15>x<EFBFBD>H<EFBFBD><14>L<EFBFBD>
2025-02-23 09:07:52 +08:00
<0F><14>y<EFBFBD>y<EFBFBD><11>|<7C><04> <0F>8<EFBFBD> <1B> <18>A<EFBFBD> <1D>L<EFBFBD> <17><04>e<EFBFBD> $<24><13><1C>T<EFBFBD>
2025-08-29 00:34:40 +08:00
<EFBFBD>h<EFBFBD>Z<EFBFBD>/<2F>%<25>7<><05> <10> <18>r$c #<01>K<00>tj<00>}d<00><01>tj<00>|z
}||kDr& |<01>tjd|d<02>d|<00>d<04><05>yy#tjd|d<02>d|<00>d<04><05>wxYw<01>w)Nztest took too long (z.4fz seconds > <20>))<03>timer
<00> skip_test)<04>seconds<64>cleanup<75>now<6F>secs r"<00>skip_if_timeoutr1 s<><00><00><><00> <0F>)<29>)<29>+<2B>C<EFBFBD> <09>
2025-02-23 09:07:52 +08:00
<0E>)<29>)<29>+<2B><03>
<1B>C<EFBFBD>
2025-08-29 00:34:40 +08:00
<EFBFBD>W<EFBFBD>}<7D> <0E> <13>I<EFBFBD> <12> <1C> <1C>&<26>s<EFBFBD>3<EFBFBD>i<EFBFBD>{<7B>7<EFBFBD>)<29>1<EFBFBD>E<> <0E> <15><> <13> <1C> <1C>&<26>s<EFBFBD>3<EFBFBD>i<EFBFBD>{<7B>7<EFBFBD>)<29>1<EFBFBD>E<> <0E>s<00>5B<01>A<00>B<01>A=<03>=B)r )<01>function)NrN)r-r@r.r)E<>
__future__r<00> collectionsrr<00>
contextlibrBr<00> itertoolsrr.r7r<>rr+r<00>typingrr<>r
r r rrrrrrrrr<00>sql<71> sql.sqltypesr<00>utilrrrrr#<00>
gc_collectr'r r)r:rIrNrKrsr|r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rr!r(<00>contextmanagerr1r&r$r"<00><module>r=s<<00><01>#<23><1D>"<22><11><0E> <09><1B> <0A> <0A>
<EFBFBD><19> <0B> <0C><16><14><12><16><1F><1B>#<23><1E>)<29><1D><1A><18>"<22><1C><1E>"<22>)<29><17><15>3<>2<>J<EFBFBD><17><14><1A><1A>J<EFBFBD> <0A>D<01>+<2B><16><1F><03><1F>2 <14>*<2A>$<0E>(<1A>2+<2B><16> <0B>("<22> <0B>("<22>V.<06>b<06>"#<23>"<14>( <0E> <17>D<EFBFBD> <17>!<21>4 <10><1C><16> 5<16>p<14>#<15>L<18>, <0C><1A><1A> <0E><1B> r$