
    -
0h{#                         U d Z ddlmZ ddlmZ ddlmZ dZi Zee	e
f         ed<   efdZdd	Zd
 Z G d de          ZdS )z=Wrap long-running operations returned from Google Cloud APIs.    )Dict)operations_pb2)json_formatztype.googleapis.com_TYPE_URL_MAPc                 (    | j         j        }|d|S )a   Compute a type URL for a klass.

    :type klass: type
    :param klass: class to be used as a factory for the given type

    :type prefix: str
    :param prefix: URL prefix for the type

    :rtype: str
    :returns: the URL, prefixed as appropriate
    /)
DESCRIPTOR	full_name)klassprefixnames      Z/var/www/html/nourish/venv/lib/python3.11/site-packages/google/cloud/operation/__init__.py_compute_type_urlr      s      %Dffdd##    Nc                     |t          |           }|t          v r,t          |         | urt          dt          |                   | t          |<   dS )a  Register a klass as the factory for a given type URL.

    :type klass: :class:`type`
    :param klass: class to be used as a factory for the given type

    :type type_url: str
    :param type_url: (Optional) URL naming the type. If not provided,
                     infers the URL from the type descriptor.

    :raises ValueError: if a registration already exists for the URL.
    Nz
Conflict: )r   r   
ValueError)r   type_urls     r   register_typer   ,   s]     $U++=  "%//*}X/F/FHIII#M(r   c                 Z    t           | j                 }|                    | j                  S )a  Convert an ``Any`` protobuf into the actual class.

    Uses the type URL to do the conversion.

    .. note::

        This assumes that the type URL is already registered.

    :type any_pb: :class:`google.protobuf.any_pb2.Any`
    :param any_pb: An any object to be converted.

    :rtype: object
    :returns: The instance (of the correct type) stored in the any
              instance.
    )r   r   
