
    9j1                       d Z ddlmZ ddlZddlmc mZ ddl	Z
ddlZddlmZ ddlZ ee      j!                         j"                  d   ZdZddZ edd	      Zd
 Zd Zd Zd Zd Zd Zd Zd Zej<                  j?                  e      d        Z d Z!ej<                  j?                  e      d        Z"d Z#d Z$d Z%d Z&y)u  tests/regression/test_dispatch_hardening_2487.py — task-2487 회귀 (Group A, task-2547 corrected).

dispatch 영역의 V2 task ID 패턴 검증 회귀 — utils.task_id_parser SSOT 위임을
dispatch/__init__.py 가 사용하는지 검증한다.

dispatch.__init__ 모듈은 대형이라 직접 import 하지 않고:
  1. utils.task_id_parser.is_valid_task_id / parse_task_id_v2 V2 인식
  2. dispatch/__init__.py 소스 메타 검증 (is_valid_task_id_with_legacy 호출 존재)
    )annotationsN)Path   u   main에 dispatch SSOT 위임 미적용 (PR #97 corrected scope 4 files만 머지). task-2487 chain 후속 PR에서 SSOT 확장 후 활성화 (회장 §명시 task-2551).c                <   t         |z  }t        j                  j                  | t	        |            }||j
                  t        d|       t        j                  j                  |      }|t        j                  | <   |j
                  j                  |       |S )Nzcannot load spec for )	WORKSPACE	importlibutilspec_from_file_locationstrloaderImportErrormodule_from_specsysmodulesexec_module)mod_namefile_rel	file_pathspecmodules        D/home/jay/workspace/tests/regression/test_dispatch_hardening_2487.py_load_moduler      s    H$I>>11(C	NKD|t{{*1)=>>^^,,T2F"CKKKKF#M    tip_2487_dispatchzutils/task_id_parser.pyc                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	N	task-1234TiszV%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.is_valid_task_id
}(%(py4)s)
} is %(py9)stippy0py2py4py6py9assert %(py11)spy11
r    is_valid_task_id
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation@py_assert1@py_assert3@py_assert5@py_assert8@py_assert7@py_format10@py_format12s          r   test_dispatch_valid_baser;   *   s    44,44,4444,44444434443444444444,44444444444r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	Ntask-1234+1Tr   r   r    r!   r'   r(   r)   r3   s          r   test_dispatch_valid_retryr>   .   s    66.6$6.$6666.$66666636663666666666.666$66666666r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	Ntask-1234_1.2Tr   r   r    r!   r'   r(   r)   r3   s          r   test_dispatch_valid_phaserA   2   s    8808D80D88880D888888388838888888880888D88888888r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	Ntask-1234_1.2_a+3Tr   r   r    r!   r'   r(   r)   r3   s          r   "test_dispatch_valid_parallel_retryrD   6   s    < 3< 34<<4<<<<4<<<<<<3<<<3<<<<<< 3<<<4<<<<<<<<<<<r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	N1234Fr   r   r    r!   r'   r(   r)   r3   s          r   test_dispatch_invalid_no_prefixrG   :   s    00'050'50000'500000030003000000000'000500000000r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	Nz
not-a-taskFr   r   r    r!   r'   r(   r)   r3   s          r   "test_dispatch_invalid_wrong_prefixrI   >   s    66-66-6666-66666636663666666666-66666666666r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	Nztask-abcFr   r   r    r!   r'   r(   r)   r3   s          r   test_dispatch_invalid_alpha_numrK   B   s    4
4
+4u4+u4444+u44444434443444444
444+444u44444444r   c                    t         j                  } d} | |      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}x}}y )	N Fr   r   r    r!   r'   r(   r)   r3   s          r   test_dispatch_invalid_emptyrN   F   s    ,,#,u,#u,,,,#u,,,,,,3,,,3,,,,,,,,,#,,,u,,,,,,,,r   )reasonc                    t         dz  dz  j                  d      } d}|| v }|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }t        j                  d
      dz   d|iz  }t        t        j                  |            dx}}y)uW   dispatch/__init__.py 소스에 is_valid_task_id_with_legacy 호출이 있어야 한다.dispatch__init__.pyutf-8encodingis_valid_task_id_with_legacyin)z%(py1)s in %(py3)ssrcpy1py3ua   dispatch/__init__.py에 is_valid_task_id_with_legacy 호출 없음 — V2+legacy 검증 미적용
