mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-04 02:42:57 +00:00
feat: add a basic async python client starting point (#1014)
This changes `lancedb` from a "pure python" setuptools project to a maturin project and adds a rust lancedb dependency. The async python client is extremely minimal (only `connect` and `Connection.table_names` are supported). The purpose of this PR is to get the infrastructure in place for building out the rest of the async client. Although this is not technically a breaking change (no APIs are changing) it is still a considerable change in the way the wheels are built because they now include the native shared library.
This commit is contained in:
61
python/src/error.rs
Normal file
61
python/src/error.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
// Copyright 2024 Lance Developers.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use pyo3::{
|
||||
exceptions::{PyOSError, PyRuntimeError, PyValueError},
|
||||
PyResult,
|
||||
};
|
||||
|
||||
use lancedb::error::Error as LanceError;
|
||||
|
||||
pub trait PythonErrorExt<T> {
|
||||
/// Convert to a python error based on the Lance error type
|
||||
fn infer_error(self) -> PyResult<T>;
|
||||
/// Convert to OSError
|
||||
fn os_error(self) -> PyResult<T>;
|
||||
/// Convert to RuntimeError
|
||||
fn runtime_error(self) -> PyResult<T>;
|
||||
/// Convert to ValueError
|
||||
fn value_error(self) -> PyResult<T>;
|
||||
}
|
||||
|
||||
impl<T> PythonErrorExt<T> for std::result::Result<T, LanceError> {
|
||||
fn infer_error(self) -> PyResult<T> {
|
||||
match &self {
|
||||
Ok(_) => Ok(self.unwrap()),
|
||||
Err(err) => match err {
|
||||
LanceError::InvalidTableName { .. } => self.value_error(),
|
||||
LanceError::TableNotFound { .. } => self.value_error(),
|
||||
LanceError::TableAlreadyExists { .. } => self.runtime_error(),
|
||||
LanceError::CreateDir { .. } => self.os_error(),
|
||||
LanceError::Store { .. } => self.runtime_error(),
|
||||
LanceError::Lance { .. } => self.runtime_error(),
|
||||
LanceError::Schema { .. } => self.value_error(),
|
||||
LanceError::Runtime { .. } => self.runtime_error(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn os_error(self) -> PyResult<T> {
|
||||
self.map_err(|err| PyOSError::new_err(err.to_string()))
|
||||
}
|
||||
|
||||
fn runtime_error(self) -> PyResult<T> {
|
||||
self.map_err(|err| PyRuntimeError::new_err(err.to_string()))
|
||||
}
|
||||
|
||||
fn value_error(self) -> PyResult<T> {
|
||||
self.map_err(|err| PyValueError::new_err(err.to_string()))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user