
    Pi                        d Z ddlmZ ddlmZmZ g dZ eddh          ZddZ	d dZ
d dZd dZd dZd dZd dZd dZd dZd dZd!dZd!dZd!dZd!dZd!dZdS )"z
Ansible command handlers for Dippy.

Handles ansible, ansible-playbook, ansible-vault, ansible-galaxy,
ansible-inventory, ansible-doc, ansible-pull, ansible-config,
ansible-console, ansible-lint, and ansible-test commands.
    )annotations)ClassificationHandlerContext)ansibleansible-playbookansible-vaultansible-galaxyansible-inventoryansible-docansible-pullansible-configansible-consoleansible-lintansible-testr   r   ctxr   returnr   c                J   | j         }t          |          dk     rt          dd          S |d         }d|v sd|v sd|v rt          d	|          S |t          v rt          d	|          S |dk    rt	          |          d
}}n|dk    rt          |          d
}}n|dk    rt          |          t          |          }}n|dk    rt          |          t          |          }}n|dk    rt          |          d}}n|dk    rt          |          d
}}ng|dk    rt          |          t          |          }}nB|dk    rt          |          d}}n*|dk    rt          |          t!          |          }}nd\  }}|rt          d	|          S t          d| d|           S )zClassify ansible command.   askr   )descriptionr   z-hz--helpz	--versionallowrunr   r   r	   r
   writer   r   r   interactiver   )Fr    )tokenslenr   SAFE_COMMANDS_check_ansible_check_ansible_playbook_check_ansible_vault_get_vault_action_check_ansible_galaxy_get_galaxy_action_check_ansible_inventory_check_ansible_pull_check_ansible_config_get_config_action_check_ansible_console_check_ansible_test_get_test_action)r   r   cmdsafeactions        2/root/projects/gits/Dippy/src/dippy/cli/ansible.pyclassifyr0   $   s   ZF
6{{Qe;;;;
)C v~~V++{f/D/Dg37777 mg37777 i%f--uf	"	"	".v66f			+F335Fv5N5Nf	 	 	 ,V446H6P6Pf	#	#	#/77f			*622Ef	 	 	 ,V446H6P6Pf	!	!	!-f55}f			*6224DV4L4Lf#f 8g37777%->->f->->????    r   	list[str]boolc                &    d| v rdS d| v sd| v rdS dS )zWCheck ansible ad-hoc command safety.

    Safe if: --list-hosts or --check/-C mode
    --list-hostsT--check-CF r   s    r/   r   r   O   s1    
 tFdfnnt5r1   c                &    h d}|D ]	}|| v r dS 
dS )zCheck ansible-playbook command safety.

    Safe if: --syntax-check, --list-hosts, --list-tasks, --list-tags, or --check/-C
    >   --list-tags--list-tasks--syntax-checkr7   r6   r5   TFr8   )r   
safe_flagsflags      r/   r    r    [   s>    
  J   6>>44 5r1   c                    t          |           dk     rdS | dd         D ]}|                    d          r|dk    c S dS )zKCheck ansible-vault command safety.

    Safe if: view subcommand only
       Fr   N-viewr   
startswithr   tokens     r/   r!   r!   n   s_    
 6{{Qu   C   	5r1   c                    t          |           dk     rdS d}d}| dd         D ]#}|                    d          r||}||} n$|dvrdS h d}||v S )zZCheck ansible-galaxy command safety.

    Safe if: list, search, info, verify actions
    rA   FNr   rB   )role
collection>   infolistsearchverifyrD   )r   
type_tokenaction_tokenrG   safe_actionss        r/   r#   r#      s    
 6{{Qu JL  C   	JJ! LE " ///u777L<''r1   c                n    d| v rdS h d}|D ]	}|| v r dS 
t          |           D ]\  }}|dk    r dS dS )zfCheck ansible-inventory command safety.

    Safe if: --list, --host, or --graph WITHOUT --output
    z--outputF>   --list--graph--hostTrU   )	enumerate)r   r>   r?   irG   s        r/   r%   r%      s~     Vu000J  6>>44  f%%  5H44  5r1   c                    d| v rdS d| v rdS dS )zjCheck ansible-pull command safety.

    Safe if: --list-hosts or --check (NOT -C which is --checkout)
    r5   Tr6   Fr8   r9   s    r/   r&   r&      s)    
 tFt5r1   c                    t          |           dk     rdS | dd         D ]!}|                    d          rh d}||v c S dS )z^Check ansible-config command safety.

    Safe if: list, dump, view, validate subcommands
    rA   Fr   NrB   >   dumprL   rC   validaterD   r   rG   rQ   s      r/   r'   r'      sk    
 6{{Qu  % %C   	;;;$$$$5r1   c                
    d| v S )zJCheck ansible-console command safety.

    Safe if: --list-hosts only
    r5   r8   r9   s    r/   r)   r)      s    
 V##r1   c                    t          |           dk     rdS | dd         D ]!}|                    d          rh d}||v c S dS )zTCheck ansible-test command safety.

    Safe if: env, sanity, units subcommands
    rA   Fr   NrB   >   envunitssanityrD   r\   s      r/   r*   r*      sk    
 6{{Qu  % %C   	111$$$$5r1   strc                R    | dd         D ]}|                     d          s|c S dS )z+Extract first non-flag token as subcommand.r   NrB    rE   rF   s     r/   _get_subcommandrf      sB      $$ 	LLL	2r1   c                $    t          |           pdS )z8Get ansible-vault action (encrypt, decrypt, view, etc.).r   rf   r9   s    r/   r"   r"          6""+e+r1   c                d    d | dd         D             }t          |          dk    r|d         S dS )z0Get ansible-galaxy action (install, list, etc.).c                <    g | ]}|                     d           |S )rB   re   ).0ts     r/   
<listcomp>z&_get_galaxy_action.<locals>.<listcomp>   s)    <<<1!,,s*;*;<Q<<<r1   r   NrA   r   )r   )r   partss     r/   r$   r$      s<     =<qrr
<<<E
5zzQQx5r1   c                $    t          |           pdS )zGet ansible-config action.r   rh   r9   s    r/   r(   r(      ri   r1   c                $    t          |           pdS )zGet ansible-test action.r   rh   r9   s    r/   r+   r+     ri   r1   N)r   r   r   r   )r   r2   r   r3   )r   r2   r   rb   )__doc__
__future__r   	dippy.clir   r   COMMANDS	frozensetr   r0   r   r    r!   r#   r%   r&   r'   r)   r*   rf   r"   r$   r(   r+   r8   r1   r/   <module>rw      s    # " " " " " 4 4 4 4 4 4 4 4   	 (@ (@ (@ (@V	 	 	 	   &   $( ( ( (8   ,	 	 	 	   $$ $ $ $   $   , , , ,
   , , , ,
, , , , , ,r1   