B 4]V4 @sRddlZddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z Gd d d eZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d ed d!d"d#d$gZGd%d&d&eZejd'd(ZdS))N)event)util)url)DefaultDialect)_distill_params) _DDLCompilesc@s(eZdZdZdZdZddZddZdS) AssertRuleFNTcCsdS)N)selfexecute_observedr r O/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/testing/assertsql.pyprocess_statementszAssertRule.process_statementcCsds tddS)NFz?All statements are complete, but pending assertion rules remain)AssertionError)r r r r no_more_statementsszAssertRule.no_more_statements)__name__ __module__ __qualname__ is_consumed errormessageconsume_statementrrr r r r r s r c@s eZdZdS) SQLMatchRuleN)rrrr r r r r$src@s"eZdZdZdddZddZdS) CursorSQLFNcCs||_||_dS)N) statementparams)r rrr r r __init__+szCursorSQL.__init__cCsj|jd}|j|jks,|jdk rH|j|jkrHd|j|j|j|jf|_n|jdd|_|jsfd|_dS)Nrz5Testing for exact SQL %s parameters %s received %s %sT) statementsrr parametersrpoprr)r r stmtr r r r/s   zCursorSQL.process_statement)N)rrrrrrr r r r r(s rc@sFeZdZdddZddZddZd d Zd d Zd dZddZ dS) CompiledSQLNdefaultcCs||_||_||_dS)N)rrdialect)r rrr"r r r rEszCompiledSQL.__init__cCstdd|j}||kS)Nz[\n\t])resubr)r r received_statementrr r r _compare_sqlJszCompiledSQL._compare_sqlcCsB|jdkrtS|jdkr$ddi}ni}t|jf|SdS)Nr!Z postgresqlZimplicit_returningT)r"rrZURLZ get_dialect)r r rr r r _compile_dialectNs    zCompiledSQL._compile_dialectcs|j}||}t|jjtr:|jjj||jddn&|jjj||jj |jj |jddt ddt }|j}|sg}nfdd|D}||fS)zxreconstruct the statement and params in terms of a target dialect, which for CompiledSQL is just DefaultDialect.schema_translate_map)r"r))r" column_keysinliner)z[\n\t]r#csg|]}|qSr )construct_params).0m)compiledr r vsz3CompiledSQL._received_statement..)contextr( isinstancer/rrcompileZexecution_optionsgetr*r+r$r%rZ text_typerr,)r r r1Zcompare_dialect_received_statementr_received_parametersr )r/r r5Ys&    zCompiledSQL._received_statementc Cs|j}||\}}||}|||}|r|dk rt|}t|}xj|r|rt|d} xNtt|D]8\} } x.| D]} | | ks| | | | krzPqzW|| =PqlWd}PqHW|s|rd}|rd|_d|_ n| |||d|_ dS)NrFT)r&Zreceived_parameters) r1r5 _all_paramsr'listdictr enumeraterr_failure_message) r r r1r5r6rZ equivalentZ all_paramsZ all_receivedZparamidxZreceivedZ param_keyr r r r{s8     zCompiledSQL.process_statementcCs@|jr8t|jr||}n|j}t|ts4|g}|SdSdS)N)rrcallabler2r8)r r1rr r r r7s   zCompiledSQL._all_paramscCsd|jdd|fS)NzzTesting for compiled statement %r partial params %r, received %%(received_statement)r with params %%(received_parameters)r%z%%)rreplace)r expected_paramsr r r r;szCompiledSQL._failure_message)Nr!) rrrrr'r(r5rr7r;r r r r r Ds  "1 r c@s&eZdZdddZddZddZdS) RegexSQLNcCs,t|t||_||_||_d|_dS)Nr!)rrr$r3regex orig_regexrr")r rBrr r r rs   zRegexSQL.__init__cCsd|j|fS)Nz{Testing for compiled statement ~%r partial params %r, received %%(received_statement)r with params %%(received_parameters)r)rC)r r@r r r r;szRegexSQL._failure_messagecCst|j|S)N)boolrBmatch)r r r&r r r r'szRegexSQL._compare_sql)N)rrrrr;r'r r r r rAs rAcs4eZdZddZddZfddZddZZS) DialectSQLcCs|jjS)N)r1r")r r r r r r(szDialectSQL._compile_dialectcCstdd|}||kS)Nz[\n\t]r#)r$r%)r real_stmt received_stmtrr r r _compare_no_spaceszDialectSQL._compare_no_spacecsLtt||\}}x*|jD]}||j|rPqWtd|||jjfS)NzICan't locate compiled statement %r in list of statements actually invoked) superrFr5rrIrrr1Zcompiled_parameters)r r rHZreceived_paramsrG) __class__r r r5s  zDialectSQL._received_statementcCsttdd|j}|jjj}|dkr2tdd|}n:d}|dkrDd}n|dkrRd }n |d kr^d}td||}||kS) Nz[\n\t]r#Zpyformatz :([\w_]+)z%(\1)sZqmark?formatz%sZnumeric)r$r%rr1r" paramstyle)r r r&rrNreplr r r r's zDialectSQL._compare_sql)rrrr(rIr5r' __classcell__r r )rKr rFs rFc@s$eZdZddZddZddZdS)CountStatementscCs||_d|_dS)Nr)count_statement_count)r rRr r r rszCountStatements.__init__cCs|jd7_dS)N)rS)r r r r r rsz!CountStatements.process_statementcCs(|j|jkr$ds$td|j|jfdS)NFz,desired statement count %d does not match %d)rRrSr)r r r r r s z"CountStatements.no_more_statementsN)rrrrrrr r r r rQsrQc@seZdZddZddZdS)AllOfcGst||_dS)N)setrules)r rWr r r rszAllOf.__init__cCsjxdt|jD]D}d|_|||jrB|j||js>d|_Pq |js d|_Pq Wt|jdj|_dS)NTr)r8rWrrrdiscard)r r ruler r r rs  zAllOf.process_statementN)rrrrrr r r r rUsrUcs,eZdZddZddZfddZZS)EachOfcGst||_dS)N)r8rW)r rWr r r r(szEachOf.__init__cCsZxH|jrH|jd}|||jr0|jdn|jr>|j|_|jrPqW|jsVd|_dS)NrT)rWrrrrr)r r rYr r r r+s  zEachOf.process_statementcs:|jr"|jdjs"|jdn|jr6tt|dS)Nr)rWrrrJrZ)r )rKr r r9szEachOf.no_more_statements)rrrrrrrPr r )rKr rZ'srZc@seZdZddZdS)OrcCs>x8|jD]}|||jrd|_PqWt|jdj|_dS)NTr)rWrrr8r)r r rYr r r rAs   zOr.process_statementN)rrrrr r r r r[@sr[c@seZdZddZdS)SQLExecuteObservedcCs"||_||_t|||_g|_dS)N)r1 clauseelementrrr)r r1r] multiparamsrr r r rLs zSQLExecuteObserved.__init__N)rrrrr r r r r\Ksr\c@s eZdZdS)SQLCursorExecuteObservedN)rrrr r r r r_Ssr_rrr1 executemanyc@s$eZdZddZddZddZdS) SQLAssertercCs g|_dS)N) accumulated)r r r r r]szSQLAsserter.__init__cCs|j|_|`dS)N)rb_final)r r r r _close`szSQLAsserter._closecGsrt|}t|j}x:|rL|d}|||jr6Pq|jrdst|jqW|r`dsntdn|jsn|dS)NrFz Additional SQL statements remain) rZr8rcrrrrrr)r rWrYZobservedrr r r assert_ds   zSQLAsserter.assert_N)rrrrrdrer r r r ra\srac #srtgt|dfdd}t|dfdd}z VWdt|d|t|d|XdS)NZbefore_executecs|||fdd<dS)Nr )connr]r^r)origr r connection_execute{sz)assert_engine..connection_executeZafter_cursor_executecsj|sdSjr*jdj|kr*jd}n&t|ddd}j||jt||||dS)NrrTr)rbr1r\appendrr_)rfZcursorrrr1r`Zobs)asserterrgr r cursor_executes  z%assert_engine..cursor_execute)rarZ listens_forremoverd)enginerhrlr )rkrgr assert_engineus ro) collections contextlibr$r#rrrnrZengine.defaultrZ engine.utilrZschemarobjectr rrr rArFrQrUrZr[r\ namedtupler_racontextmanagerror r r r s2      }.