Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions acouchbase_analytics/protocol/query_handle.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from acouchbase_analytics.protocol._core.response import AsyncHttpResponse
from acouchbase_analytics.protocol.streaming import AsyncHttpStreamingResponse
from couchbase_analytics.common._core.query_handle import QueryHandleStatusResponse
from couchbase_analytics.common.errors import AnalyticsError, QueryNotFoundError
from couchbase_analytics.common.errors import AnalyticsError
from couchbase_analytics.common.query_handle import AsyncQueryHandle as _CoreAsyncQueryHandle
from couchbase_analytics.common.query_handle import AsyncQueryResultHandle as _CoreAsyncQueryResultHandle
from couchbase_analytics.common.query_handle import AsyncQueryStatus as _CoreAsyncQueryStatus
Expand Down Expand Up @@ -79,11 +79,17 @@ def _get_status_handle(self) -> None:
raise AnalyticsError(message='HTTP response does not contain JSON data.')

request_id = self._http_response.json_response.get('requestID', None)
if request_id is None:
raise QueryNotFoundError(message='Server response is missing "requestID" field.')
handle = self._http_response.json_response.get('handle', None)
required_fields_missing = []
if request_id is None:
required_fields_missing.append('requestID')

if handle is None:
raise QueryNotFoundError(message='Server response is missing "handle" field.')
required_fields_missing.append('handle')

if len(required_fields_missing) > 0:
msg = f'Server response is missing required field(s): {", ".join(required_fields_missing)}.'
raise AnalyticsError(message=msg)

self._request_id = request_id
self._handle = handle
Expand Down
2 changes: 2 additions & 0 deletions couchbase_analytics/protocol/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,8 @@ def maybe_get_error_from_status_code(
err = WrappedError(InvalidCredentialError(context=context, message='Invalid credentials provided.'))
elif status_code == 404 and ignore_not_found_status is not True:
err = WrappedError(QueryNotFoundError(context=context, message='Resource not found'))
elif status_code == 500:
err = WrappedError(AnalyticsError(context=context, message='Internal server error (HTTP 500).'))
elif status_code == 503:
err = WrappedError(AnalyticsError(context=context, message='Service unavailable.'), retriable=True)

Expand Down
14 changes: 10 additions & 4 deletions couchbase_analytics/protocol/query_handle.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from typing import TYPE_CHECKING, Any, Optional

from couchbase_analytics.common._core.query_handle import QueryHandleStatusResponse
from couchbase_analytics.common.errors import AnalyticsError, QueryNotFoundError
from couchbase_analytics.common.errors import AnalyticsError
from couchbase_analytics.common.query_handle import BlockingQueryHandle as _CoreBlockingQueryHandle
from couchbase_analytics.common.query_handle import BlockingQueryResultHandle as _CoreBlockingQueryResultHandle
from couchbase_analytics.common.query_handle import BlockingQueryStatus as _CoreBlockingQueryStatus
Expand Down Expand Up @@ -83,11 +83,17 @@ def _get_status_handle(self) -> None:
raise AnalyticsError(message='HTTP response does not contain JSON data.')

request_id = self._http_response.json_response.get('requestID', None)
if request_id is None:
raise QueryNotFoundError(message='Server response is missing "requestID" field.')
handle = self._http_response.json_response.get('handle', None)
required_fields_missing = []
if request_id is None:
required_fields_missing.append('requestID')

if handle is None:
raise QueryNotFoundError(message='Server response is missing "handle" field.')
required_fields_missing.append('handle')

if len(required_fields_missing) > 0:
msg = f'Server response is missing required field(s): {", ".join(required_fields_missing)}.'
raise AnalyticsError(message=msg)

self._request_id = request_id
self._handle = handle
Expand Down
Loading