feat(python): expose function job error codes

This commit is contained in:
Xuanwo
2026-08-12 06:44:03 +08:00
parent 8cedd50495
commit 29be3e5509
5 changed files with 303 additions and 6 deletions
+5 -2
View File
@@ -102,11 +102,14 @@ impl<T> PythonErrorExt<T> for std::result::Result<T, LanceError> {
err.setattr(intern!(py, "__cause__"), cause_err)?;
Err(PyErr::from_value(err))
}),
LanceError::JobFailed { .. } => Python::attach(|py| {
LanceError::JobFailed { failure, .. } => Python::attach(|py| {
let cls = py
.import(intern!(py, "lancedb.exceptions"))?
.getattr(intern!(py, "JobFailedError"))?;
Err(PyErr::from_value(cls.call1((err.to_string(),))?))
// Structural projection only: failure.error_code.as_str().
// Never infer a code from message, phase, retryable, or source.
let error_code = failure.error_code.as_ref().map(|code| code.as_str());
Err(PyErr::from_value(cls.call1((err.to_string(), error_code))?))
}),
LanceError::JobCancelled { .. } => Python::attach(|py| {
let cls = py
+9 -2
View File
@@ -111,14 +111,16 @@ pub struct JobFailureInfo {
phase: Option<String>,
message: Option<String>,
retryable: Option<bool>,
/// Exact wire `error_code` string when Rust decoded one; never inferred.
error_code: Option<String>,
}
#[pymethods]
impl JobFailureInfo {
fn __repr__(&self) -> String {
format!(
"JobFailureInfo(phase={:?}, message={:?}, retryable={:?})",
self.phase, self.message, self.retryable
"JobFailureInfo(phase={:?}, message={:?}, retryable={:?}, error_code={:?})",
self.phase, self.message, self.retryable, self.error_code
)
}
}
@@ -158,6 +160,11 @@ impl From<lancedb::database::JobDescription> for JobDescription {
phase: failure.phase,
message: failure.message,
retryable: failure.retryable,
// Structural projection only: exact as_str(); never infer.
error_code: failure
.error_code
.as_ref()
.map(|code| code.as_str().to_string()),
}),
result: project_description_result(description.result),
}