
    Pi                        d Z ddlmZ ddlmZmZ dgZ eh d          Z eh d          Z	h dZ
ddZddZddZddZdS )za
GitHub CLI (gh) command handler for Dippy.

Approves read-only gh operations, blocks mutations.
    )annotations)ClassificationHandlerContextgh>   	item-list
field-listtrusted-rootverify-assetgetdifflistlogsviewcheckportstokenwatchcheckssearchstatusverifydownload>   editpushsyncclosemergereadycreatedeletereopenreviewapprovecomment>   -B-R--repo--branchtokens	list[str]return
str | Nonec                   d}|t          |           k     rl| |         }|t          v r|dz  }*|                    d          r|dz  }E|dz   t          |           k     r"| |dz            }|                    d          s|S |S dS )z6Get the action from gh command, skipping global flags.      -NlenFLAGS_WITH_ARG
startswith)r)   ir   
next_tokens       -/root/projects/gits/Dippy/src/dippy/cli/gh.py_get_actionr8   B   s    	A
c&kk//q	N""FAC   	FAq53v;;AJ((-- "!!4    boolc                   t          |           dk    r
| dd         ng }d}d}|t          |          k     r||         }|dv r9|dz   t          |          k     r||dz                                            }|dz  }n|                    d          r5t          |          dk    r"|dd                                         }|dz  }n<|                    d          r"|dd                                         }|dz  }n|dz  }|t          |          k     ||d	k    rd
S d
}t          |          D ]\  }}|dv rs|dz   t          |          k     r]||dz            }|                    d          r=|dd         }d|                                v r d
S d|                                v pd|v }|                    d          rj|                    d          dk    r|                    dd          d         nd}d|                                v r d
S d|                                v pd|v }|rdS d
}|D ]#}|dv rd} n|                    d          rd} n$|r|d	k    rd
S dS )z=Check gh api command - approve GET requests, block mutations.r/   Nr   >   --method-Xr.   r=   z	--method=	   GETF>   -f--raw-fieldzquery=   mutationquery{)z--raw-field=query=z	-f=query== T>   -F--field--inputr@   rA   )z--raw-field=z--field=z--input=)r2   upperr4   	enumeratelowercountsplit)	r)   argsmethodr5   argis_graphql_queryvalquery_contenthas_mutation_flagss	            r7   
_check_apirW   U   s   Vq6!""::bDF	A
c$ii--1g$$$1us4yy  a!e**,,FAA^^D!! 	c#hhllW]]__FFAA^^K(( 	W]]__FFAAFA c$ii-- foouD// X X3'''AECII,=,=q1u+C~~h''  #ABB!4!4!6!666 55}22444L}8L ! >>=>> 	X47IIcNNa4G4GCIIc1--a00RM]002222uu&-*=*=*?*??W3-CW t  CCC!%E>>BCC 	!%E	  foou4r9   c                    d}|t          |           k     r4| |         }|t          v r|dz  }*|                    d          r|dz  }E|S dS )z:Get the subcommand from gh command, skipping global flags.r.   r/   r0   Nr1   )r)   r5   r   s      r7   _get_subcommandrY      sb    	A
c&kk//q	N""FAC   	FA4r9   ctxr   r   c                   | j         }|r|d         nd}t          |          dk     rt          d|          S t          |          }|st          d|          S | d| }|dk    r1t	          |          rt          d|          S t          d|          S |d	v rt          d|          S t          |          }|r
| d| d| }|t          v rt          d|          S t          d|          S )
zClassify gh command.r   r   r/   ask)description apiallow>   browser   r   )r)   r2   r   rY   rW   r8   SAFE_ACTIONS)rZ   r)   base
subcommanddescactions         r7   classifyrg      s9   ZF(6!99DD
6{{Qe6666 ((J 7e6666!!Z!!DUf 	=!'t<<<<e6666333g48888  F /....f..g48888%T2222r9   N)r)   r*   r+   r,   )r)   r*   r+   r:   )rZ   r   r+   r   )__doc__
__future__r   	dippy.clir   r   COMMANDS	frozensetrb   UNSAFE_ACTIONSr3   r8   rW   rY   rg    r9   r7   <module>ro      s     # " " " " " 4 4 4 4 4 4 4 46 y   <    & 433   &8 8 8 8v   3 3 3 3 3 3r9   