from typing import Optional
from arango.request import Request
from arango.response import Response
[docs]class ArangoError(Exception):
"""Base class for all exceptions in python-arango."""
[docs]class ArangoClientError(ArangoError):
"""Base class for errors originating from python-arango client.
:param msg: Error message.
:type msg: str
:cvar source: Source of the error (always set to "client").
:vartype source: str
:ivar message: Error message.
:vartype message: str
"""
source = "client"
def __init__(self, msg: str) -> None:
super().__init__(msg)
self.message = msg
self.error_message = None
self.error_code = None
self.url = None
self.response = None
self.request = None
self.http_method = None
self.http_code = None
self.http_headers = None
[docs]class ArangoServerError(ArangoError):
"""Base class for errors originating from ArangoDB server.
:param resp: HTTP response.
:type resp: arango.response.Response
:param msg: Error message override.
:type msg: str
:cvar source: Source of the error (always set to "server").
:vartype source: str
:ivar message: Exception message.
:vartype message: str
:ivar url: API URL.
:vartype url: str
:ivar response: HTTP response object.
:vartype response: arango.response.Response
:ivar request: HTTP request object.
:vartype request: arango.request.Request
:ivar http_method: HTTP method in lowercase (e.g. "post").
:vartype http_method: str
:ivar http_code: HTTP status code.
:vartype http_code: int
:ivar http_headers: Response headers.
:vartype http_headers: dict
:ivar error_code: Error code from ArangoDB server.
:vartype error_code: int
:ivar error_message: Raw error message from ArangoDB server.
:vartype error_message: str
"""
source = "server"
def __init__(
self, resp: Response, request: Request, msg: Optional[str] = None
) -> None:
msg = msg or resp.error_message or resp.status_text
self.error_message = resp.error_message
self.error_code = resp.error_code
if self.error_code is not None:
msg = f"[HTTP {resp.status_code}][ERR {self.error_code}] {msg}"
else:
msg = f"[HTTP {resp.status_code}] {msg}"
self.error_code = resp.status_code
super().__init__(msg)
self.message = msg
self.url = resp.url
self.response = resp
self.request = request
self.http_method = resp.method
self.http_code = resp.status_code
self.http_headers = resp.headers
##################
# AQL Exceptions #
##################
[docs]class AQLQueryListError(ArangoServerError):
"""Failed to retrieve running AQL queries."""
[docs]class AQLQueryExplainError(ArangoServerError):
"""Failed to parse and explain query."""
[docs]class AQLQueryValidateError(ArangoServerError):
"""Failed to parse and validate query."""
[docs]class AQLQueryExecuteError(ArangoServerError):
"""Failed to execute query."""
[docs]class AQLQueryKillError(ArangoServerError):
"""Failed to kill the query."""
[docs]class AQLQueryClearError(ArangoServerError):
"""Failed to clear slow AQL queries."""
[docs]class AQLQueryTrackingGetError(ArangoServerError):
"""Failed to retrieve AQL tracking properties."""
[docs]class AQLQueryTrackingSetError(ArangoServerError):
"""Failed to configure AQL tracking properties."""
[docs]class AQLCachePropertiesError(ArangoServerError):
"""Failed to retrieve query cache properties."""
[docs]class AQLCacheEntriesError(ArangoServerError):
"""Failed to retrieve AQL cache entries."""
[docs]class AQLCacheClearError(ArangoServerError):
"""Failed to clear the query cache."""
[docs]class AQLFunctionListError(ArangoServerError):
"""Failed to retrieve AQL user functions."""
[docs]class AQLFunctionCreateError(ArangoServerError):
"""Failed to create AQL user function."""
[docs]class AQLFunctionDeleteError(ArangoServerError):
"""Failed to delete AQL user function."""
[docs]class AQLQueryRulesGetError(ArangoServerError):
"""Failed to retrieve AQL query rules."""
##############################
# Async Execution Exceptions #
##############################
[docs]class AsyncExecuteError(ArangoServerError):
"""Failed to execute async API request."""
[docs]class AsyncJobListError(ArangoServerError):
"""Failed to retrieve async jobs."""
[docs]class AsyncJobCancelError(ArangoServerError):
"""Failed to cancel async job."""
[docs]class AsyncJobStatusError(ArangoServerError):
"""Failed to retrieve async job status."""
[docs]class AsyncJobResultError(ArangoServerError):
"""Failed to retrieve async job result."""
[docs]class AsyncJobClearError(ArangoServerError):
"""Failed to clear async job results."""
##############################
# Backup Exceptions #
##############################
[docs]class BackupCreateError(ArangoServerError):
"""Failed to create a backup."""
[docs]class BackupDeleteError(ArangoServerError):
"""Failed to delete a backup."""
[docs]class BackupDownloadError(ArangoServerError):
"""Failed to download a backup from remote repository."""
[docs]class BackupGetError(ArangoServerError):
"""Failed to retrieve backup details."""
[docs]class BackupRestoreError(ArangoServerError):
"""Failed to restore from backup."""
[docs]class BackupUploadError(ArangoServerError):
"""Failed to upload a backup to remote repository."""
##############################
# Batch Execution Exceptions #
##############################
[docs]class BatchStateError(ArangoClientError):
"""The batch object was in a bad state."""
[docs]class BatchJobResultError(ArangoClientError):
"""Failed to retrieve batch job result."""
[docs]class BatchExecuteError(ArangoServerError):
"""Failed to execute batch API request."""
#########################
# Collection Exceptions #
#########################
[docs]class CollectionListError(ArangoServerError):
"""Failed to retrieve collections."""
[docs]class CollectionPropertiesError(ArangoServerError):
"""Failed to retrieve collection properties."""
[docs]class CollectionStatisticsError(ArangoServerError):
"""Failed to retrieve collection statistics."""
[docs]class CollectionRevisionError(ArangoServerError):
"""Failed to retrieve collection revision."""
[docs]class CollectionChecksumError(ArangoServerError):
"""Failed to retrieve collection checksum."""
[docs]class CollectionCreateError(ArangoServerError):
"""Failed to create collection."""
[docs]class CollectionDeleteError(ArangoServerError):
"""Failed to delete collection."""
[docs]class CollectionRenameError(ArangoServerError):
"""Failed to rename collection."""
[docs]class CollectionTruncateError(ArangoServerError):
"""Failed to truncate collection."""
[docs]class CollectionLoadError(ArangoServerError):
"""Failed to load collection."""
[docs]class CollectionUnloadError(ArangoServerError):
"""Failed to unload collection."""
[docs]class CollectionRecalculateCountError(ArangoServerError):
"""Failed to recalculate document count."""
[docs]class CollectionResponsibleShardError(ArangoServerError):
"""Failed to retrieve responsible shard."""
#####################
# Cursor Exceptions #
#####################
[docs]class CursorStateError(ArangoClientError):
"""The cursor object was in a bad state."""
[docs]class CursorCountError(ArangoClientError, TypeError):
"""The cursor count was not enabled."""
[docs]class CursorEmptyError(ArangoClientError):
"""The current batch in cursor was empty."""
[docs]class CursorNextError(ArangoServerError):
"""Failed to retrieve the next result batch from server."""
[docs]class CursorCloseError(ArangoServerError):
"""Failed to delete the cursor result from server."""
#######################
# Database Exceptions #
#######################
[docs]class DatabaseListError(ArangoServerError):
"""Failed to retrieve databases."""
[docs]class DatabasePropertiesError(ArangoServerError):
"""Failed to retrieve database properties."""
[docs]class DatabaseCreateError(ArangoServerError):
"""Failed to create database."""
[docs]class DatabaseDeleteError(ArangoServerError):
"""Failed to delete database."""
#######################
# Document Exceptions #
#######################
[docs]class DocumentParseError(ArangoClientError):
"""Failed to parse document input."""
[docs]class DocumentCountError(ArangoServerError):
"""Failed to retrieve document count."""
[docs]class DocumentInError(ArangoServerError):
"""Failed to check whether document exists."""
[docs]class DocumentGetError(ArangoServerError):
"""Failed to retrieve document."""
[docs]class DocumentKeysError(ArangoServerError):
"""Failed to retrieve document keys."""
[docs]class DocumentIDsError(ArangoServerError):
"""Failed to retrieve document IDs."""
[docs]class DocumentInsertError(ArangoServerError):
"""Failed to insert document."""
[docs]class DocumentReplaceError(ArangoServerError):
"""Failed to replace document."""
[docs]class DocumentUpdateError(ArangoServerError):
"""Failed to update document."""
[docs]class DocumentDeleteError(ArangoServerError):
"""Failed to delete document."""
[docs]class DocumentRevisionError(ArangoServerError):
"""The expected and actual document revisions mismatched."""
###################
# Foxx Exceptions #
###################
[docs]class FoxxServiceListError(ArangoServerError):
"""Failed to retrieve Foxx services."""
[docs]class FoxxServiceGetError(ArangoServerError):
"""Failed to retrieve Foxx service metadata."""
[docs]class FoxxServiceCreateError(ArangoServerError):
"""Failed to create Foxx service."""
[docs]class FoxxServiceUpdateError(ArangoServerError):
"""Failed to update Foxx service."""
[docs]class FoxxServiceReplaceError(ArangoServerError):
"""Failed to replace Foxx service."""
[docs]class FoxxServiceDeleteError(ArangoServerError):
"""Failed to delete Foxx services."""
[docs]class FoxxConfigGetError(ArangoServerError):
"""Failed to retrieve Foxx service configuration."""
[docs]class FoxxConfigUpdateError(ArangoServerError):
"""Failed to update Foxx service configuration."""
[docs]class FoxxConfigReplaceError(ArangoServerError):
"""Failed to replace Foxx service configuration."""
[docs]class FoxxDependencyGetError(ArangoServerError):
"""Failed to retrieve Foxx service dependencies."""
[docs]class FoxxDependencyUpdateError(ArangoServerError):
"""Failed to update Foxx service dependencies."""
[docs]class FoxxDependencyReplaceError(ArangoServerError):
"""Failed to replace Foxx service dependencies."""
[docs]class FoxxScriptListError(ArangoServerError):
"""Failed to retrieve Foxx service scripts."""
[docs]class FoxxScriptRunError(ArangoServerError):
"""Failed to run Foxx service script."""
[docs]class FoxxTestRunError(ArangoServerError):
"""Failed to run Foxx service tests."""
[docs]class FoxxDevModeEnableError(ArangoServerError):
"""Failed to enable development mode for Foxx service."""
[docs]class FoxxDevModeDisableError(ArangoServerError):
"""Failed to disable development mode for Foxx service."""
[docs]class FoxxReadmeGetError(ArangoServerError):
"""Failed to retrieve Foxx service readme."""
[docs]class FoxxSwaggerGetError(ArangoServerError):
"""Failed to retrieve Foxx service swagger."""
[docs]class FoxxDownloadError(ArangoServerError):
"""Failed to download Foxx service bundle."""
[docs]class FoxxCommitError(ArangoServerError):
"""Failed to commit local Foxx service state."""
####################
# Graph Exceptions #
####################
[docs]class GraphListError(ArangoServerError):
"""Failed to retrieve graphs."""
[docs]class GraphCreateError(ArangoServerError):
"""Failed to create the graph."""
[docs]class GraphDeleteError(ArangoServerError):
"""Failed to delete the graph."""
[docs]class GraphPropertiesError(ArangoServerError):
"""Failed to retrieve graph properties."""
[docs]class GraphTraverseError(ArangoServerError):
"""Failed to execute graph traversal."""
[docs]class VertexCollectionListError(ArangoServerError):
"""Failed to retrieve vertex collections."""
[docs]class VertexCollectionCreateError(ArangoServerError):
"""Failed to create vertex collection."""
[docs]class VertexCollectionDeleteError(ArangoServerError):
"""Failed to delete vertex collection."""
[docs]class EdgeDefinitionListError(ArangoServerError):
"""Failed to retrieve edge definitions."""
[docs]class EdgeDefinitionCreateError(ArangoServerError):
"""Failed to create edge definition."""
[docs]class EdgeDefinitionReplaceError(ArangoServerError):
"""Failed to replace edge definition."""
[docs]class EdgeDefinitionDeleteError(ArangoServerError):
"""Failed to delete edge definition."""
[docs]class EdgeListError(ArangoServerError):
"""Failed to retrieve edges coming in and out of a vertex."""
####################
# Index Exceptions #
####################
[docs]class IndexListError(ArangoServerError):
"""Failed to retrieve collection indexes."""
[docs]class IndexCreateError(ArangoServerError):
"""Failed to create collection index."""
[docs]class IndexDeleteError(ArangoServerError):
"""Failed to delete collection index."""
[docs]class IndexLoadError(ArangoServerError):
"""Failed to load indexes into memory."""
#####################
# Pregel Exceptions #
#####################
[docs]class PregelJobCreateError(ArangoServerError):
"""Failed to create Pregel job."""
[docs]class PregelJobGetError(ArangoServerError):
"""Failed to retrieve Pregel job details."""
[docs]class PregelJobDeleteError(ArangoServerError):
"""Failed to delete Pregel job."""
#####################
# Server Exceptions #
#####################
[docs]class ServerConnectionError(ArangoClientError):
"""Failed to connect to ArangoDB server."""
[docs]class ServerEngineError(ArangoServerError):
"""Failed to retrieve database engine."""
[docs]class ServerVersionError(ArangoServerError):
"""Failed to retrieve server version."""
[docs]class ServerDetailsError(ArangoServerError):
"""Failed to retrieve server details."""
[docs]class ServerStatusError(ArangoServerError):
"""Failed to retrieve server status."""
[docs]class ServerTimeError(ArangoServerError):
"""Failed to retrieve server system time."""
[docs]class ServerEchoError(ArangoServerError):
"""Failed to retrieve details on last request."""
[docs]class ServerShutdownError(ArangoServerError):
"""Failed to initiate shutdown sequence."""
[docs]class ServerRunTestsError(ArangoServerError):
"""Failed to execute server tests."""
[docs]class ServerRequiredDBVersionError(ArangoServerError):
"""Failed to retrieve server target version."""
[docs]class ServerReadLogError(ArangoServerError):
"""Failed to retrieve global log."""
[docs]class ServerLogLevelError(ArangoServerError):
"""Failed to retrieve server log levels."""
[docs]class ServerLogLevelSetError(ArangoServerError):
"""Failed to set server log levels."""
[docs]class ServerReloadRoutingError(ArangoServerError):
"""Failed to reload routing details."""
[docs]class ServerStatisticsError(ArangoServerError):
"""Failed to retrieve server statistics."""
[docs]class ServerMetricsError(ArangoServerError):
"""Failed to retrieve server metrics."""
[docs]class ServerRoleError(ArangoServerError):
"""Failed to retrieve server role in a cluster."""
[docs]class ServerTLSError(ArangoServerError):
"""Failed to retrieve TLS data."""
[docs]class ServerTLSReloadError(ArangoServerError):
"""Failed to reload TLS."""
[docs]class ServerEncryptionError(ArangoServerError):
"""Failed to reload user-defined encryption keys."""
#####################
# Task Exceptions #
#####################
[docs]class TaskListError(ArangoServerError):
"""Failed to retrieve server tasks."""
[docs]class TaskGetError(ArangoServerError):
"""Failed to retrieve server task details."""
[docs]class TaskCreateError(ArangoServerError):
"""Failed to create server task."""
[docs]class TaskDeleteError(ArangoServerError):
"""Failed to delete server task."""
##########################
# Transaction Exceptions #
##########################
[docs]class TransactionExecuteError(ArangoServerError):
"""Failed to execute raw transaction."""
[docs]class TransactionInitError(ArangoServerError):
"""Failed to initialize transaction."""
[docs]class TransactionStatusError(ArangoServerError):
"""Failed to retrieve transaction status."""
[docs]class TransactionCommitError(ArangoServerError):
"""Failed to commit transaction."""
[docs]class TransactionAbortError(ArangoServerError):
"""Failed to abort transaction."""
###################
# User Exceptions #
###################
[docs]class UserListError(ArangoServerError):
"""Failed to retrieve users."""
[docs]class UserGetError(ArangoServerError):
"""Failed to retrieve user details."""
[docs]class UserCreateError(ArangoServerError):
"""Failed to create user."""
[docs]class UserUpdateError(ArangoServerError):
"""Failed to update user."""
[docs]class UserReplaceError(ArangoServerError):
"""Failed to replace user."""
[docs]class UserDeleteError(ArangoServerError):
"""Failed to delete user."""
###################
# View Exceptions #
###################
[docs]class ViewListError(ArangoServerError):
"""Failed to retrieve views."""
[docs]class ViewGetError(ArangoServerError):
"""Failed to retrieve view details."""
[docs]class ViewCreateError(ArangoServerError):
"""Failed to create view."""
[docs]class ViewUpdateError(ArangoServerError):
"""Failed to update view."""
[docs]class ViewReplaceError(ArangoServerError):
"""Failed to replace view."""
[docs]class ViewDeleteError(ArangoServerError):
"""Failed to delete view."""
[docs]class ViewRenameError(ArangoServerError):
"""Failed to rename view."""
#######################
# Analyzer Exceptions #
#######################
[docs]class AnalyzerListError(ArangoServerError):
"""Failed to retrieve analyzers."""
[docs]class AnalyzerGetError(ArangoServerError):
"""Failed to retrieve analyzer details."""
[docs]class AnalyzerCreateError(ArangoServerError):
"""Failed to create analyzer."""
[docs]class AnalyzerDeleteError(ArangoServerError):
"""Failed to delete analyzer."""
#########################
# Permission Exceptions #
#########################
[docs]class PermissionListError(ArangoServerError):
"""Failed to list user permissions."""
[docs]class PermissionGetError(ArangoServerError):
"""Failed to retrieve user permission."""
[docs]class PermissionUpdateError(ArangoServerError):
"""Failed to update user permission."""
[docs]class PermissionResetError(ArangoServerError):
"""Failed to reset user permission."""
##################
# WAL Exceptions #
##################
[docs]class WALPropertiesError(ArangoServerError):
"""Failed to retrieve WAL properties."""
[docs]class WALTransactionListError(ArangoServerError):
"""Failed to retrieve running WAL transactions."""
[docs]class WALFlushError(ArangoServerError):
"""Failed to flush WAL."""
[docs]class WALTickRangesError(ArangoServerError):
"""Failed to return WAL tick ranges."""
[docs]class WALLastTickError(ArangoServerError):
"""Failed to return WAL tick ranges."""
[docs]class WALTailError(ArangoServerError):
"""Failed to return WAL tick ranges."""
##########################
# Replication Exceptions #
##########################
[docs]class ReplicationInventoryError(ArangoServerError):
"""Failed to retrieve inventory of collection and indexes."""
[docs]class ReplicationDumpBatchCreateError(ArangoServerError):
"""Failed to create dump batch."""
[docs]class ReplicationDumpBatchDeleteError(ArangoServerError):
"""Failed to delete a dump batch."""
[docs]class ReplicationDumpBatchExtendError(ArangoServerError):
"""Failed to extend a dump batch."""
[docs]class ReplicationDumpError(ArangoServerError):
"""Failed to retrieve collection content."""
[docs]class ReplicationSyncError(ArangoServerError):
"""Failed to synchronize data from remote."""
[docs]class ReplicationClusterInventoryError(ArangoServerError):
"""Failed to retrieve overview of collection and indexes in a cluster."""
[docs]class ReplicationLoggerStateError(ArangoServerError):
"""Failed to retrieve logger state."""
[docs]class ReplicationLoggerFirstTickError(ArangoServerError):
"""Failed to retrieve logger first tick."""
[docs]class ReplicationApplierConfigError(ArangoServerError):
"""Failed to retrieve replication applier configuration."""
[docs]class ReplicationApplierConfigSetError(ArangoServerError):
"""Failed to update replication applier configuration."""
[docs]class ReplicationApplierStartError(ArangoServerError):
"""Failed to start replication applier."""
[docs]class ReplicationApplierStopError(ArangoServerError):
"""Failed to stop replication applier."""
[docs]class ReplicationApplierStateError(ArangoServerError):
"""Failed to retrieve replication applier state."""
[docs]class ReplicationMakeSlaveError(ArangoServerError):
"""Failed to change role to slave."""
[docs]class ReplicationServerIDError(ArangoServerError):
"""Failed to retrieve server ID."""
######################
# Cluster Exceptions #
######################
[docs]class ClusterHealthError(ArangoServerError):
"""Failed to retrieve DBServer health."""
[docs]class ClusterServerIDError(ArangoServerError):
"""Failed to retrieve server ID."""
[docs]class ClusterServerRoleError(ArangoServerError):
"""Failed to retrieve server role."""
[docs]class ClusterServerStatisticsError(ArangoServerError):
"""Failed to retrieve DBServer statistics."""
[docs]class ClusterServerVersionError(ArangoServerError):
"""Failed to retrieve server node version."""
[docs]class ClusterServerEngineError(ArangoServerError):
"""Failed to retrieve server node engine."""
[docs]class ClusterMaintenanceModeError(ArangoServerError):
"""Failed to enable/disable cluster supervision maintenance mode."""
[docs]class ClusterEndpointsError(ArangoServerError):
"""Failed to retrieve cluster endpoints."""
[docs]class ClusterServerCountError(ArangoServerError):
"""Failed to retrieve cluster server count."""
##################
# JWT Exceptions #
##################
[docs]class JWTAuthError(ArangoServerError):
"""Failed to get a new JWT token from ArangoDB."""
[docs]class JWTSecretListError(ArangoServerError):
"""Failed to retrieve information on currently loaded JWT secrets."""
[docs]class JWTSecretReloadError(ArangoServerError):
"""Failed to reload JWT secrets."""