ó
    ò<©jB  ã                  ó¶  • S SK Jr  S SKJr  S SKJr  S SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKr\" \5      R!                  5       R"                  S   r\S-  r\S-  S-  r\S-  S	-  r\S
-  r/ SQr\	R0                  " S5      r " S S\5      r " S S\5      rSS jrSSS jjrSS jrSS jr SS jr!SS S jjr"S!S jr#\$S:X  a  \%" \#" 5       5      eg)"é    )Úannotations)ÚPath)ÚurlparseNé   ÚlearnerÚevidenceÚruntimezruntime-status.jsonztoolchain-policy.json)ÚDAT008_EVIDENCE_VECTORSÚDAT008_EVIDENCE_QUERIESÚDAT008_EVIDENCE_MATCH_RANKÚ DAT008_EVIDENCE_INDEX_DEFINITIONÚDAT008_EVIDENCE_EXPLAIN_Q1ÚDAT008_FAILURE_PROBEz__TODO_[A-Z0-9_]+__c                  ó   • \ rS rSrSrg)ÚSafetyErroré   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Úz/mnt/data/dat008_q2/work/PO067_DAT-008/F2-L4/DAT-008_ACCEPTED_CANDIDATE_QUERY2/lab/DAT008-LAB1/learner/src/run_postgres.pyr   r      s   † ¢r   r   c                  ó   • \ rS rSrSrg)ÚSubmissionErroré   r   Nr   r   r   r   r   r      s   † ¢Tr   r   c                óf   • [         R                  " U R                  5       5      R                  5       $ ©N)ÚhashlibÚsha256Ú
read_bytesÚ	hexdigest)Úpaths    r   r"   r"      s!   € Ü�>Š>˜$Ÿ/™/Ó+Ó,×6Ñ6Ó8Ð8r   c                ó:  • U=(       d(    [         R                  " [        R                  5       5      nUS:w  a  [	        S5      e[        U 5      nUR                  S;  a  [	        S5      eUR                  =(       d    SR                  5       nU[        US   5      ;  a  [	        S5      eUR                  =(       d    SR                  S5      nUR                  US	   5      (       a  XRS	   :X  a  [	        S
5      eUR                  5       S;   a  [	        S5      eSUS.$ )NÚYESz(explicit disposable confirmation missing>   ÚpostgresÚ
postgresqlzunsupported database URL schemeÚ Úallowed_hostsz"database host is not loopback-onlyÚ/Údatabase_name_prefixz7database name is outside the disposable prefix contract>   r(   Ú	template0Ú	template1z!default/system database forbiddenÚLOOPBACK_ONLY)Ú
host_classÚdatabase_identity)ÚjsonÚloadsÚPOLICY_PATHÚ	read_textr   r   ÚschemeÚhostnameÚlowerÚsetr%   ÚlstripÚ
startswith)ÚurlÚconfirmationÚpolicyÚuÚhostÚdbs         r   Úvalidate_targetrC      só   € Ø×8”T—Z’Z¤× 5Ñ 5Ó 7Ó8€FØ�UÓÜÐDÓEÐEÜˆsƒm€AØ‡x�xÐ0Ó0ÜÐ;Ó<Ð<Ø
�*‰*×
˜×	!Ñ	!Ó	#€DØ”3�v˜oÑ.Ó/Ó/ÜÐ>Ó?Ð?Ø	�‰��"×Ñ˜SÓ!€BØ�=‰=˜Ð 6Ñ7×8Ñ8¸BÐG]Ñ@^Ó<^ÜÐSÓTÐTØ	‡x�xƒzÐ9Ó9ÜÐ=Ó>Ð>Ø(¸RÑ@Ð@r   c                óD  • / nU  H—  nUR                  5       (       d   UR                  SUR                   35        M8  [        R	                  UR                  5       5      nU(       d  Md  UR                  SUR                   S[        [        U5      5       35        M™     U$ )NzMISSING:zUNRESOLVED:Ú:)ÚexistsÚappendÚnameÚTODO_REÚfindallr6   Úsortedr:   )ÚpathsÚbadÚpÚhitss       r   Úunresolved_submissionrP   )   s{   € Ø
€CÛˆØ�x‰x�z‰zØ�J‰J˜ !§&¡& Ð*Ô+©XÜ�_‰_˜QŸ[™[›]Ó+ˆßˆ4�—‘˜k¨!¯&©&¨°´6¼#¸d»)Ó3DÐ2EÐFÖGñ	 ð
 €Jr   c                óH   • SU SSSS S S S 0 S SUS.nUR                  U5        U$ )NÚDAT008_RUNTIME_STATUS_v2FÚNOT_RUN)ÚschemaÚstatusÚ*actual_postgresql_runtime_evidence_claimedÚ'actual_match_rank_plan_evidence_claimedÚruntime_claimableÚpostgresql_versionr2   r1   Úgenerated_schemaÚinput_sha256Úruntime_receiptÚcleanup_statusÚreason)Úupdate)rU   r^   ÚextraÚouts       r   Úbase_statusrb   2   s=   € à)°6Ø38ÐchØ°TÈdÐ`dØ¨RÀ$ÐXaÐkqñ		€Cð ‡J�JˆuÔ˜c�zr   c                óZ   • [         R                  [        R                  " U SS9S-   5        g )Nr   ©ÚindentÚ
)ÚSTATUS_PATHÚ
write_textr3   Údumps)Úobjs    r   Úwrite_statusrk   ;   s    € Ü×Ñœ4Ÿ:š: c°Ñ3°DÑ8Õ9r   c           	     ój   • [         R                  " U [         R                  [         R                  SXS9$ )NT)ÚstdoutÚstderrÚtextÚenvÚtimeout)Ú
subprocessÚrunÚPIPE)Úcmdrp   rq   s      r   Úrun_cmdrv   >   s#   € Ü�>Š>˜#¤j§o¡o¼j¿o¹oÐTXÐ^aÑsÐsr   c                 ó  ^• [         R                  " [        R                  5       5      n [        R
                  R                  U S   S5      n[        R
                  R                  S5      S:X  a  SOSn [        XU 5      n[        R                  " S5      nU(       d   [        [        SP0 UD65        [        S	5        g
[        S-  [        S-  /n[!        U5      nU(       a1  [        [        SSR#                  U5      40 UD65        [        S5        g[$        R'                  5       (       a  [        R(                  " [$        5        [$        R+                  SS9  [        R
                  R-                  5       n[        U S   5      US'   SU S    S3US'   [/        USSUSSSS/U5      n	U	R0                  (       a  [        [        SQ0 UD65        g U	R2                  R5                  5       (       a+  U	R2                  R5                  5       R7                  5       S!   OSn
S"U
;  a  [        [        SR0 UD65        g#U
R9                  S"S$5      u  p¼X³S%   :w  d  UR;                  S&5      (       d  [        [        SS0 UD65        g'S([<        R>                  " S#5      -   n[        S)-  [        S*-  /UQnU Vs0 s H/  oÿRA                  [B        5      RE                  5       [G        U5      _M1     nnS+S,U S-U S.3-   nU H8  nUS/URH                   S03UR                  5       -   S1URH                   S03-   -  nM:     [$        S2-  nURK                  U5        [$        S3-  n[$        S4-  nS nS n [/        USUSSS5[        U5      /US6S79nURK                  UR2                  5        URK                  URL                  5        [/        USUSSSS9U S:3/US;S79nUR                  5       m[S        U4S< j[T         5       5      nUS L=(       a    UR0                  S=:H  nUR0                  S=:H  nS>XËUS?   UUUc  S OUR0                  [T         Vs0 s H	  nUUT;   _M     snUR0                  U(       a  S@OSA[G        U5      [G        U5      [G        U5      SB.n[$        SC-  nURK                  [         RV                  " USSD9S0-   5        U=(       a    U=(       a    Un[        U(       a  SEOSU(       a  SFOSGXËUS?   UUSHU(       a  S@OSASI9	nUUSJ'   UUSK'   UUSL'   [        U5        [        U(       a  SMOSN5        U(       a  S=$ SO$ ! [         a6  n[        [        S[        U5      5      5        [        SU 35         S nAgS nAff = fs  snf ! [N        RP                   aV  nURK                  UR2                  =(       d    S5        URK                  URL                  =(       d    SS8-   5         S nAGN(S nAff = f! [/        USUSSSS9U S:3/US;S79nf = fs  snf )TNÚdatabase_url_envr*   Ú MAKNOW_DAT008_CONFIRM_DISPOSABLEr'   ÚREFUSED_BY_SAFETY_GATEz	REFUSED: r   Úpsqlz"NOT RUN: psql binary not availableé   z"submission/03_search_workbench.sqlzsubmission/04_failure_probe.sqlÚREFUSED_INCOMPLETE_SUBMISSIONz; zREFUSED: incomplete submissioné   T)ÚparentsÚconnect_timeout_secondsÚPGCONNECT_TIMEOUTz-c statement_timeout=Ústatement_timeout_msz -c lock_timeout=3000Ú	PGOPTIONSz-Xz-Atz-vzON_ERROR_STOP=1z-czJSELECT current_database() || '|' || current_setting('server_version_num');ÚRUN_FAILED_NONCLAIMABLEé   éÿÿÿÿÚ|é   é   r2   Ú18é   Úmaknow_dat008_zsql/01_schema.sqlzsql/02_seed.sqlz\set ON_ERROR_STOP on
zCREATE SCHEMA "z";
SET search_path TO "z", public;
z

-- BEGIN rf   z
-- END zruntime.sqlzpostgresql.stdout.txtzpostgresql.stderr.txtz-fé   )rq   z	
TIMEOUT
zDROP SCHEMA IF EXISTS "z
" CASCADE;é   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr    r   )Ú.0Úxrm   s     €r   Ú	<genexpr>Úmain.<locals>.<genexpr>x   s   øé € Ð9Ò(8 1˜–;Ò(8ùs   ƒr   ÚDAT008_RUNTIME_RECEIPT_v1r1   ÚPASSÚFAIL)rT   Úpostgresql_version_numr2   r1   rZ   r[   Úexecution_returncodeÚrequired_markersÚcleanup_returncoder]   Úruntime_sql_sha256Ústdout_sha256Ústderr_sha256zrunner-receipt.jsonrd   ÚRAN_REAL_POSTGRESQLzall runtime gates passedz2execution, evidence-marker, or cleanup gate failedz,learner/evidence/runtime/runner-receipt.json)rY   r2   r1   rZ   r[   r\   r]   rX   rV   rW   zPASS REAL POSTGRESQL RUNTIMEzNONCLAIMABLE RUNTIME FAILUREé   )ÚNOT_RUN_MISSING_PSQLzpsql binary not available)r„   zserver identity probe failed)r„   zserver identity probe malformed)Ú$REFUSED_VERSION_OR_IDENTITY_MISMATCHz.database identity or PostgreSQL major mismatch),r3   r4   r5   r6   ÚosÚenvironÚgetrC   Ú	Exceptionrk   rb   ÚstrÚprintÚshutilÚwhichÚLEARNERrP   ÚjoinÚRUNTIME_DIRrF   ÚrmtreeÚmkdirÚcopyrv   Ú
returncoderm   ÚstripÚ
splitlinesÚsplitr<   ÚsecretsÚ	token_hexÚrelative_toÚROOTÚas_posixr"   rH   rh   rn   rr   ÚTimeoutExpiredÚallÚREQUIRED_MARKERSri   ) r?   r=   r>   ÚtargetÚer{   ÚsubmissionsrM   rp   ÚprobeÚlinerB   Úversion_numrT   ÚinputsrN   ÚhashesÚcombinedÚruntime_sqlÚstdout_pathÚstderr_pathÚexec_resultÚcleanupÚ
markers_okÚexecution_okÚ
cleanup_okÚmÚreceiptÚreceipt_pathÚ	claimableÚstrm   s                                   @r   ÚmainrÒ   A   sÙ  ø€ Ü�:Š:”k×+Ñ+Ó-Ó.€FÜ
�
‰
�‰�vÐ0Ñ1°"Ó5€CÜŸ*™*Ÿ.™.Ð)KÓLÈeÓS‘ÐY[€LðÜ˜s°Ó7ˆô
 
�Š�fÓ	€DÞÜ”[Ñ]ÐV\Ñ]Ô^ÜÐ2Ô3ØÜÐ=Ñ=¼gÐFgÑ>gÐh€KÜ˜kÓ*€CÞ
Ü”[Ð!@ÀÇÁÈ3ÃÑYÐRXÑYÔZÜÐ.Ô/ØÜ×Ñ×ÑœVŸ]š]¬;Ô7Ü×Ñ˜dÐÑ#Ü
�
‰
�‰Ó€CÜ  Ð(AÑ!BÓC€CÐÑØ,¨VÐ4JÑ-KÐ,LÐLaÐb€CˆÑÜ
�4˜˜U 3 tÐ,=¸dð  DPð  Qð  RUó  V€EØ××Ü”[ÑcÐ\bÑcÔdØØ27·,±,×2DÑ2D×2FÑ2Fˆ�‰×	Ñ	Ó	×	(Ñ	(Ó	*¨2Ò	.ÈB€DØ
�$ƒÜ”[ÑfÐ_eÑfÔgØØ—:‘:˜c !Ó$�N€BØ	Ð%Ñ&Ó&¨k×.DÑ.DÀT×.JÑ.JÜ”[ñ  Cð  |Bñ  Cô  	DØØœG×-Ò-¨aÓ0Ñ0€FÜÐ'Ñ'¬Ð0AÑ(AÐOÀ;ÐO€FÙ>DÓEºf¸�M‰Mœ$Ó×(Ñ(Ó*¬6°!«9Ò4¹f€FÐEØ'¨/¸&¸ÐAYÐZ`ÐYaÐamÐ(nÑn€HÛˆØ�k !§&¡& ¨Ð,¨Q¯[©[«]Ñ:¸YÀqÇvÁvÀhÈbÐ;QÑQÑQŠñ ä˜MÑ)€K¨;×+AÑ+AÀ(Ô+KÜÐ3Ñ3€KÄÐMdÑAd°[Ø€K˜d�gðAÜ˜T $ s¨4Ð0AÀ$ÄsÈ;ÓGWÐXÐY\ÐegÑhˆØ×Ñ˜{×1Ñ1Ô2°K×4JÑ4JÈ;×K]ÑK]Ô4^ô ˜˜d 3 tÐ,=¸dÐE\Ð]cÐ\dÐdnÐCoÐpÐqtÐ}ñ  AˆØ× Ñ Ó"€FÜÔ9Õ(8Ó9Ó9€JØ DÐ(×F¨[×-CÑ-CÀQÑ-F€LØ×!Ñ! 1Ñ$€Jà*ÀKØ˜,Ñ'¸6ÐQWØ%0Ñ%8™T¸k×>TÑ>TÝ3CÓDÒ3C¨a˜!˜Q &™[š.Ñ3CÑDÐZa×ZlÑZlÞ!+‘v°ÌVÐT_ÓM`Ü˜[Ó)¼&ÀÓ:Mñ€Gô Ð2Ñ2€L°L×4KÑ4KÌDÏJÊJÐW^ÐfgÑLhÐimÑLmÔ4nØ×8˜z×8¨j€IÜ®IÑ(Ð;TÞ1:Ñ-Ð@tØ&1ÐRXÐYeÑRfÐx~Ø &Ð7eÞ,6¡&¸Fñ	D€Bð
 &€BÐÑØ5>€BÐ3Ñ4Ø2;€BÐ0Ñ1Ü�ÔÜ	®IÑ
(Ð;YÔZÞˆ1Ð ˜qÐ øôQ ó Ü”[Ð!9¼#¸a»&ÓAÔBÜ�	˜!˜ˆoÔÜûðüòD Føô ×$Ñ$ó gØ×Ñ˜qŸx™xŸ~¨2Ô.°×0FÑ0FÈÏÉÏÐTVÐXeÑGe×0fÒ0fûðgûô ˜˜d 3 tÐ,=¸dÐE\Ð]cÐ\dÐdnÐCoÐpÐqtÐ}ñ  A‰üò EsP   Á5T, Ê-6U/Í AU4 Ð9W<Ô,
U,Ô6,U'Õ'U,Õ4WÖAW×W! ×W×W! ×!W9Ú__main__)r%   r   Úreturnr¦   r    )r=   r¦   r>   r¦   r?   zdict | NonerÔ   Údict)rL   z
list[Path]rÔ   ú	list[str])rU   r¦   r^   r¦   rÔ   rÕ   )rj   rÕ   rÔ   ÚNone)é   )ru   rÖ   rp   rÕ   rq   ÚintrÔ   zsubprocess.CompletedProcess)rÔ   rÙ   )&Ú
__future__r   Úpathlibr   Úurllib.parser   r!   r3   r¢   Úrer´   r¨   rr   ÚsysÚtempfileÚ__file__Úresolver   r·   rª   r¬   rg   r5   r»   ÚcompilerI   ÚRuntimeErrorr   r   r"   rC   rP   rb   rk   rv   rÒ   r   Ú
SystemExitr   r   r   Ú<module>rå      sÙ   ðå "Ý Ý !ß H× H× H× HÓ Há	ˆ(ƒ^×ÑÓ×%Ñ% aÑ(€ØˆY‰€Ø�JÑ˜yÑ(€Ø�JÑÐ4Ñ4€ØÐ+Ñ+€òÐ ð 	�
Š
Ð)Ó*€ä %�,Ô %Ü )�lÔ )ô9öAô"ô"ô:ötôN!ð` ˆZÓÙ
‘T“VÓ
Ðð r   