
    =5                        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S	KJr  SS
KJr  SSKJr  SSKJr  SS0rSr\R*                  \R,                  " \R.                  R0                  \R.                  R2                  5       " S S\R4                  5      5       5       r\R*                  \R,                  " \R.                  R8                  5       " S S\R4                  5      5       5       rg)z-recommender API recommendations list command.    N)
exceptions)client_util)	locations)recommendation)recommenders)arg_parsers)base)flags)logEXAMPLESz
          Lists recommendations for a Cloud project.
            $ {command} --project=project-id --location=global --recommender=google.compute.instance.MachineTypeRecommender
        a  
        table(
          name.basename(): label=RECOMMENDATION_ID,
          primaryImpact.category: label=PRIMARY_IMPACT_CATEGORY,
          stateInfo.state: label=RECOMMENDATION_STATE,
          lastRefreshTime: label=LAST_REFRESH_TIME,
          priority: label=PRIORITY,
          recommenderSubtype: label=RECOMMENDER_SUBTYPE,
          description: label=DESCRIPTION
        )
    c                   d    \ rS rSrSr\r\S 5       rS r	S r
S\4S jrS rS	 rS
 rS rS rSrg)List5   a  List recommendations for Google Cloud resources.

This command lists all recommendations for the specified Google Cloud
resource, location, and recommender. If a recommender or location is not
specified, recommendations for all supported recommenders or locations,
respectively, are listed. If the `--recursive` flag is set,
recommendations for child resources and projects are also listed.
Supported recommenders can be found here:
https://cloud.google.com/recommender/docs/recommenders.
c                     [         R                  " U 5        U R                  SSSSS9  U R                  SSSSS9  U R                  S	S[        R                  S
S9  U R
                  R                  [        5        g)Args is called by calliope to gather arguments for this command.

Args:
  parser: An argparse parser that you can use to add arguments that go on
    the command line after this command.

--locationLOCATIONFzLocation to list recommendations for. If no location is specified, recommendations for all supported locations are listed. Not specifying a location can add 15-20 seconds to the runtime.metavarrequiredhelp--recommenderRECOMMENDERa'  Recommender to list recommendations for. If no recommender is specified, recommendations for all supported recommenders are listed. Supported recommenders can be found here: https://cloud.google.com/recommender/docs/recommenders Not specifying a recommender can add 15-20 seconds to the runtime.z--recursivea  
            In addition to listing the recommendations for the specified
            organization or folder, recursively list all of
            the recommendations for the resource's child resources, including
            their descendants (for example, a folder's sub-folders), and for the
            resource's child projects. For example, when using the
            `--recursive` flag and specifying an organization, the response
            lists all of the recommendations associated with that
            organization, all of the recommendations associated with that
            organization's folders and sub-folders, and all of the
            recommendations associated with that organization's child
            projects.  The maximum number of resources (organization,
            folders, projects, and descendant resources) that can be accessed at
            once with the `--recursive` flag is 100. For a larger
            number of nested resources, use
            [BigQuery export](https://cloud.google.com/recommender/docs/bq-export/export-recommendations-to-bq).
            Using `--recursive` can add 15-20 seconds per resource to the
            runtime.
            )r   actionr   N)r
   AddParentFlagsToParseradd_argumentr   StoreTrueFalseActiondisplay_info	AddFormatDISPLAY_FORMATparsers    /lib/surface/recommender/recommendations/list.pyArgs	List.ArgsE   s     
  (
O  	    //	  0 !!.1    c                     SUl         SS/Ul        SUl        SUl        UR                  (       a  SUR                  -   Ul        UR                  (       a  SUR                  -   Ul        UR                  (       a  SUR                  -   Ul        U$ )zSetups up args to search all resources under a project, folder, or organization.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  (argparse.Namespace) args with additional parameters setup
*+cloudresourcemanager.googleapis.com/Project*cloudresourcemanager.googleapis.com/Folder
createTimez	projects/zorganizations/zfolders/)	read_maskasset_typesorder_byqueryprojectscopeorganizationfolder)selfargss     r#   setArgsList.setArgs   s{     DN 	64	D !DMDJ||-dj#d&7&77dj{{+djKr&   c                 :    [        U[        5      (       a  US   $ U$ )Nr   )
isinstancelist)r4   asset_ins     r#   read	List.read   s    (D!!a[or&   returnc                 Z    XR                   ;  a  U R                   R                  U5        gg)NTF)resource_locationsappend)r4   resource_locations     r#   AddResourceList.AddResource   s)     7 77
$$%67r&   c                 j   U R                  U5      n[        R                  " [        R                  5      n[	        UR                  U5      5      n/ U l        U GHK  nU R                  UR                  5       SUR                   3nSU;  a  U R                  U5        UR                  S:X  a9  U R                  U R                  UR                  5       SUR                   35        UR                  S:X  a~  U R                  U R                  UR                  5       SUR                   35      (       a@  U R                  UR                  5      Ul        UR                  UR                  U5      5        [        U R                  5      S:  d  GM8  [         R"                  " S5      e   U R                  $ )zSearch all nested resources under a project, folder, or organization.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  (List): a list of all Google Cloud resource,location pairs
/locations/r0   r)   r*   d   zThe maximum number of resources (organizations, folders, projects, and descendant resources) that can be accessed to list recommendations is 100. To access a larger number of resources, use BigQuery Export.)r6   r   AssetSearchClientDEFAULT_API_VERSIONr:   SearchAllResourcesr@   r<   r1   locationrC   	assetTyper0   foldersextendlenr   UnsupportedOperationError)r4   r5   client	resourcesrparent_resources         r#   searchAllResourcesList.searchAllResources   se    <<D**;+J+JKFV..t45I D99TZZ01QZZLIo	/	)) 
E	EDIIaii01QZZLIJ ++E
E$))AII"6!7{1::,OPPYYqyy)
22489	T$$	%	+22B
 	
