# Path: google/api_core/exceptions.py
# _HTTP_CODE_TO_EXCEPTION: Dict[int, Exception] = {}
# _GRPC_CODE_TO_EXCEPTION: Dict[int, Exception] = {}
# _INT_TO_GRPC_CODE = {}
# class GoogleAPIError(Exception):
# class DuplicateCredentialArgs(GoogleAPIError):
# class RetryError(GoogleAPIError):
# class _GoogleAPICallErrorMeta(type):
# class GoogleAPICallError(GoogleAPIError, metaclass=_GoogleAPICallErrorMeta):
# class Redirection(GoogleAPICallError):
# class MovedPermanently(Redirection):
# class NotModified(Redirection):
# class TemporaryRedirect(Redirection):
# class ResumeIncomplete(Redirection):
# class ClientError(GoogleAPICallError):
# class BadRequest(ClientError):
# class InvalidArgument(BadRequest):
# class FailedPrecondition(BadRequest):
# class OutOfRange(BadRequest):
# class Unauthorized(ClientError):
# class Unauthenticated(Unauthorized):
# class Forbidden(ClientError):
# class PermissionDenied(Forbidden):
# class NotFound(ClientError):
# class MethodNotAllowed(ClientError):
# class Conflict(ClientError):
# class AlreadyExists(Conflict):
# class Aborted(Conflict):
# class LengthRequired(ClientError):
# class PreconditionFailed(ClientError):
# class RequestRangeNotSatisfiable(ClientError):
# class TooManyRequests(ClientError):
# class ResourceExhausted(TooManyRequests):
# class Cancelled(ClientError):
# class ServerError(GoogleAPICallError):
# class InternalServerError(ServerError):
# class Unknown(ServerError):
# class DataLoss(ServerError):
# class MethodNotImplemented(ServerError):
# class BadGateway(ServerError):
# class ServiceUnavailable(ServerError):
# class GatewayTimeout(ServerError):
# class DeadlineExceeded(GatewayTimeout):
#     def __init__(self, message, cause):
#     def cause(self):
#     def __str__(self):
#     def __new__(mcs, name, bases, class_dict):
#     def __init__(self, message, errors=(), details=(), response=None, error_info=None):
#     def __str__(self):
#     def reason(self):
#     def domain(self):
#     def metadata(self):
#     def errors(self):
#     def details(self):
#     def response(self):
# def exception_class_for_http_status(status_code):
# def from_http_status(status_code, message, **kwargs):
# def from_http_response(response):
# def exception_class_for_grpc_status(status_code):
# def from_grpc_status(status_code, message, **kwargs):
# def _is_informative_grpc_error(rpc_exc):
# def _parse_grpc_error_details(rpc_exc):
# def from_grpc_error(rpc_exc):
# 
# Path: google/api_core/extended_operation.py
# class ExtendedOperation(polling.PollingFuture):
#     def __init__(
#         self, extended_operation, refresh, cancel, retry=polling.DEFAULT_RETRY
#     ):
#     def name(self):
#     def status(self):
#     def error_code(self):
#     def error_message(self):
#     def __getattr__(self, name):
#     def done(self, retry=polling.DEFAULT_RETRY):
#     def cancel(self):
#     def cancelled(self):
#     def _refresh_and_update(self, retry=polling.DEFAULT_RETRY):
#     def _handle_refreshed_operation(self):
#     def make(cls, refresh, cancel, extended_operation, **kwargs):


import dataclasses
import enum
import typing
import mock
import pytest
from google.api_core import exceptions
from google.api_core import extended_operation
from google.api_core import retry
    refresh.assert_called_once_with(retry=test_retry)


def test_error():
    responses = [
        CustomOperation(
            name=TEST_OPERATION_NAME,
            status=CustomOperation.StatusCode.DONE,
            error_code=400,
            error_message="Bad request",
        ),
    ]

    ex_op, _, _ = make_extended_operation(responses)

    # Defaults to CallError when grpc is not installed
    with pytest.raises(exceptions.BadRequest):
        ex_op.result()

    # Inconsistent result
    responses = [
        CustomOperation(
            name=TEST_OPERATION_NAME,
            status=CustomOperation.StatusCode.DONE,
            error_code=2112,
        ),
    ]

    ex_op, _, _ = make_extended_operation(responses)


