
    (ph|                         S 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\
5      r " S	 S
\
5      r " S S\5      r " S S\5      r " S S\5      rg)z%Manage access to objects and buckets.    ) _add_generation_match_parameters)create_trace_span)_DEFAULT_TIMEOUT)DEFAULT_RETRY))DEFAULT_RETRY_IF_METAGENERATION_SPECIFIEDc                   p    \ rS rSrSrSrSrSrSS 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)
_ACLEntity   a  Class representing a set of roles for an entity.

This is a helper class that you likely won't ever construct
outside of using the factor methods on the :class:`ACL` object.

:type entity_type: str
:param entity_type: The type of entity (ie, 'group' or 'user').

:type identifier: str
:param identifier: (Optional) The ID or e-mail of the entity. For the special
                   entity types (like 'allUsers').
READERWRITEROWNERNc                 <    X l         [        / 5      U l        Xl        g N)
identifiersetrolestype)selfentity_typer   s      K/var/www/html/venv/lib/python3.13/site-packages/google/cloud/storage/acl.py__init___ACLEntity.__init__*   s    $W
	    c                 l    U R                   (       d  [        U R                  5      $ SR                  U S9$ )Nz{acl.type}-{acl.identifier})acl)r   strr   formatr   s    r   __str___ACLEntity.__str__/   s+    tyy>!077D7AAr   c                 F    SU  SSR                  U R                  5       S3$ )Nz<ACL Entity: z (z, z)>)joinr   r   s    r   __repr___ACLEntity.__repr__5   s%    tfBtyy'<&=R@@r   c                     U R                   $ )zGet the list of roles permitted by this entity.

:rtype: list of strings
:returns: The list of roles associated with this entity.
)r   r   s    r   	get_roles_ACLEntity.get_roles8   s     zzr   c                 :    U R                   R                  U5        g)zWAdd a role to the entity.

:type role: str
:param role: The role to add to the entity.
N)r   addr   roles     r   grant_ACLEntity.grant@   s     	

tr   c                 Z    XR                   ;   a  U R                   R                  U5        gg)zaRemove a role from the entity.

:type role: str
:param role: The role to remove from the entity.
N)r   remover*   s     r   revoke_ACLEntity.revokeH   s%     ::JJd# r   c                 B    U R                  [        R                  5        g)z(Grant read access to the current entity.N)r,   r	   READER_ROLEr   s    r   
grant_read_ACLEntity.grant_readQ       

:))*r   c                 B    U R                  [        R                  5        g)z)Grant write access to the current entity.N)r,   r	   WRITER_ROLEr   s    r   grant_write_ACLEntity.grant_writeU   r6   r   c                 B    U R                  [        R                  5        g)z)Grant owner access to the current entity.N)r,   r	   
OWNER_ROLEr   s    r   grant_owner_ACLEntity.grant_ownerY   s    