# . """r&   c                    [         R                  R                  S5        UR                  (       a  U R	                  U5      nU$ UR
                  c  [        R                  " U R                  5       5      nUR                  UR                  UR                  UR                  UR                  UR                  S9 Vs/ s H  nUR                  PM     nnU$ [         R"                  " U5      SUR
                   3-   /nU$ s  snf )a  Iterate through search all resources response and collects unique Google Cloud resouce,location pairs.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  (List): a list of all Google Cloud resource,location pairs
z2Collecting Resources... This may take some time...)r0   r2   r3   billing_accountrF   )r   statusPrint	recursiverU   rK   r   CreateClientReleaseTrackr   	page_sizer0   r2   r3   rX   namer
   GetResourceSegment)r4   r5   r@   
loc_clientlocs        r#   CollectAssetsList.CollectAssets   s     JJIJ~~2248$ ! 
	++D,=,=,?@
 "!..{{ $ 4 4 ' 	
 HH 	 	
  $$T*{4==/-JJ
 	
s   <C?c                     [         R                  " U R                  5       5      nUR                  UR                  5      n[        U5      $ )zList all Recommenders.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  (list) all recommenders in a list of strings
)r   r\   r]   r   r^   r:   )r4   r5   recommenders_clientrecommenders_responses       r#   ListRecommendersList.ListRecommenders   s?     '33D4E4E4GH/44T^^D%&&r&   c                    / n[         R                  " U R                  5       5      nSnSnU H  u  pxn	Xu:w  d  X:w  a%  [        R                  R                  SU SU 35        UnUnSR                  XxU	/5      n
UR                  XR                  5      n [        U5      n[        R                  " X<4U5      nM     U$ ! [        R                  [        R                  [        4 a     M  f = f)aP  Collects all recommendations for a given Google Cloud Resource.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.
  asset_recommenders: list, The list of Google Cloud resource recommender
    URL to collect recommendations

Returns:
  (Recommendations) a iterator for all returned recommendations
NzReading Recommendations for:  /)r   r\   r]   r   rY   rZ   joinr   r^   nextapitools_exceptionsHttpBadRequestErrorBadStatusCodeErrorStopIteration	itertoolschain)r4   r5   asset_recommendersrecommendationsrecommendations_clientresource_prevlocation_prevresourcerK   recommenderparent_namenew_recommendationspeeks                r#   GetRecommendationsList.GetRecommendations  s     O+889J9J9LMMM+='K		"h&?

8
!H:NOmmHHh+>?k277
~~'( "
7$7o# ,>*  
1
1

0
0
 
 	s   B>>)C+*C+c           
         U R                  U5      n/ nU H  nUR                  S5      nSR                  USS 5      nSR                  USS 5      nUR                  b"  UR	                  XgSUR                   345        Mk  UR                  U R                  U5       Vs/ s H  nXgSUR                   34PM     sn5        M     U R                  X5      $ s  snf )Run 'gcloud recommender recommendations list'.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  The list of recommendations for this project.
rl   N      zrecommenders/)	rc   splitrm   r{   rA   rN   rh   r_   r   )	r4   r5   r@   ru   assettokensrz   rK   responses	            r#   RunList.Run+  s     ++D1 #{{3f&!*%h&1+&h				%!!=1A1A0B!CD	
 	!! 11$7#
7 =!@A7#
 	 $ ""4<<#
s   C
)r@   N)__name__
__module____qualname____firstlineno____doc__DETAILED_HELPdetailed_helpstaticmethodr$   r6   r<   boolrC   rU   rc   rh   r   r   __static_attributes__ r&   r#   r   r   5   sS    	  -72 72r:d '#R D''R=r&   r   c                   2    \ rS rSrSr\r\S 5       rS r	Sr
g)ListOriginaliL  aY  List operations for a recommendation.

This command lists all recommendations for a given Google Cloud entity ID,
location, and recommender. Supported recommenders can be found here:
https://cloud.google.com/recommender/docs/recommenders.
The following Google Cloud entity types are supported: project,
billing_account, folder and organization.
c                     [         R                  " U 5        U R                  SSSSS9  U R                  SSSSS9  U R                  R	                  [
        5        g	)
r   r   r   Tz%Location to list recommendations for.r   r   r   zRecommender to list recommendations for. Supported recommenders can be found here: https://cloud.google.com/recommender/docs/recommenders.N)r
   r   r   r   r   r    r!   s    r#   r$   ListOriginal.ArgsZ  sk     
  (
4	   G  	 !!.1r&   c                     [         R                  " U R                  5       5      n[        R                  " U5      nUR                  X1R                  5      $ )r   )r   r\   r]   r
   GetRecommenderNamer   r^   )r4   r5   rw   r|   s       r#   r   ListOriginal.Runu  sC     ,889J9J9LM**40K!&&{NNCCr&   r   N)r   r   r   r   r   r   r   r   r$   r   r   r   r&   r#   r   r   L  s&      -2 24Dr&   r   )r   rs   apitools.base.pyr   ro   googlecloudsdk.api_lib.assetr   "googlecloudsdk.api_lib.recommenderr   r   r   googlecloudsdk.callioper   r	   &googlecloudsdk.command_lib.recommenderr
   googlecloudsdk.command_lib.rungooglecloudsdk.corer   r   r    UniverseCompatibleReleaseTracksr]   ALPHABETAListCommandr   GAr   r   r&   r#   <module>r      s    4  > 4 8 = ; / ( 8 5 # 	
 D%%++T->->-C-CDR=4 R= E R=j D%%(()4D4## 4D * 4Dr&   