# Path: google/api_core/exceptions.py
# _HTTP_CODE_TO_EXCEPTION: Dict[int, Exception] = {}
# _GRPC_CODE_TO_EXCEPTION: Dict[int, Exception] = {}
# _INT_TO_GRPC_CODE = {}
# class GoogleAPIError(Exception):
# class DuplicateCredentialArgs(GoogleAPIError):
# class RetryError(GoogleAPIError):
# class _GoogleAPICallErrorMeta(type):
# class GoogleAPICallError(GoogleAPIError, metaclass=_GoogleAPICallErrorMeta):
# class Redirection(GoogleAPICallError):
# class MovedPermanently(Redirection):
# class NotModified(Redirection):
# class TemporaryRedirect(Redirection):
# class ResumeIncomplete(Redirection):
# class ClientError(GoogleAPICallError):
# class BadRequest(ClientError):
# class InvalidArgument(BadRequest):
# class FailedPrecondition(BadRequest):
# class OutOfRange(BadRequest):
# class Unauthorized(ClientError):
# class Unauthenticated(Unauthorized):
# class Forbidden(ClientError):
# class PermissionDenied(Forbidden):
# class NotFound(ClientError):
# class MethodNotAllowed(ClientError):
# class Conflict(ClientError):
# class AlreadyExists(Conflict):
# class Aborted(Conflict):
# class LengthRequired(ClientError):
# class PreconditionFailed(ClientError):
# class RequestRangeNotSatisfiable(ClientError):
# class TooManyRequests(ClientError):
# class ResourceExhausted(TooManyRequests):
# class Cancelled(ClientError):
# class ServerError(GoogleAPICallError):
# class InternalServerError(ServerError):
# class Unknown(ServerError):
# class DataLoss(ServerError):
# class MethodNotImplemented(ServerError):
# class BadGateway(ServerError):
# class ServiceUnavailable(ServerError):
# class GatewayTimeout(ServerError):
# class DeadlineExceeded(GatewayTimeout):
#     def __init__(self, message, cause):
#     def cause(self):
#     def __str__(self):
#     def __new__(mcs, name, bases, class_dict):
#     def __init__(self, message, errors=(), details=(), response=None, error_info=None):
#     def __str__(self):
#     def reason(self):
#     def domain(self):
#     def metadata(self):
#     def errors(self):
#     def details(self):
#     def response(self):
# def exception_class_for_http_status(status_code):
# def from_http_status(status_code, message, **kwargs):
# def from_http_response(response):
# def exception_class_for_grpc_status(status_code):
# def from_grpc_status(status_code, message, **kwargs):
# def _is_informative_grpc_error(rpc_exc):
# def _parse_grpc_error_details(rpc_exc):
# def from_grpc_error(rpc_exc):
# 
# Path: google/api_core/extended_operation.py
# class ExtendedOperation(polling.PollingFuture):
#     def __init__(
#         self, extended_operation, refresh, cancel, retry=polling.DEFAULT_RETRY
#     ):
#     def name(self):
#     def status(self):
#     def error_code(self):
#     def error_message(self):
#     def __getattr__(self, name):
#     def done(self, retry=polling.DEFAULT_RETRY):
#     def cancel(self):
#     def cancelled(self):
#     def _refresh_and_update(self, retry=polling.DEFAULT_RETRY):
#     def _handle_refreshed_operation(self):
#     def make(cls, refresh, cancel, extended_operation, **kwargs):


# Path: tests/unit/test_extended_operation.py
import dataclasses
import enum
import typing
import mock
import pytest
from google.api_core import exceptions
from google.api_core import extended_operation
from google.api_core import retry

    refresh.assert_called_once_with(retry=test_retry)


def test_error():
    responses = [
        CustomOperation(
            name=TEST_OPERATION_NAME,
            status=CustomOperation.StatusCode.DONE,
            error_code=400,
            error_message="Bad request",
        ),
    ]

    ex_op, _, _ = make_extended_operation(responses)

    # Defaults to CallError when grpc is not installed
    with pytest.raises(exceptions.BadRequest):
        ex_op.result()

    # Inconsistent result
    responses = [
        CustomOperation(
            name=TEST_OPERATION_NAME,
            status=CustomOperation.StatusCode.DONE,
            error_code=2112,
        ),
    ]

    ex_op, _, _ = make_extended_operation(responses)


    with pytest.raises(exceptions.GoogleAPICallError):