FromStringvalue)any_pbr   s     r   	_from_anyr   A   s&      &/*EFL)))r   c                       e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZd Z	e
d             Ze
d             Zed             Zd Zd	 Zd
 Zd Zd ZdS )	Operationa  Representation of a Google API Long-Running Operation.

    .. _protobuf: https://github.com/googleapis/googleapis/blob/                  050400df0fdb16f63b63e9dee53819044bffc857/                  google/longrunning/operations.proto#L80
    .. _service: https://github.com/googleapis/googleapis/blob/                 050400df0fdb16f63b63e9dee53819044bffc857/                 google/longrunning/operations.proto#L38
    .. _JSON: https://cloud.google.com/speech/reference/rest/              v1beta1/operations#Operation

    This wraps an operation `protobuf`_ object and attempts to
    interact with the long-running operations `service`_ (specific
    to a given API). (Some services also offer a `JSON`_
    API that maps the same underlying data type.)

    :type name: str
    :param name: The fully-qualified path naming the operation.

    :type client: :class:`~google.cloud.client.Client`
    :param client: The client used to poll for the status of the operation.
                   If the operation was created via JSON/HTTP, the client
                   must own a :class:`~google.cloud._http.Connection`
                   to send polling requests. If created via protobuf, the
                   client must have a gRPC stub in the ``_operations_stub``
                   attribute.

    :type caller_metadata: dict
    :param caller_metadata: caller-assigned metadata about the operation
    NTc                 b    || _         || _        |                                | _        d| _        d S )NF)r   clientcopycaller_metadata	_complete)selfr   r   r   s       r   __init__zOperation.__init__   s/    	.3355r   c                 \     | |j         |fi |}|                    |           d|_        |S )aD  Factory:  construct an instance from a protobuf.

        :type operation_pb:
            :class:`~google.longrunning.operations_pb2.Operation`
        :param operation_pb: Protobuf to be parsed.

        :type client: object: must provide ``_operations_stub`` accessor.
        :param client: The client used to poll for the status of the operation.

        :type caller_metadata: dict
        :param caller_metadata: caller-assigned metadata about the operation

        :rtype: :class:`Operation`
        :returns: new instance, with attributes based on the protobuf.
        T)r   _update_state
_from_grpc)clsoperation_pbr   r   results        r   from_pbzOperation.from_pb   sA    " \&BB/BB\*** r   c                     t          j        |t          j                              } | |j        |fi |}|                    |           d|_        |S )a  Factory: construct an instance from a dictionary.

        :type operation: dict
        :param operation: Operation as a JSON object.

        :type client: :class:`~google.cloud.client.Client`
        :param client: The client used to poll for the status of the operation.

        :type caller_metadata: dict
        :param caller_metadata: caller-assigned metadata about the operation

        :rtype: :class:`Operation`
        :returns: new instance, with attributes based on the protobuf.
        F)r   	ParseDictr   r   r   r$   r%   )r&   	operationr   r   r'   r(   s         r   	from_dictzOperation.from_dict   s\      #,Y8P8R8RSS\&BB/BB\***!r   c                     | j         S )z|Has the operation already completed?

        :rtype: bool
        :returns: True if already completed, else false.
        )r    r!   s    r   completezOperation.complete   s     ~r   c                 t    t          j        | j                  }| j        j                            |          S )zPolls the status of the current operation.

        Uses gRPC request to check.

        :rtype: :class:`~google.longrunning.operations_pb2.Operation`
        :returns: The latest status of the current operation.
        )r   )r   GetOperationRequestr   r   _operations_stubGetOperation)r!   
request_pbs     r   _get_operation_rpczOperation._get_operation_rpc   s2     $7TYGGG
{+88DDDr   c                     d| j         }| j        j                            d|          }t	          j        |t          j                              S )zChecks the status of the current operation.

        Uses HTTP request to check.

        :rtype: :class:`~google.longrunning.operations_pb2.Operation`
        :returns: The latest status of the current operation.
        zoperations/GET)methodpath)r   r   _connectionapi_requestr   r+   r   r   )r!   r:   api_responses      r   _get_operation_httpzOperation._get_operation_http   sK      #'))-{.::%d:SS$\>3K3M3MNNNr   c                 `    | j         r|                                 S |                                 S )zChecks the status of the current operation.

        :rtype: :class:`~google.longrunning.operations_pb2.Operation`
        :returns: The latest status of the current operation.
        )r%   r6   r>   r/   s    r   _get_operationzOperation._get_operation   s2     ? 	.**,,,++---r   c                    |j         rd| _        |                    d          rt          |j                  | _        |                    d          }|dk    r|j        | _        dS |dk    rt          |j                  | _        dS dS )zUpdate the state of the current object based on operation.

        :type operation_pb:
            :class:`~google.longrunning.operations_pb2.Operation`
        :param operation_pb: Protobuf to be parsed.
        Tmetadatar(   errorresponseN)doner    HasFieldr   rB   
WhichOneofrC   rD   )r!   r'   result_types      r   r$   zOperation._update_state   s      	"!DN  ,, 	=%l&;<<DM"--h77'!!%+DJJJJ&&%l&;<<DMMM '&r   c                     | j         rt          d          |                                 }|                     |           | j         S )zCheck if the operation has finished.

        :rtype: bool
        :returns: A boolean indicating if the current operation has completed.
        :raises ValueError: if the operation
                 has already completed.
        zThe operation has completed.)r0   r   r@   r$   )r!   r'   s     r   pollzOperation.poll   sJ     = 	=;<<<**,,<(((}r   )__name__
__module____qualname____doc__targetrD   rC   rB   r%   r"   classmethodr)   r-   propertyr0   r6   r>   r@   r$   rJ    r   r   r   r   U   s        > FCH
 E
 H J     [*   [*   X	E 	E 	E
O 
O 
O	. 	. 	.= = =&    r   r   )N)rN   typingr   google.longrunningr   google.protobufr   _GOOGLE_APIS_PREFIXr   strtype__annotations__r   r   r   objectr   rR   r   r   <module>r[      s    D C C       - - - - - - ' ' ' ' ' ' , !#tCI # # # %8 $ $ $ $ $ $ $ $** * *(w w w w w w w w w wr   