>assert %(py5)spy5Nr   	read_textr+   r,   r0   r-   r.   r/   _format_assertmsgr1   r2   rY   @py_assert0@py_assert2@py_format4@py_format6s        r   6test_dispatch_source_uses_is_valid_task_id_with_legacyrg   J   s     z!M1
<
<g
<
NC) )S0  )S    *      .1    .1    	l    r   c                 ^   t         dz  dz  j                  d      } g }d}|| v }|}|sd}|| v }|}|snt        j                  d|fd|| f      t        j                  |      d	t        j                         v st        j                  |       rt        j                  |       nd	d
z  }dd|iz  }|j                  |       |st        j                  dfd| f      t        j                  |      d	t        j                         v st        j                  |       rt        j                  |       nd	dz  }	dd|	iz  }
|j                  |
       t        j                  |d      i z  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}x}x}x}x}}y )NrQ   rR   rS   rT   zutils.task_id_parserzfrom utils.task_id_parserrW   )z%(py3)s in %(py5)srY   )r\   r^   z%(py7)spy7)z%(py10)s in %(py12)s)py10py12z%(py14)spy14   u:   dispatch/__init__.py에 utils.task_id_parser import 없음z
>assert %(py17)spy17)r   r`   r+   r,   r0   r-   r.   r/   append_format_boolopra   r1   r2   )rY   r4   rd   @py_assert4rc   @py_assert9@py_assert11rf   @py_format8@py_format13@py_format15@py_format16@py_format18s                r   +test_dispatch_source_imports_task_id_parserry   S   sz   z!M1
<
<g
<
NC! !S( ,G ,G3,N   !S    "      &)    &)     ,G3    -H      LO    LO        	E     r   c                    t         dz  dz  j                  d      } d}|| v}|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }t        j                  d
      dz   d|iz  }t        t        j                  |            dx}}y)u_   task-2547: dispatch/__init__.py 내부 TASK_ID_V2_PATTERN 인라인 재정의 제거 어설션.rQ   rR   rS   rT   z(TASK_ID_V2_PATTERN = re.compile(r"^task-)not in)z%(py1)s not in %(py3)srY   rZ   u^   dispatch/__init__.py에 TASK_ID_V2_PATTERN 인라인 재정의가 남아있음 — SSOT 위반r]   r^   Nr_   rb   s        r   3test_dispatch_source_no_inline_v2_pattern_recompiler|   Z   s     z!M1
<
<g
<
NC5 5S@  5S    6      >A    >A    	i    r   c                 (   t         j                  d      } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   base==z%(py1)s == %(py4)sr[   r$   assert %(py6)sr%   phaser   z%(py1)s is %(py4)sparallelretryr    parse_task_id_v2r+   r,   r0   r1   r2   outrc   r5   rd   @py_format5@py_format7s         r   test_dispatch_parse_base_onlyr   c   sJ   


{
+Cv;%+%;+%%%%;+%%%;%%%+%%%%%%%w<4<4<4<4z?"d"?d""""?d"""?"""d"""""""w<4<4<4<4r   c                 *   t         j                  d      } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d	   }d
}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr=   r~   r   r   r   r   r   r%   r   z+1r   r   r   r   r   r   s         r    test_dispatch_parse_retry_suffixr   k   sJ   


}
-Cv;%+%;+%%%%;+%%%;%%%+%%%%%%%w<4<4<4<4w<4<4<4<4z?"d"?d""""?d"""?"""d"""""""r   c                 *   t         j                  d      } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d	   }d
}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d }||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr@   r~   r   r   r   r   r   r%   r   _1.2r   r   r   r   r   r   s         r    test_dispatch_parse_phase_suffixr   s   sJ   



/Cv;%+%;+%%%%;+%%%;%%%+%%%%%%%w<!6!<6!!!!<6!!!<!!!6!!!!!!!z?"d"?d""""?d"""?"""d"""""""w<4<4<4<4r   c                 .   t         j                  d      } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d	   }d
}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NrC   r~   r   r   r   r   r   r%   r   r   r   _ar   z+3r   r   s         r   test_dispatch_parse_full_combor   {   sK   


2
3Cv;%+%;+%%%%;+%%%;%%%+%%%%%%%w<!6!<6!!!!<6!!!<!!!6!!!!!!!z?"d"?d""""?d"""?"""d"""""""w<4<4<4<4r   )r   r   r   r   )'__doc__
__future__r   builtinsr-   _pytest.assertion.rewrite	assertionrewriter+   importlib.utilr   r   pathlibr   pytest__file__resolveparentsr   _SSOT_PENDING_REASONr   r    r;   r>   rA   rD   rG   rI   rK   rN   markskiprg   ry   r|   r   r   r   r    r   r   <module>r      s    #     
  N""$,,Q/	
]  &(AB579=175- -. / -. / #  r   