
    fi!                        S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	  Sr
Sr      SS jr S             SS	 jjr\
4SS
 jjr\
4         SS jjr  S         SS jjrg)z@Script discovery + selection helpers for Enter_PowerBi_Selector.    )annotationsN)Path)ListSequenceTuplezconfig/selector_defaults.jsonz.hide_in_selectorc                D   U R                  5       n / nUR                  [        U R                  S5      5      5        U Vs1 s H7  o3R	                  5       (       d  M  UR	                  5       R                  5       iM9     nn[        U R                  5        Vs/ s H  oUR                  5       (       d  M  UPM     sn5       H  nUR                  nUR                  5       U;   a  M%  UR                  S5      (       a  M=  U[        -  R                  5       (       a  M[  UR                  [        UR                  S5      5      5        M     [        5       n/ nU H<  n	U	R                  5       n
X;   a  M  UR                  U
5        UR                  U	5        M>     U$ s  snf s  snf )z:Return *.py files in base_dir and exactly one level below.z*.py)._)resolveextendsortedglobstriploweriterdiris_dirname
startswithHIDE_FOLDER_MARKERexistssetaddappend)base_dirhide_foldersscriptsr   hiddendsubdirseenoutprps              b/home/justin/Sync/Shared/60_RedWing_Notes/PowerBi_Automation/Powerbi_Background/Script_Selector.pyfind_py_scriptsr%      s<   
 !HGNN6(--/01/;L|tzz|"djjl  "|FLX%5%5%7F%788:!%7FG{{::<6!??:&&''//11vfkk&123 H 5DCYY[:

1  J' MFs    F"FF3Fc                  ^ U R                  5       n UR                  5       nX-  R                  5       n[        XS9nU Vs1 s H7  oR                  5       (       d  M  UR                  5       R                  5       iM9     n	nU V
s/ s H7  oR                  5       (       d  M  U
R                  5       R                  5       PM9     nn
/ nU H  mTR                  5       X1;   a  M  TR                  R                  5       S:X  a  M:  TR                  R                  5       U	;   a  MZ  [        U4S jU 5       5      (       a  Mv  UR                  T5        M     U$ s  snf s  sn
f )z-Get scripts eligible for selection/execution.)r   z__init__.pyc              3  \   >#    U  H!  oTR                   R                  5       ;   v   M#     g 7fN)r   r   ).0tss     r$   	<genexpr>*get_displayable_scripts.<locals>.<genexpr>I   s     :MqAFFLLN"Ms   ),)r   r%   r   r   r   anyr   )r   	this_filehide_script_nameshide_script_name_containsr   open_powerbi_filenameopen_powerbir   n
hide_exactr*   hide_containsfilteredr+   s                @r$   get_displayable_scriptsr8   /   s    !H!!#I4==?LhBG->L->'')#!'')//#->JL0IW0I1WWY&QWWY__&0IMWH99;93366<<>]*66<<>Z':M:::  O MWs   E"EE!"Ec                   U R                  5       U-  R                  5       n [        R                  " UR                  SS95      nUR	                  S5      =(       d    /  Vs/ s H<  n[        U5      R                  5       (       d  M#  [        U5      R                  5       PM>     nn[        UR	                  SS5      5      nXV4$ s  snf ! [         a    / S4s $ f = f)zELoad saved selected script paths (repo-relative) + keep_open setting.utf-8encodingselected_scriptskeep_powerbi_openF)	r   jsonloads	read_textgetstrr   bool	Exception)r   filenamepathdataxrel	keep_opens          r$   load_saved_selectionrL   O   s    )224Dzz$..'.:;(,1C(D(J(J^(J!sSTv||~~s1v||~(J^"5u=>	~ _  5ys)   ?C
 ""CC%C
 C
 
CCc                b   U R                  5       n X-  R                  5       nUR                  R                  SSS9  U Vs/ s H/  oUR                  5       R                  U 5      R	                  5       PM1     nnU[        U5      S.nUR                  [        R                  " USS9SS9  U$ s  snf )z=Persist selected scripts (repo-relative) + keep_open setting.T)parentsexist_ok)r=   r>      )indentr:   r;   )	r   parentmkdirrelative_toas_posixrD   
write_textr?   dumps)r   r=   rK   rF   rG   r"   	rel_pathspayloads           r$   save_selectionrZ   [   s     !H((*DKKdT2GWXGW!((2;;=GWIX%!)_G 	OODJJwq1GODK Ys   6B,c           	       ^^^^^^^^^^  SSK mSSK Jn  [	        U=(       d    / 5      nU R                  5       n [        U5      nTR                  5       mTR                  S5        TR                  SS5        / mSmTR                  [        U5      S	9nTR                  T5      nUR                  TR                  SS
9  TR                  USS9mTR!                  USTR"                  S9n	TR                  T5      n
U
R%                  SU4S j5        TR'                  SU
SS9  TR)                  U	R                  S9  TR                  STR                  SS9  U	R                  STR*                  S9  / mSBUU4S jjmSCUU4S jjmSCUU4S jjmU(       d#  TR-                  U
SSSS9R                  SSSS9  GOU GH  nUR/                  U 5      R1                  5       nX;   nTR                  US	9nTR                  U
5      nTR3                  XUS 9R                  SSS!9  TR                  U5      nUR                  SSTR4                  S"9  TR7                  US#S$U4U4S% jjS&9R                  SS'S(9  TR7                  US)S$U4U4S* jjS&9R                  SS+9  UR                  SSS$TR4                  S,9  TR9                  XU45        GM     TR                  T5      nUR                  TR4                  SSS-9  TR-                  US.SSS/9R                  SS09  TR3                  US1US 9R                  SS2S39  TR                  U5      nUR                  TR4                  S4S59  SDU4S6 jjmSBUUUU4S7 jjnSBUUU4S8 jjnTR7                  US9U4S: jS;9R                  TR:                  S+9  TR7                  US<U4S= jS;9R                  TR:                  S>S(9  TR7                  US?US;9R                  TR<                  S+9  TR7                  US@US;9R                  TR<                  SAS(9  TR?                  5         T[        URA                  5       5      [        T5      4$ ! [         a  n[        S5      UeSnAff = f)Ez,Interactive GUI to select and order scripts.r   N)
messageboxzwtkinter is required for the GUI. On Ubuntu/Mint: sudo apt install python3-tk
(or run with --headless to avoid the GUI).z"PowerBI: Configure default scriptsi  i  T)value)fillexpand)borderwidthvertical)orientcommandz<Configure>c                @   > TR                  TR                  S5      S9$ )Nall)scrollregion)	configurebbox)_ecanvass    r$   <lambda>$choose_scripts_gui.<locals>.<lambda>   s    6##U1C#D    )r   r   nw)windowanchor)yscrollcommandleft)sider^   r_   right)rs   r^   c                    > T H  u  n   nU R                  5         M     T H#  u  n   nU R                  SSSTR                  S9  M%     g )Nw
   rP   rp   padxpadyr^   )pack_forgetpackX)framer
   	row_itemstks     r$   refresh_order)choose_scripts_gui.<locals>.refresh_order   sG    $KE1a %$KE1aJJcJ> %rm   c                   >^  [        U 4S j[        T5       5       S5      nUS:  a  TU   TUS-
     sTUS-
  '   TU'   T" 5         g g )Nc              3  B   >#    U  H  u  nu  n  o2TL d  M  Uv   M     g 7fr(    r)   ifrmr
   	frame_objs       r$   r,   6choose_scripts_gui.<locals>.move_up.<locals>.<genexpr>   $     U,@.![c1a9DTAA,@   	r      )next	enumerater   idxr   r   s   ` r$   move_up#choose_scripts_gui.<locals>.move_up   sS    UIi,@UWYZ71:33QR7AS.IcAg	#O rm   c                   >^  [        U 4S j[        T5       5       S5      nSUs=::  a  [        T5      S-
  :  a"  O  g TU   TUS-      sTUS-   '   TU'   T" 5         g g )Nc              3  B   >#    U  H  u  nu  n  o2TL d  M  Uv   M     g 7fr(   r   r   s       r$   r,   8choose_scripts_gui.<locals>.move_down.<locals>.<genexpr>   r   r   r   r   r   )r   r   lenr   s   ` r$   	move_down%choose_scripts_gui.<locals>.move_down   sb    UIi,@UWYZ(c)nq((1:33QR7AS.IcAg	#O )rm   z>No other .py scripts found in this folder (or one level down).rv   )textrp   justifyrw   )rp   ry   rz   )r   variable)rs   rp   )rs   r_   r^   u   ↑rP   c                   > T" U 5      $ r(   r   )r~   r   s    r$   rk   rl      s
    'RW.rm   )r   widthrc   )rP   r   )rs   ry   u   ↓c                   > T" U 5      $ r(   r   )r~   r   s    r$   rk   rl      s    )TYJZrm   )rs   rx   )r^   ry   rz   aS  This screen configures your default script list.
After saving, normal runs use these defaults automatically.

Flow:
  1) Start Open_PowerBi.py
  2) Wait for powerbi_session.json + reachable geckodriver port
  3) Run selected scripts one-by-one in the order shown above
  4) Close Open_PowerBi + Firefox when done (unless you keep it open)
)r   r   rp   )rp   z Keep Power BI open when finished)   r   )rp   rz   )rw   r   )r^   rz   c                @   > T H  u  pnUR                  U 5        M     g r(   )r   )valr
   varr   s      r$   
select_all&choose_scripts_gui.<locals>.select_all   s    "IAAGGCL #rm   c            	        > T V VVs/ s H(  u  pn[        UR                  5       5      (       d  M&  UPM*     snnn mSmTR                  5         g s  snnn f NF)rD   rB   destroy)r
   r   rG   	cancelledrootr   selecteds      r$   on_run"choose_scripts_gui.<locals>.on_run   s;    -6JY\QT$swwy/DYJ	 Ks
   %AAc                 J   > TR                  5         Sm TR                  5         g NT)clearr   )r   r   r   s   r$   	on_cancel%choose_scripts_gui.<locals>.on_cancel   s    	rm   z