:(()r   c                 B    U R                  [        R                  5        g)z+Revoke read access from the current entity.N)r0   r	   r3   r   s    r   revoke_read_ACLEntity.revoke_read]       J**+r   c                 B    U R                  [        R                  5        g)z,Revoke write access from the current entity.N)r0   r	   r8   r   s    r   revoke_write_ACLEntity.revoke_writea   rB   r   c                 B    U R                  [        R                  5        g)z,Revoke owner access from the current entity.N)r0   r	   r<   r   s    r   revoke_owner_ACLEntity.revoke_ownere   s    J))*r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r3   r8   r<   r   r   r#   r&   r,   r0   r4   r9   r=   r@   rD   rG   __static_attributes__ r   r   r	   r	      sV     KKJ 
BA$++*,,+r   r	   c                   V   \ rS rSrSrSrSrSSSSS	S
S.r\" / SQ5      r	 Sr
SrSrSrS r\4S jr\S 5       rS rS rS rS rS'S jrS rS'S jrS rS rS rS rS rS r\ S 5       r!S  r"S\\#4S! jr$SSSS\\%4S" jr&SSSSSS\\%4S# jr'SSSSS\\%4S$ jr(SSSSS\\%4S% jr)S&r*g)(ACLj   z7Container class representing a list of access controls.r   predefinedAclprojectPrivate
publicReadpublicReadWriteauthenticatedReadbucketOwnerReadbucketOwnerFullControl)zproject-privatezpublic-readzpublic-read-writezauthenticated-readzbucket-owner-readzbucket-owner-full-control)privaterT   rU   rV   rW   rX   rY   FNc                     0 U l         g r   )entitiesr   s    r   r   ACL.__init__   s	    r   c                 F    U R                   (       d  U R                  US9  gg)zLoad if not already loaded.

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`
)timeoutN)loadedreload)r   r_   s     r   _ensure_loadedACL._ensure_loaded   s     {{KKK( r   c                     U R                   R                  X5      nU(       a  XR                  ;  a  [        SU 35      eU$ )a
  Ensures predefined is in list of predefined json values

:type predefined: str
:param predefined: name of a predefined acl

:type predefined: str
:param predefined: validated JSON name of predefined acl

:raises: :exc: `ValueError`: If predefined is not a valid acl
zInvalid predefined ACL: )PREDEFINED_XML_ACLSgetPREDEFINED_JSON_ACLS
ValueError)cls
predefineds     r   validate_predefinedACL.validate_predefined   sA     ,,00H
*,D,DD7
|DEEr   c                 F    U R                   R                  5         SU l        g)z@Remove all entities from the ACL, and clear the ``loaded`` flag.FN)r\   clearr`   r   s    r   reset	ACL.reset   s    r   c              #      #    U R                  5         U R                  R                  5        H3  nUR                  5        H  nU(       d  M  [	        U5      US.v   M     M5     g 7f)N)entityr+   )rb   r\   valuesr&   r   )r   rr   r+   s      r   __iter__ACL.__iter__   sO     mm**,F((*4%([$?? + -s   AA%A%c                 0   US   nUS   nUS:X  a  U R                  5       nO@US:X  a  U R                  5       nO)SU;   a#  UR                  SS5      u  pEU R                  XES9n[	        U[
        5      (       d  [        SU 35      eUR                  U5        U$ )	a  Build an _ACLEntity object from a dictionary of data.

An entity is a mutable object that represents a list of roles
belonging to either a user or group or the special types for all
users and all authenticated users.

:type entity_dict: dict
:param entity_dict: Dictionary full of data from an ACL lookup.

:rtype: :class:`_ACLEntity`
:returns: An Entity constructed from the dictionary.
rr   r+   allUsersallAuthenticatedUsers-   r   r   zInvalid dictionary: )allall_authenticatedsplitrr   
isinstancer	   rh   r,   )r   entity_dictrr   r+   r   r   s         r   entity_from_dictACL.entity_from_dict   s     X&6"ZXXZF..++-FF]&,ll3&:#K[[[[PF&*--3K=ABBTr   c                 R    U R                  5         [        U5      U R                  ;   $ )zReturns whether or not this ACL has any entries for an entity.

:type entity: :class:`_ACLEntity`
:param entity: The entity to check for existence in this ACL.

:rtype: bool
:returns: True of the entity exists in the ACL.
)rb   r   r\   r   rr   s     r   
has_entityACL.has_entity   s#     	6{dmm++r   c                 l    U R                  5         U R                  R                  [        U5      U5      $ )ag  Gets an entity object from the ACL.

:type entity: :class:`_ACLEntity` or string
:param entity: The entity to get lookup in the ACL.

:type default: anything
:param default: This value will be returned if the entity
                doesn't exist.

:rtype: :class:`_ACLEntity`
:returns: The corresponding entity or the value provided
          to ``default``.
)rb   r\   rf   r   )r   rr   defaults      r   
get_entityACL.get_entity   s+     	}}  Vg66r   c                 R    U R                  5         XR                  [        U5      '   g)zkAdd an entity to the ACL.

:type entity: :class:`_ACLEntity`
:param entity: The entity to add to this ACL.
N)rb   r\   r   r   s     r   
add_entityACL.add_entity   s      	%+c&k"r   c                     [        XS9nU R                  U5      (       a  U R                  U5      nU$ U R                  U5        U$ )a_  Factory method for creating an Entity.

If an entity with the same type and identifier already exists,
this will return a reference to that entity.  If not, it will
create a new one and add it to the list of known entities for
this ACL.

:type entity_type: str
:param entity_type: The type of entity to create
                    (ie, ``user``, ``group``, etc)

:type identifier: str
:param identifier: The ID of the entity (if applicable).
                   This can be either an ID or an e-mail address.

