
    2                         S 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.    N)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   /   "    	t$#*'-#*	*r   c                 H    A [        U5      Ul        [        U5      Ul        U$ r   r   r   s      r   GetProjectAssetReqHookr    7   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'   ?   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   ListAssetSecurityMarksReqHookr.   K   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+   r,   name
updateMaskr   r   s      r   UpdateAssetSecurityMarksReqHookr2   U   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   _GetAssetNamer=   _   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                  -   $ )r4   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.r5   )r6   r7   r8   r9   r   r   r:   s      r   r,   r,   m   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=")r9   r=   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$ r@   )r9   r,   rA   rB   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.)r9   organizationr   )r   s    r   r+   r+      s6    DJJ4,,8
	NO O 9r   )__doc__r6   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'   r.   r2   r=   r,   r   r   r+    r   r   <module>rN      s`    A 
 I F A @ J P	9J Or   