
    5                        S 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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\R2                  \R4                  " \R6                  R8                  \R6                  R:                  5       " S S\R<                  5      5       5       r\R2                  \R4                  " \R6                  R@                  5       " S S\R<                  5      5       5       r!g)z-recommender API recommendations list command.    )absolute_import)division)unicode_literalsN)
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)List8   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.ArgsH   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)r7   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)r7   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/r3   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.)r9   r   AssetSearchClientDEFAULT_API_VERSIONr=   SearchAllResourcesrC   r?   r4   locationrF   	assetTyper3   foldersextendlenr   UnsupportedOperationError)r7   r8   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...)r3   r5   r6   billing_accountrI   )r   statusPrint	recursiverX   rN   r   CreateClientReleaseTrackr   	page_sizer3   r5   r6   r[   namer   GetResourceSegment)r7   r8   rC   
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   ra   r=   )r7   r8   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   r\   r]   joinr   ra   nextapitools_exceptionsHttpBadRequestErrorBadStatusCodeErrorStopIteration	itertoolschain)r7   r8   asset_recommendersrecommendationsrecommendations_clientresource_prevlocation_prevresourcerN   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.
ro   N      zrecommenders/)	rf   splitrp   r~   rD   rQ   rk   rb   r   )	r7   r8   rC   rx   assettokensr}   rN   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
)rC   N)__name__
__module____qualname____firstlineno____doc__DETAILED_HELPdetailed_helpstaticmethodr'   r9   r?   boolrF   rX   rf   rk   r   r   __static_attributes__ r)   r&   r   r   8   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)ListOriginaliO  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.Args]  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   ra   )r7   r8   rz   r   s       r&   r   ListOriginal.Runx  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   O  s&      -2 24Dr)   r   )"r   
__future__r   r   r   rv   apitools.base.pyr   rr   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)   