:rtype: :class:`_ACLEntity`
:returns: A new Entity or a reference to an existing identical entity.
r{   )r	   r   r   r   )r   r   r   rr   s       r   rr   
ACL.entity  sE    & K??6""__V,F  OOF#r   c                 "    U R                  SUS9$ )zFactory method for a user Entity.

:type identifier: str
:param identifier: An id or e-mail for this particular user.

:rtype: :class:`_ACLEntity`
:returns: An Entity corresponding to this user.
userr   rr   r   r   s     r   r   ACL.user  s     {{6j{99r   c                 "    U R                  SUS9$ )zFactory method for a group Entity.

:type identifier: str
:param identifier: An id or e-mail for this particular group.

:rtype: :class:`_ACLEntity`
:returns: An Entity corresponding to this group.
groupr   r   r   s     r   r   	ACL.group(  s     {{7z{::r   c                 "    U R                  SUS9$ )zFactory method for a domain Entity.

:type domain: str
:param domain: The domain for this entity.

:rtype: :class:`_ACLEntity`
:returns: An entity corresponding to this domain.
domainr   r   )r   r   s     r   r   
ACL.domain3  s     {{8{77r   c                 $    U R                  S5      $ )z~Factory method for an Entity representing all users.

:rtype: :class:`_ACLEntity`
:returns: An entity representing all users.
rw   r   r   s    r   r|   ACL.all>  s     {{:&&r   c                 $    U R                  S5      $ )zFactory method for an Entity representing all authenticated users.

:rtype: :class:`_ACLEntity`
:returns: An entity representing all authenticated users.
rx   r   r   s    r   r}   ACL.all_authenticatedF  s     {{233r   c                 h    U R                  5         [        U R                  R                  5       5      $ )zwGet a list of all Entity objects.

:rtype: list of :class:`_ACLEntity` objects
:returns: A list of all Entity objects.
)rb   listr\   rs   r   s    r   get_entitiesACL.get_entitiesN  s(     	DMM((*++r   c                     [         e)z&Abstract getter for the object client.)NotImplementedErrorr   s    r   client
ACL.clientW  s
     "!r   c                 $    Uc  U R                   nU$ )ah  Check client or verify over-ride.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: the client to use.  If not passed, falls back to the
               ``client`` stored on the current ACL.

:rtype: :class:`google.cloud.storage.client.Client`
:returns: The client passed in or the currently bound client.
)r   )r   r   s     r   _require_clientACL._require_client\  s     >[[Fr   c                    [        SS9   U R                  nU R                  U5      n0 nU R                  b  U R                  US'   U R                  R                  5         UR                  UUUUS9nSU l        UR                  SS5       H#  nU R                  U R                  U5      5        M%     SSS5        g! , (       d  f       g= f)	az  Reload the ACL data from Cloud Storage.

If :attr:`user_project` is set, bills the API request to that project.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.
:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: :class:`~google.api_core.retry.Retry`
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
zStorage.ACL.reloadnameNuserProjectquery_paramsr_   retryTitemsrO   )r   reload_pathr   user_projectr\   rn   _get_resourcer`   rf   r   r   )r   r   r_   r   pathr   foundentrys           r   ra   
ACL.reloadk  s    $ $89##D))&1FL  ,.2.?.?]+MM!(()	 ) E DK7B/ 5 5e <= 0% :99s   B(B;;
C	c
                    U R                  U5      nSS0n
Ub  / nX*U R                  '   U R                  b  U R                  U
S'   [        U
UUUUS9  U R                  nUR                  UU R                  [        U5      0U
UU	S9nU R                  R                  5         UR                  U R                  S5       H#  nU R                  U R                  U5      5        M%     SU l        g)	a  Helper for :meth:`save` and :meth:`save_predefined`.

:type acl: :class:`google.cloud.storage.acl.ACL`, or a compatible list.
:param acl: The ACL object to save.  If left blank, this will save
            current entries.

:type predefined: str
:param predefined: An identifier for a predefined ACL.  Must be one of the
    keys in :attr:`PREDEFINED_JSON_ACLS` If passed, `acl` must be None.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`

projectionfullNr   )if_generation_matchif_generation_not_matchif_metageneration_matchif_metageneration_not_matchr   rO   T)r   _PREDEFINED_QUERY_PARAMr   r   	save_path_patch_resource_URL_PATH_ELEMr   r\   rn   rf   r   r   r`   )r   r   rj   r   r   r   r   r   r_   r   r   r   resultr   s                 r   _save	ACL._save  s    h %%f-$f-!C9C556(*.*;*;L'( 3$;$;(C	
 ~~''  $s),% ( 
 	ZZ 3 3R8EOOD11%89 9 r   c	                     [        SS9   Uc  U nUR                  n	OSn	U	(       a  U R                  USUUUUUUUS9	  SSS5        g! , (       d  f       g= f)aA  Save this ACL for the current bucket.

If :attr:`user_project` is set, bills the API request to that project.

:type acl: :class:`google.cloud.storage.acl.ACL`, or a compatible list.
:param acl: The ACL object to save.  If left blank, this will save
            current entries.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
zStorage.ACL.saver   NTr   r   r   r   r_   r   )r   r`   r   )
r   r   r   r   r   r   r   r_   r   save_to_backends
             r   saveACL.save  sa    b $67{"%**"&

(;,C,C0K#  
 877s   3A
Ac	                     [        SS9   U R                  U5      nU R                  SUUUUUUUUS9	  SSS5        g! , (       d  f       g= f)a  Save this ACL for the current bucket using a predefined ACL.

If :attr:`user_project` is set, bills the API request to that project.

:type predefined: str
:param predefined: An identifier for a predefined ACL.  Must be one
                   of the keys in :attr:`PREDEFINED_JSON_ACLS`
                   or :attr:`PREDEFINED_XML_ACLS` (which will be
                   aliased to the corresponding JSON name).
                   If passed, `acl` must be None.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
zStorage.ACL.savePredefinedr   Nr   )r   rk   r   )	r   rj   r   r   r   r   r   r_   r   s	            r   save_predefinedACL.save_predefined.  sW    h $@A11*=JJJ$7(?(?,G  
 BAAs	   )<
A
c                 v    [        SS9   U R                  / UUUUUUUS9  SSS5        g! , (       d  f       g= f)a  Remove all ACL entries.

If :attr:`user_project` is set, bills the API request to that project.

Note that this won't actually remove *ALL* the rules, but it
will remove all the non-default rules.  In short, you'll still
have access to a bucket that you created even after you clear
ACL rules with this method.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
zStorage.ACL.clearr   r   r   r   r   r   r_   r   N)r   r   )r   r   r   r   r   r   r_   r   s           r   rn   	ACL.clearp  sC    b $78II$7(?(?,G  	 988s   *
8)r\   r`   r   )+rI   rJ   rK   rL   rM   r   r   re   	frozensetrg   r`   r   r   r   r   r   rb   classmethodrk   ro   rt   r   r   r   r   rr   r   r   r   r|   r}   r   propertyr   r   r   ra   r   r   r   r   rn   rN   rO   r   r   rQ   rQ   j   s`   AN- ,#.1.%= %	

 F KIL &6 	)   
@@
,7",4	:	;	8'4, " " !*:- %>X ! $ $$( 7Ur   $ $$( 7CP   $ $$( 7@H   $ $$( 7;r   rQ   c                   l   ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
SrU =r$ )		BucketACLi  zAn ACL specifically for a bucket.

:type bucket: :class:`google.cloud.storage.bucket.Bucket`
:param bucket: The bucket to which this ACL relates.
c                 6   > [         [        U ]  5         Xl        g r   )superr   r   bucket)r   r   	__class__s     r   r   BucketACL.__init__  s    i')r   c                 .    U R                   R                  $ )z&The client bound to this ACL's bucket.)r   r   r   s    r   r   BucketACL.client  s     {{!!!r   c                 L    U R                   R                   SU R                   3$ )3Compute the path for GET API requests for this ACL./)r   r   r   r   s    r   r   BucketACL.reload_path  s'     ++""#1T%8%8$9::r   c                 .    U R                   R                  $ z5Compute the path for PATCH API requests for this ACL.)r   r   r   s    r   r   BucketACL.save_path  s     {{r   c                 .    U R                   R                  $ z?Compute the user project charged for API requests for this ACL.)r   r   r   s    r   r   BucketACL.user_project  s     {{'''r   )r   )rI   rJ   rK   rL   rM   r   r   r   r   r   r   rN   __classcell__r   s   @r   r   r     s]     " " ; ;     ( (r   r   c                        \ rS rSrSrSrSrSrg)DefaultObjectACLi  z9A class representing the default object ACL for a bucket.defaultObjectAclpredefinedDefaultObjectAclrO   N)rI   rJ   rK   rL   rM   r   r   rN   rO   r   r   r   r     s    C'N:r   r   c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
SSSSSS\\4U 4S	 jjrSSSSS\\4U 4S
 jjrSSSSS\\4U 4S jjrSrU =r$ )	ObjectACLi  zAn ACL specifically for a Cloud Storage object / blob.

:type blob: :class:`google.cloud.storage.blob.Blob`
:param blob: The blob that this ACL corresponds to.
c                 6   > [         [        U ]  5         Xl        g r   )r   r   r   blob)r   r   r   s     r   r   ObjectACL.__init__  s    i')	r   c                 .    U R                   R                  $ )z$The client bound to this ACL's blob.)r   r   r   s    r   r   ObjectACL.client  s     yyr   c                 4    U R                   R                   S3$ )r   z/aclr   r   r   s    r   r   ObjectACL.reload_path  s     ))..!&&r   c                 .    U R                   R                  $ r   r   r   s    r   r   ObjectACL.save_path  s     yy~~r   c                 .    U R                   R                  $ r   )r   r   r   s    r   r   ObjectACL.user_project  s     yy%%%r   Nc	                 .   > [         T	U ]  UUUUUUUUS9  g)aA  Save this ACL for the current object.

If :attr:`user_project` is set, bills the API request to that project.

:type acl: :class:`google.cloud.storage.acl.ACL`, or a compatible list.
:param acl: The ACL object to save.  If left blank, this will save
            current entries.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
)r   r   r   r   r   r   r_   r   N)r   r   )
r   r   r   r   r   r   r   r_   r   r   s
            r   r   ObjectACL.save  s/    b 	 3$;$;(C 	 		
r   c	                 .   > [         T	U ]  UUUUUUUUS9  g)a  Save this ACL for the current object using a predefined ACL.

If :attr:`user_project` is set, bills the API request to that project.

:type predefined: str
:param predefined: An identifier for a predefined ACL.  Must be one
                   of the keys in :attr:`PREDEFINED_JSON_ACLS`
                   or :attr:`PREDEFINED_XML_ACLS` (which will be
                   aliased to the corresponding JSON name).
                   If passed, `acl` must be None.

:type client: :class:`~google.cloud.storage.client.Client` or
              ``NoneType``
:param client: (Optional) The client to use.  If not passed, falls back
               to the ``client`` stored on the ACL's parent.

:type if_generation_match: long
:param if_generation_match:
    (Optional) See :ref:`using-if-generation-match`

:type if_generation_not_match: long
:param if_generation_not_match:
    (Optional) See :ref:`using-if-generation-not-match`

:type if_metageneration_match: long
:param if_metageneration_match:
    (Optional) See :ref:`using-if-metageneration-match`

:type if_metageneration_not_match: long
:param if_metageneration_not_match:
    (Optional) See :ref:`using-if-metageneration-not-match`

:type timeout: float or tuple
:param timeout:
    (Optional) The amount of time, in seconds, to wait
    for the server response.  See: :ref:`configuring_timeouts`

:type retry: google.api_core.retry.Retry or google.cloud.storage.retry.ConditionalRetryPolicy
:param retry:
    (Optional) How to retry the RPC. See: :ref:`configuring_retries`
)rj   r   r   r   r   r   r_   r   N)r   r   )
r   rj   r   r   r   r   r   r_   r   r   s
            r   r   ObjectACL.save_predefined0  s0    h 	! 3$;$;(C 	  		
r   c           
      ,   > [         TU ]  UUUUUUUS9  g)r   r   N)r   rn   )	r   r   r   r   r   r   r_   r   r   s	           r   rn   ObjectACL.clearo  s,    b 	 3$;$;(C 	 	
r   )r   )rI   rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r   r   rn   rN   r   r   s   @r   r   r     s         ' '   & &   $ $$( :
~   $ $$( =
B   $ $$( 9
 9
r   r   N)rM   google.cloud.storage._helpersr   +google.cloud.storage._opentelemetry_tracingr   google.cloud.storage.constantsr   google.cloud.storage.retryr   r   objectr	   rQ   r   r   r   rO   r   r   <module>r	     s^    , J I ; 4 PO+ O+dA	& A	H( (@;y ;S
 S
r   