File: //usr/lib/google-cloud-sdk/platform/gsutil/gslib/__pycache__/command.cpython-312.pyc
�
��N� � � � d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlZdd lmZ dd
lmZ ddlmZ ddlmZ dd
lmZ ddlm Z ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl%m'Z' ddl(m)Z) ddl(m*Z* ddl(m+Z+ ddl(m,Z, ddl(m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl2m4Z4 ddl2m5Z5 ddl2m6Z6 ddl2m7Z7 ddl8m9Z9 dd l8m:Z: dd!l8m;Z; dd"l8m<Z< dd#l8m=Z= dd$l>m?Z@ dd%lAmBZB dd&lAmCZC dd'lAmDZD dd(lAmEZE dd)lFmGZG dd*lFmHZH dd+lFmIZI dd,lJmKZK dd-lJmLZL dd.lMmNZN dd/lMmOZO ddlPZdd0lPmQZQ dd1lPmRZR dd2lPmSZS dd3lPmTZT dd4lPmUZU dd5lPmVZV dd6lPmWZW dd7lPmXZX dd8lPmYZY dd9lZm[Z[ dd:l\m]Z] dd;l^m_Z_ dd<l^m`Z` dd=lambZb dd>lamcZc dd?lamdZd dd@lemfZf ddAlgmhZi ddBljmkZl dCZndDZodE� ZpdF� ZqdG� ZrdH� Zsd}dI�ZtdJ� Zug ZvdK� ZwdL� ZxdM� ZydNZzdOZ{dP� Z|dCZ}dQdRgdQdSgdQdTgdUdSgdUdTgdVdRgdVdSgdVdTgg dW�g dX�dYdSgdZdSgdZdTgd[dSgd[dTgd\�Z~d]� Zd^� Z�d_� Z� ed`g da�� Z� G db� dce$e]� Z� G dd� dee�� Z� G df� dg edgdh� � Z�di� Z� G dj� dke�j � Z� G dl� dme�� Z� G dn� doe�j � Z� G dp� dqe�� Z�dr� Z� G ds� dte�� Z�du� Z�dv� Z�dw� Z�dx� Z�dy� Z�dz� Z�d{� Z�d|� Z�y# em$ r dZlY ��w xY w)~ax Base class for gsutil commands.
In addition to base class code, this file contains helpers that depend on base
class state (such as GetAndPrintAcl) In general, functions that depend on
class state and that are used by multiple commands belong in this file.
Functions that don't depend on class state belong in util.py, and non-shared
helpers belong in individual subclasses.
� )�absolute_import)�print_function)�division)�unicode_literalsN)�
namedtuple)�
StorageUri)�AccessDeniedException)�ArgumentException)�ServiceException)�CloudApiDelegator)�ApiSelector)�GsutilApiMapFactory)�CommandException)�HelpProvider)�CaptureThreadStatException)�LogPerformanceSummaryParams)�CopyObjectInfo)�CopyObjectsIterator)�NameExpansionIterator)�NameExpansionResult)�SeekAheadNameExpansionIterator)�PluralityCheckableIterator)�SeekAheadThread)�ChildProcessSignalHandler)�GetCaughtSignals)�KillProcess)�MultithreadedMainSignalHandler)�RegisterSignalHandler)�HaveFileUrls)�HaveProviderUrls)�StorageUrlFromString)�UrlsAreForSingleProvider)�UrlsAreMixOfBucketsAndObjects)�storage_v1_messages)�FinalMessage)�MetadataMessage)�PerformanceSummaryMessage)�ProducerThreadMessage)�MainThreadUIQueue)�UIController)�UIThread)�GetFriendlyConfigFilePaths)�!GetMaxConcurrentCompressedUploads)�NO_MAX)�UTF8)�
AtomicDict)�$CheckMultiprocessingAvailableAndInit)�multiprocessing_context)�ProcessAndThreadSafeInt)�PutToQueueWithTimeout)�SEEK_AHEAD_JOIN_TIMEOUT)�ShouldProhibitMultiprocessing)�UI_THREAD_JOIN_TIMEOUT)�ZERO_TASKS_TO_DO_ARGUMENT)�RsyncDiffToApply)�GcloudStorageCommandMixin)�GetTermLines)�
IS_WINDOWS)�AclTranslation)�GetNonMetadataHeaders)�PRIVATE_DEFAULT_OBJ_ACL)�CreateWildcardIterator)�queue)�Random� i� c �: � t j | � }|j syd|_ |j t j
j � t j � }|j t j d� � |j |� |S )a� Fetches a logger with the given name that resembles 'print' output.
Initial Logger Configuration:
The logger abides by gsutil -d/-D/-DD/-q options. If none of those options
were specified at invocation, the returned logger will display all messages
logged with level INFO or above. Log propagation is disabled.
If a logger with the specified name has already been created and configured,
it is not reconfigured, e.g.:
foo = CreateOrGetGsutilLogger('foo') # Creates and configures Logger "foo".
foo.setLevel(logging.DEBUG) # Change level from INFO to DEBUG
foo = CreateOrGetGsutilLogger('foo') # Does not reset level to INFO.
Args:
command_name: (str) Command name to create logger for.
Returns:
A logging.Logger object.
Fz%(message)s)�logging� getLogger�handlers� propagate�setLevel�root�level�
StreamHandler�setFormatter� Formatter�
addHandler)�command_name�log�log_handlers � platform/gsutil/gslib/command.py�CreateOrGetGsutilLoggerrT t sr � �, ���,�'�#�
����C�M��L�L����#�#�$��'�'�)�K����W�.�.�}�=�>��N�N�;�� �*� c �: � | j j |� y �N)�logger� exception��cls�es rS �_DefaultExceptionHandlerr] � s � ��*�*���q�rU c �� � | j sy|j }|j � rFt j j |j � r| j j d|� yy)NTzSkipping symbolic link %s...F) �exclude_symlinks�expanded_storage_url� IsFileUrl�os�path�islink�object_namerX �info)�command_instance�url�exp_src_urls rS �_UrlArgCheckerrj � sW � � � *� *���(�(�+�����������0G�0G�!H���� � �!?��M��
rU c � � y)NT� )�unused_argss rS �DummyArgCheckerrn � s � �
rU c �( � | j ||�� S )N��thread_state)�
SetAclFunc)r[ �name_expansion_resultrq s rS �SetAclFuncWrapperrt � s � � ���-�L�� I�IrU c �Z � | j j t |� � d| _ y)zDException handler that maintains state about post-completion status.FN)rX �error�str�everything_set_okayrZ s rS �SetAclExceptionHandlerry � s � ��*�*���3�q�6��!�#�rU c �^ � t r't t dd � rt j � y y y )N�atfork)�CryptoRandom�getattrr{ rl rU rS �_CryptoRandomAtForkr~ � s% � ��g�l�H�d�;�
���� <�\rU c �b � t j t � } t j | � | S rW )r2 �Queue�MAX_QUEUE_SIZE�queues�append�� new_queues rS �_NewMultiprocessingQueuer� � s$ � �%�+�+�N�;�)��-�-� �� �rU c �b � t j t � } t j | � | S rW )r� r� r� r� r� s rS �_NewThreadsafeQueuer� � s"