
                             S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKJr	  SSK
Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  S rS rS rS rS rS rS rS rS rS rS rS rg)z:Declarative Request Hooks for Cloud SCC's Asset responses.    )absolute_import)division)print_function)unicode_literalsN)securitycenter_client)InvalidSCCInputError)CleanUpUserInput)GetOrganization)GetParentFromResourceName) GetParentFromPositionalArgumentsc                     A [        U5      Ul        UR                  b  [        UR                  5      Ul        UR                  Ul        SUl        U$ zDHook up filter such that the CSCC filter is used rather than gcloud. )r   parent	fieldMaskr	   filterrefargsreqs      :lib/googlecloudsdk/command_lib/scc/assets/request_hooks.pyListAssetsReqHookr       sB    	/5#*]]$S]]3CM{{#*$+	*    c                 H    A [        U5      Ul        [        U5      Ul        U$ z0Generate organization name from organization id.)r   r   !_GetNameOrResourceFilterForParentr   r   s      r   DescribeAssetReqHookr   +   s"    	/5#*06#*	*r   c                 H    A [        U5      Ul        [        U5      Ul        U$ r   r
   r   _GetNameOrResourceFilterr   r   s      r   GetParentAssetReqHookr!   3   "    	t$#*'-#*	*r   c                 H    A [        U5      Ul        [        U5      Ul        U$ r   r   r   s      r   GetProjectAssetReqHookr$   ;   r"   r   c                     A [        U5      Ul        UR                  (       d*  [        R                  " 5       nUR                  5       Ul        UR                  UR                  l        SUl        U$ r   )r   r   groupAssetsRequest	sc_clientGetMessagesGroupAssetsRequestr   )r   r   r   messagess       r   GroupAssetsReqHookr+   C   sW    	/5#*			$$&H%88:C"&++#$+	*r   c                 n    A [        U5        [        U5      n[        U5      Ul        SU-   S-   Ul        U$ )z'Retrieves records for a specific asset.name="")$_ValidateMutexOnAssetAndOrganization_GetAssetNameForParentr   r   r   )r   r   r   
asset_names       r   ListAssetSecurityMarksReqHookr2   O   s9    	&t,%d+*(4#*:%,#*	*r   c                     A [        U5        [        U5      S-   Ul        UR                  b  [	        UR                  5      Ul        U$ )z>Generate a security mark's name using org, source and finding.z/securityMarks)r/   r0   name
updateMaskr	   r   s      r   UpdateAssetSecurityMarksReqHookr6   Y   s>    	&t,#D),<<#(^^%cnn5CN	*r   c                 ~   [         R                  " S5      n[         R                  " S5      nUR                  U R                  5      (       d+  UR                  U R                  5      (       d  [	        S5      eUR                  U R                  5      (       a  U R                  $ [        U 5      S-   U R                  -   $ ):Prepares asset relative path using organization and asset.z"organizations/[0-9]+/assets/[0-9]+z[0-9]+zEAsset must match either organizations/[0-9]+/assets/[0-9]+ or [0-9]+./assets/)recompilematchassetr   r
   r   resource_pattern
id_patterns      r   _GetAssetNamerA   c   s    ZZ DEzz(#*

 
 
,
,


4::
&
&
OQ QDJJ''::			+djj	88r   c                 ~   [         R                  " S5      n[         R                  " S5      nUR                  U R                  5      (       d+  UR                  U R                  5      (       d  [	        S5      eUR                  U R                  5      (       a  U R                  $ [        U 5      S-   U R                  -   $ )r8   z3^(organizations|projects|folders)/.*/assets/[0-9]+$z^[0-9]+$zdAsset argument must match either be the full resource name of the asset or only the number asset id.r9   )r:   r;   r<   r=   r   r   r>   s      r   r0   r0   q   s    ZZ;=zz*%*

 
 
,
,


4::
&
&
	12 2 DJJ''::	)$	/*	<tzz	IIr   c                 n    SnU R                   b  S[        U 5      -   S-   nU$ SU R                  -   S-   nU$ z<Returns a filter with either name or resourceName as filter.r   r-   r.   z'securityCenterProperties.resourceName=")r=   rA   resource_namer   request_filters     r   r    r       sL    .	ZZt!44t;N 
 @$BTBTTW[[N	r   c                 n    SnU R                   b  S[        U 5      -   S-   nU$ SU R                  -   S-   nU$ rD   )r=   r0   rE   rF   s     r   r   r      sM    .	ZZ!7!==DN 
 @$BTBTTW[[N	r   c                 V    SU R                   ;   a  U R                  b  [        S5      egg)zIValidates that only a full resource name or split arguments are provided./NzdOnly provide a full resouce name (organizations/123/assets/456) or an --organization flag, not both.)r=   organizationr   )r   s    r   r/   r/      s6    DJJ4,,8
	NO O 9r   )__doc__
__future__r   r   r   r   r:   googlecloudsdk.api_lib.sccr   r'   %googlecloudsdk.command_lib.scc.errorsr   $googlecloudsdk.command_lib.scc.hooksr	   r
   r   #googlecloudsdk.command_lib.scc.utilr   r   r   r!   r$   r+   r2   r6   rA   r0   r    r   r/    r   r   <module>rS      sj    A &  % ' 	 I F A @ J P	9J Or   