graphrecords_python/graphrecord/
errors.rs1use crate::querying::exception::FailureConversion;
2use graphrecords_core::errors::{GraphRecordError, SchemaError};
3use graphrecords_overview::OverviewError;
4use graphrecords_query::Failure;
5use pyo3::{
6 PyErr,
7 exceptions::{PyAssertionError, PyIndexError, PyKeyError, PyRuntimeError, PyValueError},
8};
9
10pub enum PyGraphRecordError {
11 GraphRecord(GraphRecordError),
12 Conversion(String),
13 Query(Box<Failure>),
14}
15pub type PyGraphRecordResult<T> = Result<T, PyGraphRecordError>;
16
17impl From<GraphRecordError> for PyGraphRecordError {
18 fn from(error: GraphRecordError) -> Self {
19 Self::GraphRecord(error)
20 }
21}
22
23impl From<SchemaError> for PyGraphRecordError {
24 fn from(error: SchemaError) -> Self {
25 Self::GraphRecord(GraphRecordError::from(error))
26 }
27}
28
29impl From<OverviewError> for PyGraphRecordError {
30 fn from(error: OverviewError) -> Self {
31 match error {
32 OverviewError::GraphRecord(error) => Self::GraphRecord(error),
33 OverviewError::Query(failure) => Self::Query(failure),
34 }
35 }
36}
37
38impl From<PyGraphRecordError> for PyErr {
39 fn from(error: PyGraphRecordError) -> Self {
40 let error = match error {
41 PyGraphRecordError::GraphRecord(error) => error,
42 PyGraphRecordError::Conversion(message) => {
43 return PyRuntimeError::new_err(message);
44 }
45 PyGraphRecordError::Query(failure) => {
46 return failure.to_python_error();
47 }
48 };
49
50 let message = error.to_string();
51
52 match error {
53 GraphRecordError::NodeNotFound { .. }
54 | GraphRecordError::EdgeNotFound { .. }
55 | GraphRecordError::GroupNotFound { .. } => PyIndexError::new_err(message),
56 GraphRecordError::NodeAttributeNotFound { .. }
57 | GraphRecordError::EdgeAttributeNotFound { .. }
58 | GraphRecordError::PluginNotFound { .. }
59 | GraphRecordError::PluginAlreadyExists { .. } => PyKeyError::new_err(message),
60 GraphRecordError::NodeAlreadyExists { .. }
61 | GraphRecordError::GroupAlreadyExists { .. }
62 | GraphRecordError::NodeAlreadyInGroup { .. }
63 | GraphRecordError::EdgeAlreadyInGroup { .. }
64 | GraphRecordError::NodeNotInGroup { .. }
65 | GraphRecordError::EdgeNotInGroup { .. }
66 | GraphRecordError::IncompatibleValueOperands { .. }
67 | GraphRecordError::IncompatibleAttributeOperands { .. }
68 | GraphRecordError::InvalidTimestamp => PyAssertionError::new_err(message),
69 GraphRecordError::Schema(_) => PyValueError::new_err(message),
70 GraphRecordError::PluginFailure { .. }
71 | GraphRecordError::ConnectorFailure { .. }
72 | GraphRecordError::Conversion(_) => PyRuntimeError::new_err(message),
73 }
74 }
75}