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

229 lines
41 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+<00><01><><00>ddlmZddlmZddlZddlmZddlmZddlZddl Z ddl
2025-02-23 09:07:52 +08:00
Z
ddl m Z ddl m Z dd l mZdd
2025-08-29 00:34:40 +08:00
l mZdd lmZdd lmZd dl mZd dl mZd dl mZd dl mZd dl mZd dlmZd dlmZd dlmZd dlmZd<17>Z ejBd<18><00>Z"d<19>Z#d<1A>Z$d<1B>Z%d<1C>Z&d<1D>Z'da(da)da* dGd<1E>Z+ejB dHd<1F><01>Z,d <20>Z-d!<21>Z.d"<22>Z/dId#<23>Z0dJd$<24>Z1dJd%<25>Z2dJd&<26>Z3dJd'<27>Z4dJd(<28>Z5dJd)<29>Z6dJd*<2A>Z7dJd+<2B>Z8dJd,<2C>Z9dJd-<2D>Z:e:Z;dJd.<2E>Z<dJd/<2F>Z=e=Z>dJd0<64>Z?dJd1<64>Z@d2<64>ZAd3<64>ZBd4<64>ZCd5<64>ZDd6<64>ZEd7<64>ZFd8<64>ZG dKd9<64>ZHGd:<3A>d;<3B>ZIejBdKd<<3C><01>ZJdLd=<3D>ZKdLd><3E>ZLGd?<3F>d@<40>ZMGdA<64>dB<64>ZNGdC<64>dD<64>ZOGdE<64>dF<64>ZPy)M<>)<01> annotations)<01> defaultdictN)<01>copy)<01> filterfalse<73>)<01> assertsql)<01>config)<01>engines)<01>mock)<01>db_spec)<01>fail<69>)<01>exc)<01>schema)<01>sql)<01>types)<01>util)<01>default)<01>url)<01>LABEL_STYLE_TABLENAME_PLUS_COL<4F><01> decoratorc<01>8<00>ttj|fi|<01><01>S)a<>Context manager which expects one or more warnings.
2025-02-23 09:07:52 +08:00
With no arguments, squelches all SAWarning emitted via
sqlalchemy.util.warn and sqlalchemy.util.warn_limited. Otherwise
pass string expressions that will match selected warnings via regex;
all non-matching warnings are sent through.
The expect version **asserts** that the warnings were in fact seen.
Note that the test suite sets SAWarning warnings to raise exceptions.
2025-08-29 00:34:40 +08:00
)<03>_expect_warnings_sqla_only<6C>sa_exc<78> SAWarning<6E><02>messages<65>kws <20>JD:\pythonpj\aitsc\.venv\Lib\site-packages\sqlalchemy/testing/assertions.py<70>expect_warningsr!%s<00><00> &<26>f<EFBFBD>&6<>&6<><08> G<>B<EFBFBD> G<>G<>c/<01><>K<00>t|<00>}t|t<00>r|tj<00>sd<01><01>yt |i|<02><01>5d<01><02>ddd<01>y#1swYyxYw<01>w)z<>Context manager which expects one or more warnings on specific
2025-02-23 09:07:52 +08:00
dialects.
The expect version **asserts** that the warnings were in fact seen.
N)r <00>
isinstance<EFBFBD>strr <00>_currentr!)<04>dbrr<00>specs r <00>expect_warnings_onr)5sD<00><00><><00> <13>2<EFBFBD>;<3B>D<EFBFBD><11>"<22>c<EFBFBD><1A>4<EFBFBD><06><0F><0F>#8<> <0A> <1C>h<EFBFBD> -<2D>"<22> -<2D> <11>.<2E> -<2D> -<2D>s<00>AA<01>A<03> A<01>A<07>Ac<01>$<00><00>t<00>fd<01><08>}|S)z<>Decorator form of expect_warnings().
Note that emits_warning does **not** assert that the warnings
were in fact seen.
c<01>V<00><01>t<00>ddi<01>5||i|<02><01>cddd<00>S#1swYyxYw<01>N<>assert_F)r!<00><04>fn<66>argsrrs <20>r <00>decoratezemits_warning.<locals>.decorateNs'<00><><00> <1C>X<EFBFBD> 6<>U<EFBFBD> 6<><15>t<EFBFBD>?<3F>r<EFBFBD>?<3F>7<> 6<> 6<><36><00><03>(r<00>rr1s` r <00> emits_warningr4Fs<00><><00><0F>#<23><0F>#<23> <14>Or"c<01>8<00>ttj|fi|<01><01>S<00>N)rr<00>SADeprecationWarningrs r <00>expect_deprecatedr8Vs"<00><00> %<25><0E>#<23>#<23>X<EFBFBD> <06>13<31> <06>r"c<01>8<00>ttj|fi|<01><01>Sr6)rr<00>Base20DeprecationWarningrs r <00>expect_deprecated_20r;\s"<00><00> %<25><0E>'<27>'<27><18> <06>57<35> <06>r"c<01>(<00><00><01>t<00><00>fd<01><08>}|S)aVMark a test as emitting a warning on a specific dialect.
With no arguments, squelches all SAWarning failures. Or pass one or more
strings; these will be matched to the root of the warning description by
warnings.filterwarnings().
Note that emits_warning_on does **not** assert that the warnings
were in fact seen.
c<01>^<00><02>t<00>g<01><04><01>ddi<01>5||i|<02><01>cddd<00>S#1swYyxYwr,)r))r/r0rr'rs <20><>r r1z"emits_warning_on.<locals>.decoratens,<00><><00> <1F><02> =<3D>H<EFBFBD> =<3D>E<EFBFBD> =<3D><15>t<EFBFBD>?<3F>r<EFBFBD>?<3F>><3E> =<3D> =<3D><><00>#<03>,r)r'rr1s`` r <00>emits_warning_onr?bs<00><><00><0F>#<23><0F>#<23> <14>Or"c<01>$<00><00>t<00>fd<01><08>}|S)a+Mark a test as immune from fatal deprecation warnings.
With no arguments, squelches all SADeprecationWarning failures.
Or pass one or more strings; these will be matched to the root
of the warning description by warnings.filterwarnings().
As a special case, you may pass a function name prefixed with //
and it will be re-written as needed to match the standard warning
verbiage emitted by the sqlalchemy.util.deprecated decorator.
Note that uses_deprecated does **not** assert that the warnings
were in fact seen.
c<01>V<00><01>t<00>ddi<01>5||i|<02><01>cddd<00>S#1swYyxYwr,)r8r.s <20>r r1z!uses_deprecated.<locals>.decorate<74>s'<00><><00> <1E><08> 8<>%<25> 8<><15>t<EFBFBD>?<3F>r<EFBFBD>?<3F>9<> 8<> 8<>r2rr3s` r <00>uses_deprecatedrBvs<00><><00> <0F>#<23><0F>#<23> <14>Or"c<01>$<00>t|||||d<01><02>S)z<>SQLAlchemy internal use only _expect_warnings().
Alembic is using _expect_warnings() directly, and should be updated
to use this new interface.
T)<04>regex<65>
search_msgr-<00>raise_on_any_unexpected)<01>_expect_warnings)<05>exc_clsrrDrEr-s r rr<00>s#<00><00> <1C><0F><10><13><1D><17> $<24>  <06>r"c #<01><><00><02><03><05><06> <09>
<EFBFBD> K<00><00>s<02>rD|D<00>cgc]7}tj|tjtjz<00><00><02>9c}<07> n t |<01><00> t
<00>It <00>J<00>t<00>J<00>t
j<00> <09>t j<00> <09>t|fz ad<00><01>yt<00> <09>x<01> a<06> a|fa<07>rd<01><00>
ntj<00>
<EFBFBD> <09><05>
<EFBFBD><02><03> <0B>fd<02>}tjd|<08>5 d<00><03>dxaxaa|r$<24> r"Jddj<00>fd<06><08> D<00><00>z<00><00>ddd<00>ycc}w#dxaxaa|r%<25> r"Jddj<00>fd<06><08> D<00><00>z<00><00>wwxYw#1swYyxYw<01>w)Nc<01><00>td|z<00><00>)NzGot unexpected warning: %r)<01>AssertionError)<03>msg<73>argrs r <00> real_warnz#_expect_warnings.<locals>.real_warn<72>s<00><00>$<24>%A<>C<EFBFBD>%G<>H<>Hr"c<01>b<00><07>t|t<00>rt|<00>}t|<00>}n
|r|d}nd}|rt |t<00>s<0F> s <00>|g|<01><01>i|<02><01>Sy<00>s<03>sy<00>D]C}<04> r|j |<00>s<1C>r|j |<00>s <09>r<01>,||k(s<01>2<EFBFBD>
2025-08-29 00:34:40 +08:00
j|<04>y<00> s <00>|g|<01><01>i|<02><01>yy<00>Nr)r$<00>_EXC_CLS<4C>typer%<00>
issubclass<EFBFBD>search<63>match<63>discard) rLrMr<00> exception<6F>filter_<72>filtersrFrNrDrE<00>seen<65>squelch_other_warningss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r <00>our_warnz"_expect_warnings.<locals>.our_warn<72>s<><00><><00><19>#<23>x<EFBFBD>(<28> <20><13>I<EFBFBD> <09><19>#<23>h<EFBFBD><03><14><1F><01>F<EFBFBD> <09> <20> <09><1C>J<EFBFBD>y<EFBFBD>(<28>$C<>-<2D>$<24>S<EFBFBD>5<>3<EFBFBD>5<>"<22>5<>5<><1A><1A>#:<3A><16>"<22><07><1F>G<EFBFBD>N<EFBFBD>N<EFBFBD>3<EFBFBD>$7<><1D>'<27>-<2D>-<2D><03>"4<>!<21>g<EFBFBD><13>n<EFBFBD><18>L<EFBFBD>L<EFBFBD><17>)<29><19>#<23>.<2E><1D>c<EFBFBD>.<2E>C<EFBFBD>.<2E>2<EFBFBD>.<2E>.r"z warnings.warnzWarnings were not seen: %sz, c3<01>D<00>K<00>|]}d<00>r |jn|z<00><01><00>y<01>w)z%rN)<01>pattern)<03>.0<EFBFBD>srDs <20>r <00> <genexpr>z#_expect_warnings.<locals>.<genexpr><3E>s#<00><><00><><00>N<16>DH<44>q<EFBFBD><04>U<EFBFBD><01> <09> <09><01>:<3A>D<EFBFBD>s<00> )<10>re<72>compile<6C>I<>S<>list<73>_FILTERS<52>_SEENrQ<00>extend<6E>update<74>set<65>warnings<67>warnr <00>patch<63>join) rHrrDrEr-rFr[rLr\rYrNrZs `` `` @@@r rGrG<00>s<><00><><00><><00> <0A>
2025-02-23 09:07:52 +08:00
<EFBFBD>;C<>D<>8<EFBFBD>C<EFBFBD>2<EFBFBD>:<3A>:<3A>c<EFBFBD>2<EFBFBD>4<EFBFBD>4<EFBFBD>"<22>$<24>$<24>;<3B>/<2F>8<EFBFBD>D<><07><16>x<EFBFBD>.<2E><07><0F><1B><15> <20> <20> <20><17>#<23>#<23>#<23><10><0F><0F><07> <20> <0A> <0C> <0C>W<EFBFBD><1D><10>W<EFBFBD>J<EFBFBD><1E><08> <0A><1A>7<EFBFBD>|<7C>#<23><04>u<EFBFBD><1A><08><1B>:<3A><08> "<22> I<01>!<21> <0A> <0A>I<EFBFBD> /<2F> /<2F><<12>Z<EFBFBD>Z<EFBFBD><0F><18> 2<> <16><15>.2<EFBFBD>2<><05>2<><08>8<EFBFBD><1A>#<23><16>%A<>D<EFBFBD>I<EFBFBD>I<EFBFBD>N<16>DH<44>N<16>E<16>&<16><16>8<EFBFBD>3<> 2<><32>qE<01><>x/3<>2<><05>2<><08>8<EFBFBD><1A>#<23><16>%A<>D<EFBFBD>I<EFBFBD>I<EFBFBD>N<16>DH<44>N<16>E<16>&<16><16>8<EFBFBD>t<EFBFBD><1B><> 3<> 2<>sA<00> E3<01><D0<04>B'E3<01>5E'<03>7D5<02>;,E'<03>'E3<01>5/E$<05>$E'<03>'E0<07>,E3c<01><00>t<00>y)z<>Check things that have to be finalized at the end of a test suite.
Hardcoded at the moment, a modular system can be built here
to support things like PG prepared transactions, tables all
dropped, etc.
2025-08-29 00:34:40 +08:00
N)<01>!_assert_no_stray_pool_connections<6E>r"r <00>global_cleanup_assertionsrs<00>s
2025-02-23 09:07:52 +08:00
<00><00>&<26>'r"c<01>@<00>tjj<00>yr6)r
2025-08-29 00:34:40 +08:00
<00>testing_reaper<65>assert_all_closedrrr"r rqrqs<00><00> <0B><1A><1A>,<2C>,<2C>.r"c<01>b<00>t||z<00>}t||z
<00>|ksJd||dz|fz<00><00>y)Nz:Given int value %s is not within %d%% of expected value %s<>d)<02>int<6E>abs)<04>expected<65>received<65>variance<63>deviances r <00>int_within_variancer
sK<00><00><12>8<EFBFBD>h<EFBFBD>&<26>'<27>H<EFBFBD> <0B>H<EFBFBD>x<EFBFBD> <1F> <20>8<EFBFBD>+<2B><06>C<><10><10>3<EFBFBD><0E><10>G<06><06><06>+r"c<01>R<00>tj|||<03>sJ|xs|<00>d|<01><02><03><00>y)N<> !~ )rbrU)<04>a<>brL<00>flagss r <00>eq_regexr<78>s'<00><00> <0A>8<EFBFBD>8<EFBFBD>A<EFBFBD>q<EFBFBD>%<25> <20><<3C>#<23>"<<3C>q<EFBFBD>!<21>)<<3C><<3C> r"c<01>.<00>||k(sJ|xs|<00>d|<01><02><03><00>y)z.Assert a == b, with repr messaging on failure.<2E> != Nrr<00>r<>r<>rLs r <00>eq_r<5F><00><00><00> <0C><01>6<EFBFBD>-<2D>3<EFBFBD>-<2D><01>1<EFBFBD>-<2D>-<2D>6r"c<01>.<00>||k7sJ|xs|<00>d|<01><02><03><00>y)z.Assert a != b, with repr messaging on failure.z == Nrrr<>s r <00>ne_r<5F>r<>r"c<01>.<00>||ksJ|xs|<00>d|<01><02><03><00>y)z.Assert a <= b, with repr messaging on failure.r<>Nrrr<>s r <00>le_r<5F>#r<>r"c<01><<00>t||<01>sJ|xs|<00>d|<01><02><03><00>y)Nz is not an instance of <20>r$r<>s r <00>is_instance_ofr<66>(s!<00><00> <15>a<EFBFBD><11> <1B>J<>S<EFBFBD>J<>Q<EFBFBD><01>$J<>J<> r"c<01> <00>t|d|<01><01>y<00>N<>rL)<01>is_<73>r<>rLs r <00>is_noner<65>,s<00><00><07><01>4<EFBFBD>S<EFBFBD>r"c<01> <00>t|d|<01><01>yr<>)<01>is_notr<74>s r <00> is_not_noner<65>0s<00><00>
<EFBFBD>1<EFBFBD>d<EFBFBD><03>r"c<01>2<00>tt|<00>d|<01><02>y)NTr<54><00>r<><00>boolr<6C>s r <00>is_truer<65>4s<00><00><07><04>Q<EFBFBD><07><14>3<EFBFBD>r"c<01>2<00>tt|<00>d|<01><02>y)NFr<46>r<>r<>s r <00>is_falser<65>8s<00><00><07><04>Q<EFBFBD><07><15>C<EFBFBD> r"c<01>,<00>||usJ|xs|<00>d|<01><02><03><00>y)z.Assert a is b, with repr messaging on failure.z is not Nrrr<>s r r<>r<><<00><00><00> <0C><01>6<EFBFBD>1<>3<EFBFBD>1<>A<EFBFBD>q<EFBFBD>1<>1<>6r"c<01>,<00>||usJ|xs|<00>d|<01><02><03><00>y)z2Assert a is not b, with repr messaging on failure.z is Nrrr<>s r r<>r<>As<00><00> <0C>A<EFBFBD>:<3A>1<>s<EFBFBD>1<>A<EFBFBD>q<EFBFBD>1<>1<>:r"c<01>,<00>||vsJ|xs|<00>d|<01><02><03><00>y)z.Assert a in b, with repr messaging on failure.z not in Nrrr<>s r <00>in_r<5F>Jr<>r"c<01>,<00>||vsJ|xs|<00>d|<01><02><03><00>y)z2Assert a in not b, with repr messaging on failure.z is in Nrrr<>s r <00>not_inr<6E>Os<00><00> <0C>A<EFBFBD>:<3A>4<>s<EFBFBD>4<>q<EFBFBD>!<21>4<>4<>:r"c<01>F<00>|j|<01>sJ|xs|<00>d|<01><02><03><00>y)z>Assert a.startswith(fragment), with repr messaging on failure.z does not start with N)<01>
startswith)r<><00>fragmentrLs r <00> startswith_r<5F>Xs-<00><00> <0C><<3C><<3C><08> !<21><06>3<EFBFBD>$<06> <09><10>+<06><06> !r"c<01>B<00>tjdd|<00>}tjdd|<00>}tjdd|<00>}tjdd|<01>}tjdd|<01>}tjdd|<01>}||k(sJ|xs|<00>d|<01><02><03><00>y)Nz^\s+?|\n<>z {2,}<7D> z\tr<74>)rb<00>subr<62>s r <00>eq_ignore_whitespacer<65>`s<><00><00>
2025-02-23 09:07:52 +08:00
<EFBFBD><06><06>{<7B>B<EFBFBD><01>"<22>A<EFBFBD>
<EFBFBD><06><06>x<EFBFBD><13>a<EFBFBD> <20>A<EFBFBD>
<EFBFBD><06><06>u<EFBFBD>b<EFBFBD>!<21><1C>A<EFBFBD>
<EFBFBD><06><06>{<7B>B<EFBFBD><01>"<22>A<EFBFBD>
<EFBFBD><06><06>x<EFBFBD><13>a<EFBFBD> <20>A<EFBFBD>
<EFBFBD><06><06>u<EFBFBD>b<EFBFBD>!<21><1C>A<EFBFBD> <0C><01>6<EFBFBD>-<2D>3<EFBFBD>-<2D><01>1<EFBFBD>-<2D>-<2D>6r"c<01>~<00>|j|jur%|jsJd|<00>d|j<00>d<03><05><00>yy)aHassert that any exception we're catching does not have a __context__
without a __cause__, and that __suppress_context__ is never set.
Python 3 will report nested as exceptions as "during the handling of
error X, error Y occurred". That's not what we want to do. we want
these exceptions in a cause chain.
z
2025-08-29 00:34:40 +08:00
Exception z> was correctly raised but did not set a cause, within context z as its cause.N)<03> __context__<5F> __cause__<5F>__suppress_context__)rWs r <00> _assert_proper_exception_contextr<74>ksI<00><00> <12><1D><1D>Y<EFBFBD>%8<>%8<>8<><19>.<2E>.<2E>
2025-02-23 09:07:52 +08:00
<EFBFBD><19>)<29>/<2F>/<2F> 1<>
<EFBFBD>u<EFBFBD>/<2F> 9r"c<01>"<00>t||||d<01><02>S)NT<4E><01> check_context<78><01>_assert_raises<65><04>
2025-08-29 00:34:40 +08:00
except_cls<EFBFBD> callable_r0rs r <00> assert_raisesr<73><00>s<00><00> <19>*<2A>i<EFBFBD><14>r<EFBFBD><14> N<>Nr"c<01><00>t||||<03>Sr6r<>r<>s r <00>assert_raises_context_okr<6B><00>s<00><00> <19>*<2A>i<EFBFBD><14>r<EFBFBD> :<3A>:r"c<01>$<00>t|||||d<01><02>S)NT<4E>rLr<>r<><00>r<>rLr<>r0<00>kwargss r <00>assert_raises_messager<65><00>s<00><00> <19><12>I<EFBFBD>t<EFBFBD>V<EFBFBD><13>D<EFBFBD> <06>r"c<01>X<00>t|dg<01>5||i|<03><01>cddd<02>S#1swYyxYw)alegacy adapter function for functions that were previously using
2025-02-23 09:07:52 +08:00
assert_raises with SAWarning or similar.
has some workarounds to accommodate the fact that the callable completes
with this approach rather than stopping at the exception raise.
2025-08-29 00:34:40 +08:00
z.*N<>r)r<>r<>r0r<>s r <00> assert_warnsr<73><00>s)<00><00>
2025-02-23 09:07:52 +08:00
$<24>J<EFBFBD><14><06> 7<><18>$<24>)<29>&<26>)<29>
8<EFBFBD> 7<> 7<>s<00> <03>)c<01>^<00>t||gdd<02><03>5||i|<04><01>cddd<04>S#1swYyxYw)aqlegacy adapter function for functions that were previously using
assert_raises with SAWarning or similar.
has some workarounds to accommodate the fact that the callable completes
with this approach rather than stopping at the exception raise.
Also uses regex.search() to match the given message to the error string
rather than regex.match().
2025-08-29 00:34:40 +08:00
TF)rErDNr<4E>r<>s r <00>assert_warns_messager<65><00>s9<00><00>
2025-02-23 09:07:52 +08:00
$<24><12> <0C><05><17><13> 
<06> <19>$<24>)<29>&<26>)<29> 
<06>
<06>
2025-08-29 00:34:40 +08:00
<06>r>c<01>"<00>t|||||<01><01>Sr<>r<>r<>s r <00> assert_raises_message_context_okr<6B><00>s<00><00> <1A>*<2A>i<EFBFBD><14>v<EFBFBD>3<EFBFBD> G<>Gr"c<01><><00>t|||<05>5}||i|<03><01>ddd<00>|jS#1swYjSxYwr6)<02>_expect_raises<65>error)r<>r<>r0r<>rLr<><00>ecs r r<>r<><00>s<<00><00>
2025-02-23 09:07:52 +08:00
<18>
<EFBFBD>C<EFBFBD><1D> 7<>2<EFBFBD><11>4<EFBFBD>"<22>6<EFBFBD>"<22>
8<EFBFBD> <0A>8<EFBFBD>8<EFBFBD>O<EFBFBD>
8<EFBFBD> <0A>8<EFBFBD>8<EFBFBD>O<EFBFBD>s<00> +<03>?c<01><00>eZdZdZy)<02>_ErrorContainerN)<04>__name__<5F>
2025-08-29 00:34:40 +08:00
__module__<EFBFBD> __qualname__r<5F>rrr"r r<>r<><00>s<00><00> <10>Er"r<>c#<01>K<00>t|t<00>rt|t<00>st|t<00>r t d<01><00>t <00>}|rt j<00>d} |<03><02>d}~|sJd<07><00>y#|$r<>}||_d}|<01><t|<06>}tj||tj<00>s J|<01>d|<07><01><03><00>|r s t|<06>tt|<06>jd<06><00>Yd}~<06><>d}~wwxYw<01>w)NzCUse expect_warnings for warnings, not expect_raises / assert_raisesrFTr<54><00>utf-8z#Callable did not raise an exception)r$rRrS<00>Warning<6E> TypeErrorr<72><00>sys<79>exc_infor<6F>r%rbrT<00>UNICODEr<45><00>print<6E>encode)r<>rLr<>r<><00>are_we_already_in_a_traceback<63>success<73>err<72>error_as_strings r r<>r<><00>s<><00><00><><00> <13>:<3A>t<EFBFBD>$<24> <16>z<EFBFBD>7<EFBFBD> +<2B> <15>j<EFBFBD>'<27> *<2A><17> ,<2C>
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD>
2025-08-29 00:34:40 +08:00
<19> <1A>B<EFBFBD><14>(+<2B> <0C> <0C><0E>q<EFBFBD>(9<>%<25>(<28><10><08><17><07>* <0B> <13>9<>9<>9<>7<EFBFBD><37>/ <16> (<28><16><02><08><16><07> <0E>?<3F>"<22>#<23>h<EFBFBD>O<EFBFBD><15>9<EFBFBD>9<EFBFBD>S<EFBFBD>/<2F>2<EFBFBD>:<3A>:<3A>><3E> <0E><13><1F>A<0E> <0E>><3E> <19>!><3E> ,<2C>S<EFBFBD> 1<> <0A>c<EFBFBD>#<23>h<EFBFBD>o<EFBFBD>o<EFBFBD>g<EFBFBD>&<26>'<27>'<27><> (<28>s1<00>AC><01>"A3<00>( C><01>3C;<03>8A9C6<03>1C><01>6C;<03>;C>c<01><00>t||<01><01>S)Nr<4E><00>r<>)r<>r<>s r <00> expect_raisesr<73><00>s<00><00> <19>*<2A>M<EFBFBD> B<>Br"c<01><00>t|||<02><01>S)Nr<4E>r<>)r<>rLr<>s r <00>expect_raises_messager<65><00>s<00><00> <19>*<2A>#<23>]<5D> K<>Kr"c<01>><00>eZdZ dd<02>Zy)<04>AssertsCompiledSQLNc <01>V <00><08>7<EFBFBD>8<EFBFBD>| r*tj<00><00>| <0A>_|<0F>_|<0E>_n<>| rd<00><08> t |dd<00><00><08><08>t jj<00>n<><6E>dk(s<05>dk(r><3E>dk(rtj<00><00>ntjd<04><00>| <0A>_|<0F>_n[<5B>dk(rtj<00><00>nAt<00>t<00>r1tjj<00><08>j<00><00><00>|r|<14>_i}i}|r||d<|<03>t#|<03>|d<|rd|d <|rd|d
<|rd|d <|rd|d <|rd|d <|s t |dd<0F>rt$j&|d<ddlm}t||j,<00>r|j/<00>}t0|_|}|r||d<Gd<14>d<15><00>7G<00>7fd<16>d<17>}||<01>j4d0d<18>i|<18><01>}t|t6j8<00>r|j:}|r,t=|<1E>n |j?<00>}|rt=|d<00>tAt |di<00><00>}|jCd<1A>jEdd<1C>}tGdt|<1D>z|zjCd<1A><00>tIjJddt|<1D><00>} tM| || <20>d |<02>d!<21><08><02><05>|<04>G|r*|jO|d<0F>"<22>}!tM|!jP|<04>ntM|jS|<03>|<04>| <09><>|rN|jO|d<0F>"<22>}!tMtU|!jVD<00>"cgc]}"|!jP|"<00><02>c}"<22>| <09>nC|jS|d<0F>"<22>}#tMtU|jVD<00>"cgc]}"|#|"<00><02> c}"<22>| <09>|
<EFBFBD>tM|jX|
<EFBFBD>|<06><tM|jZD<00>$cic]}$|j\|$|$j^<00><02>c}$|<06>|<07><tM|j`D<00>$cic]}$|j\|$|$j^<00><02>c}$|<07>|<16>r<>t |dd<00><00>r<><72>fd#<23>}%|%d$d<0F>}&|j4d0d|&i|<18><01>}'tIjJddt|'<27><00>}|%dd<08>}(|j4d0d|(i|<18><01>})t#|)jV<00>}*|)jb}+|)j`|)jZzD]+},|)j\|,}-|-|*vs<01>|*D<00>.cgc]
}.|.|-k7s<01> |.<2E><02> }*}.<2E>-g<00>8tet"<00>}/|*D]b}. |.|/vr |/|.d%}0nd}0|+jg|.|.<2E>}1|jid&|1<>d'<27>|0<>d(z}2<>8jk|2<>|/|.jk|2<><00>dto<00>8fd+<2B>tqd,ts<00>8<EFBFBD><00>D<00><00>}4tutw<00>8|*<2A><00>D<00>5<EFBFBD>.cgc]\}5}.|.<2E><02> }6}5}.d-|*<2A>d.|6<>d/|<1B><02>}3ty|4|3<>yyycc}"wcc}"wcc}$wcc}$wcc}.w#tl$rd)|.<2E>d*|<1B><02>}3J|3<><00>wxYwcc}.}5w)1N<31> __dialect__r<00> default_qmark<72>qmark<72>default_enhanced<65>schema_translate_map<61> column_keysT<73> literal_binds<64>render_postcompile<6C>"use_literal_execute_for_simple_int<6E>for_executemany<6E>render_schema_translate<74>assert_from_lintingF<67>lintingr)<01>orm<72>compile_kwargsc<01><00>eZdZd<01>Zy)<03>5AssertsCompiledSQL.assert_compile.<locals>.DontAccessc<01><00>td<01><00>)Nz=compiler accessed .statement; use compiler.current_executable)<01>NotImplementedError)<02>self<6C>keys r <00>__getattribute__zFAssertsCompiledSQL.assert_compile.<locals>.DontAccess.__getattribute__Qs<00><00>)<29>2<><12>r"N)r<>r<>r<>rrrr"r <00>
DontAccessr<EFBFBD>Ps<00><00> r"rc<01>@<00><01>eZdZd<01>Zed<02><00>Zd<03>Zd<04>Zd<05>Z<08>fd<06>Z y)<08>>AssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccessc<01>0<00>||_i|_t|dd<02>|_|jrj|j|_t |d<03>r|j |_t |d<04>r|j|_t |d<05>r|j|_yyy)N<>supports_executionF<6E>
_returning<EFBFBD>_inline<6E>_return_defaults) <09>test_statement<6E> _annotations<6E>getattrr<00>_execution_options<6E>hasattrrrr)r<>r s r <00>__init__zGAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess.__init__Xs<><00><00>&4<><04>#<23>$&<26><04>!<21>*1<>"<22>$8<>%<25>+<12><04>'<27><18>*<2A>*<2A>.<<3C>.O<>.O<>D<EFBFBD>+<2B><1E>~<7E>|<7C><<3C>*8<>*C<>*C<><04><0F><1E>~<7E>y<EFBFBD>9<>'5<>'=<3D>'=<3D><04> <0C><1E>~<7E>/A<>B<>0><3E>0O<30>0O<30><04>-<2D>C<01>+r"c<01>.<00>|jjSr6)r <00>_variant_mapping<6E>r<>s r rzOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._variant_mappingis<00><00><1B>*<2A>*<2A>;<3B>;<3B>;r"c<01>6<00>|jj<00>Sr6)r <00>_default_dialectrs r rzOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._default_dialectms<00><00><1B>*<2A>*<2A>;<3B>;<3B>=<3D>=r"c<01>T<00>|jjj|fd|i|<02><01>S)N<>dialect)r rc<00>__func__<5F>r<>rrs r rczFAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess.compileps6<00><00>;<3B>t<EFBFBD>*<2A>*<2A>2<>2<>;<3B>;<3B><18><12>")<29><12>-/<2F><12>r"c<01>R<00>|jjj||fi|<02><01>Sr6)r <00> _compilerrrs r rzHAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compilerus0<00><00>=<3D>t<EFBFBD>*<2A>*<2A>4<>4<>=<3D>=<3D><18>'<27><12>%'<27><12>r"c<01><00><01>t|d<01>rMtjj|d<00><03><00>5|jj
2025-02-23 09:07:52 +08:00
|fi|<02><01>cddd<00>S|jj
2025-08-29 00:34:40 +08:00
|fi|<02><01>S#1swYyxYw)N<> statement)r r rn<00>objectr <00>_compiler_dispatch)r<><00>compilerr<72>rs <20>r rzQAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compiler_dispatchzs<><00><><00><1A>8<EFBFBD>[<5B>1<><1D><1A><1A>*<2A>*<2A> <20>+<2B>z<EFBFBD>|<7C><16> F<01>t<EFBFBD>2<>2<>E<>E<>$<24> <1A>(.<2E> <1A><16><16>B<01>4<EFBFBD>.<2E>.<2E>A<>A<> <20><16>$*<2A><16><16><16><16>s <00>A8<03>8BN)
r<EFBFBD>r<>r<>r<00>propertyrrrcrr)rs<00>r <00>CheckCompilerAccessrWs1<00><><00> P<01>"<16> <<3C><16> <<3C> ><3E> <12>
2025-02-23 09:07:52 +08:00
 <12>