Select Allc                    > T " S5      $ r   r   r   s   r$   rk   rl      s
    *T:Jrm   )r   rc   zSelect Nonec                    > T " S5      $ r   r   r   s   r$   rk   rl      s
    :e;Lrm   )   r   CancelRun)r   r   )returnNone)r   objectr   r   )r   rD   r   r   )!tkinterr\   ImportErrorRuntimeErrorr   r   listTktitleminsize
BooleanVarrD   Framer|   BOTHCanvas	Scrollbaryviewbindcreate_windowrg   YLabelrT   rU   Checkbuttonr}   Buttonr   LEFTRIGHTmainlooprB   )r   r   default_selected_reldefault_keep_openr\   excselected_relkeep_open_var	container	scrollbarscroll_framer+   rJ   checkedr   rowspacerbottombtn_rowr   r   r   rj   r   r   r   r   r   r   r   r   s                        @@@@@@@@@@r$   choose_scripts_guir   o   sX   & +1r2L!H7mG557DJJ34LLcHIMM->(?M@MINNN-YYyaY0FYz6<<PI88F#LD TB
IMM2
KKV"''$K7NNbddN+35I? ?   
Q	 	 	

 $c$
,A--)224C)G--g-.C((<(CNN33N7<<&QT<UXXc]FKKVDrttK<IIcQS8XIY^^6 _  IIcQS8ZI[`` a  HHCbqrttH<c]+# & XXd^F
KKRTTK,HHV    d#dNN/   d#Fd#hhvGLLbddL)   IIgL2JIKPPVXV]V]P^IIgM3LIMRRWW6 S  IIgHiI8==288=LIIgE6I277RXXF7SMMOT-++-.Y??K  9
 	s   
Q 
Q7&Q22Q7)r   r   r   Sequence[str]r   
List[Path])zOpen_PowerBi.py)r   r   r/   r   r0   r   r1   r   r   r   r2   rC   r   r   )r   r   rF   rC   r   zTuple[List[str], bool])
r   r   r=   Sequence[Path]rK   rD   rF   rC   r   r   r   )
r   r   r   r   r   zSequence[str] | Noner   rD   r   zTuple[List[Path], bool, bool])__doc__
__future__r   r?   pathlibr   typingr   r   r   DEFAULT_SELECTION_FILEr   r%   r8   rL   rZ   r   r   rm   r$   <module>r      s   F "   ( ( 9 (  L "3 %  -	
    @ :P 	  +	$  	
 
. 26#	O@O@O@ /O@ 	O@
 #O@rm   