
                            d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d Zej6                   G d dej8                               Zy)z9Implementation of managed-folders set-iam-policy command.    )absolute_import)division)unicode_literalsN)api_factory)metadata_field_converters)base)iam_util)errors_util)flags)folder_util)iam_command_util)name_expansion)storage_url)wildcard_iterator)set_iam_policy_task)logc              #   j  K   t        j                         }t        j                  | t        j
                  j                  d|      D ].  }t        j                  |j                  j                  |       0 |j                         D ]  \  }}|r	t        j                  |      rt        j                  d|z          7t        j                   |      }t#        j$                  |j&                        j)                  |j*                  |j,                         t        j                  ||        yw)z+Generates SetIamPolicyTask's for execution.F)managed_folder_settingraise_error_for_unmatched_urlsurl_found_match_trackerz`Not creating managed folder for URL containing wildcard that did not match any managed folders: N)collectionsOrderedDictr   NameExpansionIteratorr   ManagedFolderSettingLIST_WITHOUT_OBJECTSr   SetManagedFolderIamPolicyTaskresourcer   itemsr   contains_wildcardr   warningstorage_url_from_stringr   get_apischemecreate_managed_folderbucket_nameresource_name)url_stringspolicyr   name_expansion_result
url_stringfound_matchurls          5lib/surface/storage/managed_folders/set_iam_policy.py_set_iam_policy_task_iteratorr.   &   s    '335-CC(==RR%*5	  
;
;&&22   "9!>!>!@j+**:6	kk)
 

-
-j
9C

#99** 
;
;C
HH "As   D1D3c                   0    e Zd ZdZdddZed        Zd Zy)SetIamPolicyz(Set the IAM policy for a managed folder.z
      Set the IAM policy for a managed folder. For more information, see [Cloud
      Identity and Access
      Management](https://cloud.google.com/storage/docs/access-control/iam).
      z
      To set the IAM policy in POLICY-FILE on a managed folder `managed-folder` in a bucket `bucket`:

        $ {command} gs://bucket/managed-folder POLICY-FILE
      )DESCRIPTIONEXAMPLESc                     | j                  ddd       | j                  ddd       t        j                  |        t        j                  |        y )	Nurls+z4URLs for managed folders to apply the IAM policy to.)nargshelpz-ez--etagzCustom etag to set on IAM policy. API will reject etags that do not match this value, making it useful as a precondition during concurrent operations.)r7   )add_argumentr	   AddArgForPolicyFiler   add_continue_on_error_flag)parsers    r-   ArgszSetIamPolicy.ArgsV   s\    
C  
 &	     (	$$V,    c                 d   |j                   D ]7  }t        j                  |      }t        j                  |j
                  |       9 t        j                  |j                  |j                        }t        j                  t        |j                   |      |j                        \  }}|| _        |S )N)custom_etag)r4   r   r!   r
   "raise_error_if_not_gcs_folder_typecommand_pathr   process_iam_filepolicy_fileetagr   execute_set_iam_task_iteratorr.   continue_on_error	exit_code)selfargsr*   r,   r(   rG   outputs          r-   RunzSetIamPolicy.Runi   s    ii
//
;c44T5F5FL   '77diiF )FF%dii8$:P:PIv DNMr=   N)__name__
__module____qualname____doc__detailed_helpstaticmethodr<   rK    r=   r-   r0   r0   E   s/    0


- - -$r=   r0   )rO   
__future__r   r   r   r   googlecloudsdk.api_lib.storager   'googlecloudsdk.api_lib.storage.gcs_jsonr   googlecloudsdk.callioper   googlecloudsdk.command_lib.iamr	   "googlecloudsdk.command_lib.storager
   r   r   r   r   r   r   (googlecloudsdk.command_lib.storage.tasksr   googlecloudsdk.corer   r.   UniverseCompatibleCommandr0   rR   r=   r-   <module>r]      si    @ &  '  6 M ( 3 : 4 : ? = : @ H #I> /4<< / /r=   