2025-08-29 00:34:40 +08:00
r"r r<00>paramsr<73><00>ascii<69>ignorez
2025-02-23 09:07:52 +08:00
SQL String:
2025-08-29 00:34:40 +08:00
z[\n\t]r<>r<>z on dialect )<01> escape_namesc<01>:<00><01>t<00><03>}||_||_|Sr6)r<00>
2025-02-23 09:07:52 +08:00
paramstyle<EFBFBD>
2025-08-29 00:34:40 +08:00
positional)r&r'<00>cprs <20>r <00> get_dialectz6AssertsCompiledSQL.assert_compile.<locals>.get_dialect<63>s<00><><00><19>'<27>]<5D><02> *<2A><02> <0A> *<2A><02> <0A><19> r"<00>pyformat<61><74><EFBFBD><EFBFBD><EFBFBD>z%(z)srzExpected to find bindparam z in c3<01>:<00>K<00>|]}<01>|dz
<00>|k<00><01><00>y<01>w)rNrr)r_<00>i<> positionss <20>r raz4AssertsCompiledSQL.assert_compile.<locals>.<genexpr><3E>s+<00><><00><><00><0E>1<>A<EFBFBD><1A>!<21>a<EFBFBD>%<25> <20>9<EFBFBD>Q<EFBFBD><<3C>/<2F>1<>s<00>rzOrder of parameters z+ does not match the order in the statement z . Statement rr)=r<00>DefaultDialect<63>supports_default_values<65>supports_default_metavalue<75>supports_native_booleanr r r'r<00>StrCompileDialectr$r%r<00>URL<52>creater)<00>default_schema_namerfr<00> FROM_LINTING<4E>
sqlalchemyr<EFBFBD><00>Query<72> _statement_20r<00> _label_stylerc<00>sqltypes<65>
TypeEngine<EFBFBD>_static_cache_key<65>hash<73>_generate_cache_key<65>reprr<72><00>decoder<65>rbr<>r<><00>construct_expanded_state<74>
2025-02-23 09:07:52 +08:00
parameters<EFBFBD>construct_params<6D>tuple<6C> positiontup<75>prefetch<63>literal_execute_params<6D>
bind_names<EFBFBD>effective_value<75>post_compile_params<6D>escaped_bind_namesr<00>get<65>index<65>append<6E>
2025-08-29 00:34:40 +08:00
ValueError<EFBFBD>all<6C>range<67>len<65>sorted<65>zipr<70>)9r<39><00>clause<73>resultr!<00> checkparamsr<73><00>check_literal_execute<74>check_post_paramr<00>checkpositional<61>check_prefetch<63>use_default_dialect<63>allow_dialect_selectr0r2r1r<>r<>r<>r<>r6<00> from_linting<6E>check_param_orderr<72>rr<>r<><00>stmtr <00>c<>cache_key_no_warnings<67> param_str<74>cc<63>expanded_state<74>x<>pr<70>r)<00>pyformat_dialect<63>
2025-02-23 09:07:52 +08:00
pyformat_c<EFBFBD> qmark_dialect<63>qmark_c<5F>values<65>escaped<65>
2025-08-29 00:34:40 +08:00
post_param<EFBFBD>name<6D>v<> pos_by_value<75>start<72>esc<73>posrL<00>ordered<65>_r{rr.s9 ` @@r <00>assert_compilez!AssertsCompiledSQL.assert_compile<6C>sg<00><><00>4 <1F><1D>,<2C>,<2C>.<2E>G<EFBFBD>.E<>G<EFBFBD> +<2B>1K<31>G<EFBFBD> .<2E>.E<>G<EFBFBD> +<2B> !<21><1A>G<EFBFBD><16><EFBFBD>!<21>$<24> <0A>t<EFBFBD><<3C><07><16><EFBFBD> <20>)<29>)<29>+<2B>+<2B><07><18>I<EFBFBD>%<25><17>O<EFBFBD>)C<><1A>i<EFBFBD>'<27>%<25>4<>4<>6<>G<EFBFBD>%<25>4<>4<>W<EFBFBD>=<3D>G<EFBFBD>2I<32><07>/<2F>5O<35><07>2<><18>.<2E>.<2E>!<21>3<>3<>5<><07><1B>G<EFBFBD>S<EFBFBD>)<29><1D>'<27>'<27>.<2E>.<2E><17>1<>=<3D>=<3D>?<3F>A<><07> <1E>*=<3D>G<EFBFBD> '<27> <0F><02><1B><0E> <1F>)=<3D>B<EFBFBD>%<25> &<26> <11> <1D> $<24>V<EFBFBD> <0C>B<EFBFBD>}<7D> <1D> <18>.2<EFBFBD>N<EFBFBD>?<3F> +<2B> <1D>37<33>N<EFBFBD>/<2F> 0<> -<2D>CG<43>N<EFBFBD>?<3F> @<40> <1A>$(<28>B<EFBFBD> <20> !<21> "<22>,0<>B<EFBFBD>(<28> )<29> <17>7<EFBFBD>4<EFBFBD>)><3E><05>F<><1F>,<2C>,<2C>B<EFBFBD>y<EFBFBD>M<EFBFBD>"<22> <15>f<EFBFBD>c<EFBFBD>i<EFBFBD>i<EFBFBD> (<28><19>'<27>'<27>)<29>D<EFBFBD> ><3E>D<EFBFBD> <1D><19>F<EFBFBD> <19>#1<>B<EFBFBD><1F> <20> <12> <12>. <16>. <16>f 0<> <1F><06> '<27> /<2F> /<2F> F<><07> F<>2<EFBFBD> F<><01> <15>f<EFBFBD>h<EFBFBD>1<>1<> 2<>$*<2A>$<<3C>$<<3C> !<21>$<24><14>*<2A>+<2B>$*<2A>$><3E>$><3E>$@<40> !<21>$<24><14>*<2A>1<EFBFBD>-<2D>.<2E><18><17><11>H<EFBFBD>b<EFBFBD>1<>2<> <09><1D>$<24>$<24>W<EFBFBD>-<2D>4<>4<>W<EFBFBD>h<EFBFBD>G<> <09> <0A> <20>3<EFBFBD>q<EFBFBD>6<EFBFBD>)<29>I<EFBFBD>5<>=<3D>=<3D>g<EFBFBD>F<>G<> <0F>V<EFBFBD>V<EFBFBD>I<EFBFBD>r<EFBFBD>3<EFBFBD>q<EFBFBD>6<EFBFBD> *<2A><02> <0B>B<EFBFBD><06>B<EFBFBD><06><07>H<>I<> <16> "<22>!<21>!"<22>!;<3B>!;<3B><1A><15>"<<3C>"<12><0E><14>N<EFBFBD>-<2D>-<2D>{<7B>;<3B><13>A<EFBFBD>&<26>&<26>v<EFBFBD>.<2E> <0B><<3C> <1A> &<26>!<21>!"<22>!;<3B>!;<3B><1A><15>"<<3C>"<12><0E><14><19>&4<>%?<3F>%?<3F><1A>%?<3F><01>+<2B>5<>5<>a<EFBFBD>8<>%?<3F><1A><16> $<24><12><16>&<26>&<26>v<EFBFBD>E<EFBFBD>&<26>B<><01><13>E<EFBFBD><11><1D><1D>7<><1D>A<EFBFBD>1<EFBFBD>Q<EFBFBD>4<EFBFBD><1D>7<>8<>/<2F>J<> <19> %<25> <0F><01>
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD>N<EFBFBD> +<2B> <20> ,<2C> <0F><1F>5<>5<><12>5<><01><16>L<EFBFBD>L<EFBFBD><11>O<EFBFBD>Q<EFBFBD>%6<>%6<>6<>5<><12>&<26>  <0E> <1C> '<27> <0F><1F>2<>2<><12>2<><01><16>L<EFBFBD>L<EFBFBD><11>O<EFBFBD>Q<EFBFBD>%6<>%6<>6<>2<><12>!<21>  <0E> <1D><17><11>H<EFBFBD>d<EFBFBD>!;<3B> <1A> +<2B>:<3A>u<EFBFBD>=<3D> <1C>'<27><16><1E><1E>G<>0@<40>G<>B<EFBFBD>G<>J<EFBFBD><15>6<EFBFBD>6<EFBFBD>)<29>R<EFBFBD><13>Z<EFBFBD><1F>9<>D<EFBFBD>'<27><07><14>6<>M<EFBFBD>$<24>f<EFBFBD>n<EFBFBD>n<EFBFBD>A<>]<5D>A<>b<EFBFBD>A<>G<EFBFBD><19>'<27>-<2D>-<2D>.<2E>F<EFBFBD><1D>0<>0<>G<EFBFBD><18>+<2B>+<2B>g<EFBFBD>.L<>.L<>L<><1B><1F>)<29>)<29>*<2A>5<><04><17>6<EFBFBD>><3E>)/<2F>=<3D><16>A<EFBFBD>1<EFBFBD><04>9<EFBFBD>a<EFBFBD><16>F<EFBFBD>=<3D> M<01>
<1B>I<EFBFBD>&<26>t<EFBFBD>,<2C>L<EFBFBD><1B><01> &<26><18>L<EFBFBD>(<28> ,<2C>Q<EFBFBD><0F><02> 3<><05> !<21><05>!<21>+<2B>+<2B>a<EFBFBD><11>+<2B>C<EFBFBD><1E>*<2A>*<2A>#<23>%7<><15>?<3F>!<21>C<>C<EFBFBD><1D>$<24>$<24>S<EFBFBD>)<29> <20><11>O<EFBFBD>*<2A>*<2A>3<EFBFBD>/<2F><1C><1A><0E><1E>q<EFBFBD>#<23>i<EFBFBD>.<2E>1<><0E><0E>G<EFBFBD>
'-<2D>S<EFBFBD><19>F<EFBFBD>-C<>&D<>E<>&D<>d<EFBFBD>a<EFBFBD><11><01>&D<>H<EFBFBD>E<>8><3E>x<EFBFBD><14>O<01> <10>
<14>G<EFBFBD>S<EFBFBD> !<21>g"<<3C> <1C><>9<1A><>8<><38>
2025-08-29 00:34:40 +08:00
<12><><12><>8><3E><>"<22>&<26>CD<43>d<EFBFBD>K<>C<EFBFBD>%<25>#<23>%<25>5<EFBFBD>&<26><>Fs7<00>>W0 <0C> W5 <0C>!W:<08>!W?<08>=
X<06>X<06>'AX <02> X%<06> X")NNFNNNNNFFTFTFFNFNFTF)r<>r<>r<>ryrrr"r r<>r<><00>sI<00><00>
<14><18><1D>"<22><1D><14><1C><1B>!<21>"<22> $<24> %<25>#'<27><1B> <20>!<21> %<25> <20><1A><1E>+0<>1F"r"r<>c<01><00>eZdZ dd<01>Zd<02>Zy)<05>ComparesTablesc<01>2<00>t|j<00>t|j<00>k(sJ<00>t|j|j<00>D<00>]<5D>\}}t|j|j<00>||j|jusJ<00>|r@t|j
2025-02-23 09:07:52 +08:00
|j
<00>t|j |j <00>|rKd}t|jt|j<00><00>s2J||j|jfz<00><00>|j||<05>t|jtj<00>r4t|jj|jj<00>|rdt|jD<00>chc]}|jj<00><02>c}|jD<00>chc]}|jj<00><02>c}<08>|js<02><01><>t|jt j"<00>r<02><01><>J<00>|rdt|j
<00>t|j
<00>k(sJ<00>|j
D]'}|j
2025-08-29 00:34:40 +08:00
j$|j<00><01>'J<00>yycc}wcc}w)Nz)Type '%s' doesn't correspond to type '%s')rTrcrVr<>rq<00> primary_key<65>nullabler$rR<00>assert_types_baser<<00>String<6E>length<74> foreign_keys<79>column<6D>server_defaultr<00> FetchedValue<75>columns) r<><00>table<6C>reflected_table<6C> strict_types<65>strict_constraintsrc<00> reflected_crL<00>fs r <00>assert_tables_equalz"ComparesTables.assert_tables_equal<61>s <00><00><13>5<EFBFBD>7<EFBFBD>7<EFBFBD>|<7C>s<EFBFBD>?<3F>#4<>#4<>5<>5<>5<>5<>!<21>%<25>'<27>'<27>?<3F>+<<3C>+<<3C>=<3D>N<EFBFBD>A<EFBFBD>{<7B> <0F><01><06><06> <0B>(<28>(<28> )<29><1E>/<2F>"3<>"3<>A<EFBFBD>F<EFBFBD>F<EFBFBD>";<3B>;<3B> ;<3B>;<3B>!<21><13>A<EFBFBD>M<EFBFBD>M<EFBFBD>;<3B>#:<3A>#:<3A>;<3B><13>A<EFBFBD>J<EFBFBD>J<EFBFBD> <0B> 4<> 4<>5<><1B>A<><03>!<21>+<2B>"2<>"2<>D<EFBFBD><11><16><16>L<EFBFBD>A<><12>3<EFBFBD><1F>$<24>$<24><15>F<EFBFBD>F<EFBFBD>J<12>D<12><12>A<>
2025-02-23 09:07:52 +08:00
<15>&<26>&<26>{<7B>A<EFBFBD>6<><19>!<21>&<26>&<26>(<28>/<2F>/<2F>2<><13>A<EFBFBD>F<EFBFBD>F<EFBFBD>M<EFBFBD>M<EFBFBD>;<3B>#3<>#3<>#:<3A>#:<3A>;<3B>!<21><13>,-<2D>N<EFBFBD>N<EFBFBD>;<3B>N<EFBFBD>q<EFBFBD>Q<EFBFBD>X<EFBFBD>X<EFBFBD>]<5D>]<5D>N<EFBFBD>;<3B>,7<>,D<>,D<>E<>,D<>q<EFBFBD>Q<EFBFBD>X<EFBFBD>X<EFBFBD>]<5D>]<5D>,D<>E<><12><11><1F><1F>!<21><1F>.<2E>.<2E><06>0C<30>0C<30><12><12><12>5><3E>< <1E><16>u<EFBFBD>(<28>(<28>)<29>S<EFBFBD><1F>1L<31>1L<31>-M<>M<> M<>M<><1A>&<26>&<26><01>&<26>2<>2<>:<3A>:<3A>1<EFBFBD>6<EFBFBD>6<EFBFBD>B<>N<>N<>N<>'<27> <1E><><<3C><>Es <00> J
<EFBFBD> J c<01><><00>|jj|j<00>s/Jd|j<00>d|j<00>d|j<00>d<04><07><00>y)Nz
2025-08-29 00:34:40 +08:00
On column z, type 'z' doesn't correspond to type '<27>')rR<00>_compare_type_affinityrq)r<><00>c1<63>c2s r rz ComparesTables.assert_types_base*sF<00><00><11>w<EFBFBD>w<EFBFBD>-<2D>-<2D> <0E>G<EFBFBD>G<EFBFBD>
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD> <0F>G<EFBFBD>G<EFBFBD> <0E>G<EFBFBD>G<EFBFBD> <0E>G<EFBFBD>G<EFBFBD>
<EFBFBD>
<EFBFBD>
2025-08-29 00:34:40 +08:00
r"N)FT)r<>r<>r<>r<>rrrr"r r{r{<00>s<00><00>
2025-02-23 09:07:52 +08:00
<1B><1F> )O<01>V
2025-08-29 00:34:40 +08:00
r"r{c<01><><00>eZdZd<01>Zd<02>Zd<03>Zd<04>Zd d<06>Zd<07>Zd<08>Z d <09>Z
2025-02-23 09:07:52 +08:00
e jd
2025-08-29 00:34:40 +08:00
<EFBFBD><00>Z d <0B>Ze jd <0C><00>Zy)<0E>AssertsExecutionResultsc<01>h<00>t|<01>}tt|<01><00>|j|||<03>yr6)rfr<>rA<00> assert_list)r<>rX<00>class_<73>objectss r <00> assert_resultz%AssertsExecutionResults.assert_result5s)<00><00><15>f<EFBFBD><1C><06> <0A>d<EFBFBD>6<EFBFBD>l<EFBFBD><1B> <0C><18><18><16><16><17>1r"c<01><><00>|jt|<01>t|<03>k(d|jz<00>tdt|<03><00>D]}|j |||||<00><00>y)Nz9result list is not the same size as test list, for class r)r-rTr<>rS<00>
assert_row)r<>rXr<><00>list_r-s r r<>z#AssertsExecutionResults.assert_list:s^<00><00> <0C> <0C> <0C> <0F><06>K<EFBFBD>3<EFBFBD>u<EFBFBD>:<3A> %<25> <1B><14>o<EFBFBD>o<EFBFBD> <1E>
2025-02-23 09:07:52 +08:00
<EFBFBD> <17>q<EFBFBD>#<23>e<EFBFBD>*<2A>%<25>A<EFBFBD> <10>O<EFBFBD>O<EFBFBD>F<EFBFBD>F<EFBFBD>1<EFBFBD>I<EFBFBD>u<EFBFBD>Q<EFBFBD>x<EFBFBD> 8<>&r"c <01><><00>|j|j|udt|<01>z<00>|j<00>D]<5D>\}}t |t
<00>r[t |dt <00>r$|jt||<04>|d|d<00><00>M|j|dt||<04>|d<00><00>q|jt||<04>|k(d|<04>dt||<04><00>d|<05><01><06><00><>y)Nzitem class is not rrz
attribute z value z does not match )
2025-08-29 00:34:40 +08:00
r-<00> __class__rA<00>itemsr$rFrfr<>r r<>)r<>r<><00>rowobj<62>descr<63><00>values r r<>z"AssertsExecutionResults.assert_rowDs<><00><00> <0C> <0C> <0C> <12> <1C> <1C><06> &<26>(<<3C>t<EFBFBD>F<EFBFBD>|<7C>(K<>
2025-02-23 09:07:52 +08:00
<EFBFBD><1F>*<2A>*<2A>,<2C>J<EFBFBD>C<EFBFBD><15><19>%<25><15>'<27><1D>e<EFBFBD>A<EFBFBD>h<EFBFBD><04>-<2D><18>$<24>$<24>W<EFBFBD>V<EFBFBD>S<EFBFBD>%9<>5<EFBFBD><11>8<EFBFBD>U<EFBFBD>1<EFBFBD>X<EFBFBD>N<><18>O<EFBFBD>O<EFBFBD>E<EFBFBD>!<21>H<EFBFBD>g<EFBFBD>f<EFBFBD>c<EFBFBD>.B<>E<EFBFBD>!<21>H<EFBFBD>M<><14> <0C> <0C><1B>F<EFBFBD>C<EFBFBD>(<28>E<EFBFBD>1<><1A>G<EFBFBD>F<EFBFBD>C<EFBFBD>0<>%<25>9<><12>'r"c <01>@<00><00><02> <0B>Gd<01>dt<00>}tj|<01>}|D<00>chc]
}||<06><00><02> }}t<00>fd<03>|<05>D]1}t dt |<07>j <00>d<05>j <00>d<06><05><00>3t|<05>t|<03>k7r$t dt|<05><00>dt|<03><00>d<06><05>t<00><00> <0B> <0B>fd<08>}|D]J} |D]}
||
| <09>s<01> |j|
<EFBFBD><00>%t d <09>j <00>d
t| <09><00>d <0B><05><00>Ly cc}w) z<>As assert_result, but the order of objects is not considered.
The algorithm is very expensive but not a big deal for the small
numbers of rows that the test suite manipulates.
2025-08-29 00:34:40 +08:00
c<01><00>eZdZd<01>Zy)<03>FAssertsExecutionResults.assert_unordered_result.<locals>.immutabledictc<01><00>t|<00>Sr6)<01>idrs r <00>__hash__zOAssertsExecutionResults.assert_unordered_result.<locals>.immutabledict.__hash__]s <00><00><19>$<24>x<EFBFBD>r"N)r<>r<>r<>r<>rrr"r <00> immutabledictr<74>\s<00><00> r"r<>c<01><00><01>t|<00><01>Sr6r<>)<02>o<>clss <20>r <00><lambda>zAAssertsExecutionResults.assert_unordered_result.<locals>.<lambda>cs <00><><00>:<3A>a<EFBFBD><13>+=r"zUnexpected type "z ", expected "<22>"zUnexpected object count "c<01><><00><02>|j<00>D]M\}}t|t<00>r& <00>jt ||<02>|dg|d<00><01><06><00><t ||<02><04>|k7s<01>Myy#t
$rYywxYw)NrrFT)r<>r$rF<00>assert_unordered_resultr rK)<06>objr(r<>r<><00>NOVALUEr<45>s <20><>r <00> _compare_itemzFAssertsExecutionResults.assert_unordered_result.<locals>._compare_itemqs<><00><><00>"<22>j<EFBFBD>j<EFBFBD>l<EFBFBD>
<EFBFBD><03>U<EFBFBD><1D>e<EFBFBD>U<EFBFBD>+<2B>%<25>4<><04>4<>4<>#<23>C<EFBFBD><13>-<2D>u<EFBFBD>Q<EFBFBD>x<EFBFBD><1A>:?<3F><01>(<28><1A> <1F>s<EFBFBD>C<EFBFBD><17>1<>U<EFBFBD>:<3A>$<24>+<2B><18><> *<2A>%<25>$<24>%<25>s<00>$A#<02># A0<05>/A0z Expected z instance with attributes z not found.T) <0B>dictr<00> IdentitySetrr rRr<>rTr<00>removerA) r<>rXr<>r{r<><00>found<6E>e<>wrongr<67><00> expected_item<65>
found_itemr<EFBFBD>s ` ` @r r<>z/AssertsExecutionResults.assert_unordered_resultUs<><00><><00> <20>D<EFBFBD> <20><15> <20> <20><16>(<28><05>.6<EFBFBD>7<>h<EFBFBD><11>M<EFBFBD>!<21>$<24>h<EFBFBD><08>7<> <20>!=<3D>u<EFBFBD>E<>E<EFBFBD> <10><17><05>;<3B>'<27>'<27><13><1C><1C>7<> <0E>F<01> <0F>u<EFBFBD>:<3A><13>X<EFBFBD><1D> &<26> <10><16>u<EFBFBD>:<3A>s<EFBFBD>8<EFBFBD>}<7D>.<2E> <0E>
2025-02-23 09:07:52 +08:00
<19>(<28><07> <18>&<26>M<EFBFBD>#<23>
<EFBFBD> <20><1A>]<5D>;<3B><19>L<EFBFBD>L<EFBFBD><1A>,<2C><19>$<24>
2025-08-29 00:34:40 +08:00
<15><1A>|<7C>|<7C>T<EFBFBD>-<2D>%8<>:<3A><12> &<26><14><>Q8s<00>DNc<01><<00>|<01>ddlm}tj|<01>S)Nr)r')r<>r'r<00> assert_engine)r<>r's r <00>sql_execution_asserterz.AssertsExecutionResults.sql_execution_asserter<65>s<00><00> <0A>:<3A> "<22><18>&<26>&<26>r<EFBFBD>*<2A>*r"c<01>~<00>|j|<01>5}|<02>}ddd<00>j|<03>S#1swY<00>xYwr6<00>r<>r-)r<>r'r<><00>rules<65>asserterrXs r <00>assert_sql_executionz,AssertsExecutionResults.assert_sql_execution<6F>s<<00><00> <11> (<28> (<28><12> ,<2C><08><1E>[<5B>F<EFBFBD>-<2D><18><08><18><18>%<25> <20><15> <0A>-<2D> ,<2C>s<00>3<03><c <01>><00>g}|D]}}t|t<00>rHtj|j <00>D<00><06>cgc]\}}tj
2025-02-23 09:07:52 +08:00
||<07><00><02>c}}<06>}ntj
2025-08-29 00:34:40 +08:00
|<05>}|j |<08><00>|j||g|<04><01><06>Scc}}wr6)r$r<>r<00>AllOfr<66><00> CompiledSQLrPr<>) r<>r'r<>r<><00>newrules<65>rule<6C>krr<00>newrules r <00>
assert_sqlz"AssertsExecutionResults.assert_sql<71>s<><00><00><15><08><19>D<EFBFBD><19>$<24><04>%<25>#<23>/<2F>/<2F>>B<>j<EFBFBD>j<EFBFBD>l<EFBFBD>K<>l<EFBFBD>d<EFBFBD>a<EFBFBD><11>i<EFBFBD>+<2B>+<2B>A<EFBFBD>q<EFBFBD>1<>l<EFBFBD>K<><12><07>$<24>/<2F>/<2F><14>6<><07> <14>O<EFBFBD>O<EFBFBD>G<EFBFBD> $<24><1A>)<29>t<EFBFBD>(<28>(<28><12>Y<EFBFBD>B<><18>B<>B<><42> Ls<00> B c<01>N<00>|j||tj|<03><00>Sr6)r<>r<00>CountStatements)r<>r'r<><00>counts r <00>assert_sql_countz(AssertsExecutionResults.assert_sql_count<6E>s'<00><00><13>(<28>(<28> <0E> <09>9<EFBFBD>4<>4<>U<EFBFBD>;<3B>
2025-02-23 09:07:52 +08:00
<EFBFBD>
2025-08-29 00:34:40 +08:00
r"c'<01>~K<00>|j|<01>5}d<00><02>ddd<00>j|<02>y#1swY<00>xYw<01>wr6r<>)r<>r'r<>r<>s r <00>assert_executionz(AssertsExecutionResults.assert_execution<6F>s6<00><00><><00> <11> (<28> (<28><12> ,<2C><08> <11>-<2D><18><08><18><18>%<25> <20>-<2D> ,<2C>s<00>=<01>1<03>=<01>:<07>=c<01>L<00>|j|tj|<02><00>Sr6)r<>rr<>)r<>r'r<>s r <00>assert_statement_countz.AssertsExecutionResults.assert_statement_count<6E>s <00><00><13>$<24>$<24>R<EFBFBD><19>)B<>)B<>5<EFBFBD>)I<>J<>Jr"c#<01> K<00>t||<02>D<00><03>cgc]\}}|j|<03>||f<03><02>}}}g}|D]%\}}}|j|j<00><00><00>' d<00><02>t||<05>D]@\}\}}}|j ddd<00>|j t j|<04><00><00>Bycc}}w#t||<05>D]@\}\}}}|j ddd<00>|j t j|<04><00><00>BwxYw<01>wr6)rVr<>rP<00> __enter__<5F>__exit__r-rr<>) r<><00>dbs<62>countsr'r<><00>recs<63> asserters<72>ctxr<78>s r <00>assert_statement_count_multi_dbz7AssertsExecutionResults.assert_statement_count_multi_db<64>s<00><00><><00> #<23>3<EFBFBD><06>/<2F>
2025-02-23 09:07:52 +08:00
<EFBFBD>/<2F> <0B><12>U<EFBFBD><12> (<28> (<28><12> ,<2C>b<EFBFBD>%<25> 8<>/<2F> <0A>
<EFBFBD><17> <09>"<22>N<EFBFBD>C<EFBFBD><12>U<EFBFBD> <15> <1C> <1C>S<EFBFBD>]<5D>]<5D>_<EFBFBD> -<2D>#<23> C<01> <11>.1<EFBFBD>)<29>T<EFBFBD>.B<>*<2A><08>*<2A>3<EFBFBD><02>E<EFBFBD><13> <0C> <0C>T<EFBFBD>4<EFBFBD><14>.<2E><18> <20> <20><19>!:<3A>!:<3A>5<EFBFBD>!A<>B<>/C<01><>
2025-08-29 00:34:40 +08:00
<EFBFBD><EFBFBD>/2<>)<29>T<EFBFBD>.B<>*<2A><08>*<2A>3<EFBFBD><02>E<EFBFBD><13> <0C> <0C>T<EFBFBD>4<EFBFBD><14>.<2E><18> <20> <20><19>!:<3A>!:<3A>5<EFBFBD>!A<>B<>/C<01>s)<00>D<01>B4<06>/D<01> B:<00>$AD<01>:AD <03> Dr6)r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<><00>
contextlib<EFBFBD>contextmanagerr<72>r<>r<>rrr"r r<>r<>4sh<00><00>2<>
2025-02-23 09:07:52 +08:00
9<><12>"4<14>l+<2B> <16> C<01>
<EFBFBD>
<10><1E><1E>!<21><1F>!<21>
2025-08-29 00:34:40 +08:00
K<01><10><1E><1E> C<01><1F> Cr"r<>c<01> <00>eZdZ dd<01>Zy)<04>ComparesIndexesc<01>0<00>tt|j<00>t|<02><00>|jD<00>cic]}|j|<04><02>}}|D<00>]:}||d}t|j|d<00>|dD<00>cgc]}|<07><01>|<07><02> }}tt|j
2025-02-23 09:07:52 +08:00
<00>t|<08><00>|D]}t ||j
v<00><00>|jd<04>} | rdtt|j<00>t| <09><00>t|j| |d<00>D]\}
} } | <0C><01>
t|
j| <0B><00>!|jd<05>s<02><01>
2025-08-29 00:34:40 +08:00
|<03>d<06>|dvs<02><01>t|j|d|d|<03>d<06><00><00><01>=ycc}wcc}w)Nrq<00>unique<75> column_names<65> expressions<6E>dialect_options<6E>_include<64>include) r<>rT<00>indexesrqr<>r<>r<>rNr<>rV<00>textr<74>) r<>r<>r{<00> dialect_name<6D>idx<64>idx_dict<63>exprc<00>cols<6C>exprs<72>idx_exp<78>expr<70>cols r <00>!compare_table_index_with_expectedz1ComparesIndexes.compare_table_index_with_expected<65>sx<00><00> <0C>C<EFBFBD><05> <0A> <0A> <1E><03>H<EFBFBD> <0A>.<2E>-2<>]<5D>]<5D>;<3B>]<5D>c<EFBFBD>C<EFBFBD>H<EFBFBD>H<EFBFBD>c<EFBFBD>M<EFBFBD>]<5D><08>;<3B><1B>C<EFBFBD><1A>3<EFBFBD>v<EFBFBD>;<3B>'<27>C<EFBFBD> <0F><03>
2025-02-23 09:07:52 +08:00
<EFBFBD>
2025-08-29 00:34:40 +08:00
<EFBFBD>C<EFBFBD><08>M<EFBFBD> *<2A>"<22>><3E>2<>D<>2<>!<21>a<EFBFBD>m<EFBFBD>A<EFBFBD>2<>D<EFBFBD>D<> <0F><03>C<EFBFBD>K<EFBFBD>K<EFBFBD> <20>#<23>d<EFBFBD>)<29> ,<2C><19><01><17><01>S<EFBFBD>[<5B>[<5B>(<28>)<29><1A><17>G<EFBFBD>G<EFBFBD>M<EFBFBD>*<2A>E<EFBFBD><14><13>C<EFBFBD><03><0F><0F>(<28>#<23>e<EFBFBD>*<2A>5<>*-<2D><17>O<EFBFBD>O<EFBFBD>U<EFBFBD>C<EFBFBD><0E>,?<3F>+<12>&<26>G<EFBFBD>T<EFBFBD>3<EFBFBD><1B>{<7B><1B>G<EFBFBD>L<EFBFBD>L<EFBFBD>$<24>/<2F> +<12> <14><07><07>)<29>*<2A>#<23>n<EFBFBD>H<EFBFBD>-<2D><13>5F<35>1G<31>G<><13><17>'<27>'<27> <0C>5<>i<EFBFBD>@<40><17>)<29>*<2A>l<EFBFBD>^<5E>8<EFBFBD>+D<>E<><12>'<1C><><<3C><>Es<00>F<04>;F<06>FN)r<>z schema.Tabler{rfr<>r%)r<>r<>r<>r<>rrr"r r<>r<><00>s<00><00><12>!<21><12>-1<><12>AD<41>r"r<>)TFT)TFTFFrPr6)NF)T)Q<>
__future__r<00> collectionsrr<>r<00> itertoolsrrbr<>rlr<>rr r
2025-02-23 09:07:52 +08:00
r <00>
2025-08-29 00:34:40 +08:00
exclusionsr rr rrrrrr<<00>enginerr<00>sql.selectablerrr!r<>r)r4r8r;r?rBrgrhrQrrGrsrqrr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<><00>is_not_r<5F>r<><00>not_in_r<5F>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r{r<>r<>rrr"r <00><module>r<>s<><00><01>#<23>#<23><11><15>!<21> <09>
<EFBFBD><0F><17><14><15><12><1F><16><1C><15><12> <20><13><1C><18>;<3B><1C> H<01>  <0C><1A><1A> <12><1B> <12> <14> <06> <06> <14>(<14>0 <10><08> <0C><05> <0F><08> <0F><14> <10> <06>. <0C><1A><1A> <0F><14> <10>!<21> <20>M<16><1B>M<16>`(<28>/<2F><06>=<3D>.<2E>
2025-02-23 09:07:52 +08:00
.<2E>
.<2E>
K<01><1A><1D> <20>!<21>2<>
2<> <11><07>2<>
5<> <11><07><06>.<2E>
<EFBFBD>*O<01>;<3B><06>
2025-08-29 00:34:40 +08:00
*<2A>*<2A>(H<01>BG<01><14><11><11> <0C><1A><1A>':<3A><1B>':<3A>TC<01>L<01>G"<22>G"<22>T3
2025-02-23 09:07:52 +08:00
<EFBFBD>3
<EFBFBD>lLC<01>LC<01>^<12>r"