aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-02-10 22:28:54 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-02-11 00:25:28 +0200
commitff8b5f63ca6bf0bdbfd36edcaed4091d9d25c3de (patch)
treeef9ff9ac65441d2342338bc33a291a9a4e2abcab
parentf29a9a65cb50e6d3a7d6416de576603eccd0eb30 (diff)
Add query params to py bindings
-rw-r--r--py_bindings/log_db.pyi6
-rw-r--r--py_bindings/requirements.txt1
-rw-r--r--py_bindings/src/lib.rs29
3 files changed, 26 insertions, 10 deletions
diff --git a/py_bindings/log_db.pyi b/py_bindings/log_db.pyi
index 53aa118..aeb6421 100644
--- a/py_bindings/log_db.pyi
+++ b/py_bindings/log_db.pyi
@@ -26,11 +26,11 @@ class DB:
def configure() -> Config: ...
def upsert(self, record: Record) -> None: ...
def get(self, key: str) -> Record: ...
- def find_by(self, key: str, value: "Value") -> list[Record]: ...
- def batch_find_by(self, key: str, values: list["Value"]) -> list[tuple[int, Record]]: ...
+ def find_by(self, key: str, value: "Value", offset: int = ..., limit: int = ...) -> list[Record]: ...
+ def batch_find_by(self, key: str, values: list["Value"], offset: int = ..., limit: int = ...) -> list[tuple[int, Record]]: ...
def delete(self, key: str) -> list[Record]: ...
def delete_by(self, key: str, value: "Value") -> list[Record]: ...
- def range_by(self, key: str, start: "Bound", end: "Bound") -> list[Record]: ...
+ def range_by(self, key: str, start: "Bound", end: "Bound", offset: int = ..., limit: int = ...) -> list[Record]: ...
def tx_begin(self) -> None: ...
def tx_commit(self) -> None: ...
def tx_rollback(self) -> None: ...
diff --git a/py_bindings/requirements.txt b/py_bindings/requirements.txt
new file mode 100644
index 0000000..017c460
--- /dev/null
+++ b/py_bindings/requirements.txt
@@ -0,0 +1 @@
+maturin==1.8.2
diff --git a/py_bindings/src/lib.rs b/py_bindings/src/lib.rs
index 9a14d19..ce62dd7 100644
--- a/py_bindings/src/lib.rs
+++ b/py_bindings/src/lib.rs
@@ -1,6 +1,7 @@
use std::str::FromStr;
+use std::usize;
-use log_db::{self, OwnedBounds};
+use log_db::{self, OwnedBounds, QueryParams, DEFAULT_QUERY_PARAMS};
use pyo3::exceptions::PyException;
use pyo3::prelude::*;
use rust_decimal::Decimal;
@@ -299,31 +300,45 @@ impl DB {
.map_err(|e| PyException::new_err(e.to_string()))
}
- // TODO: refactor out &String
- pub fn find_by(&mut self, field: PyField, key: &Value) -> PyResult<Vec<PyRecord>> {
+ #[pyo3(signature = (field, key, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))]
+ pub fn find_by(
+ &mut self,
+ field: PyField,
+ key: &Value,
+ offset: usize,
+ limit: usize,
+ ) -> PyResult<Vec<PyRecord>> {
+ let params = QueryParams { offset, limit };
self.db
- .find_by(&field, &key.record_value)
+ .find_by_with_params(&field, &key.record_value, &params)
.map_err(|e| PyException::new_err(e.to_string()))
}
- // batch_find_by
+ #[pyo3(signature = (field, keys, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))]
pub fn batch_find_by(
&mut self,
field: PyField,
keys: Vec<Value>,
+ offset: usize,
+ limit: usize,
) -> PyResult<Vec<(usize, PyRecord)>> {
+ let params = QueryParams { offset, limit };
let keys: Vec<log_db::Value> = keys.into_iter().map(|key| key.record_value).collect();
self.db
- .batch_find_by(&field, &keys)
+ .batch_find_by_with_params(&field, &keys, &params)
.map_err(|e| PyException::new_err(e.to_string()))
}
+ #[pyo3(signature = (field, start, end, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))]
pub fn range_by(
&mut self,
field: PyField,
start: &PyRangeBound,
end: &PyRangeBound,
+ offset: usize,
+ limit: usize,
) -> PyResult<Vec<PyRecord>> {
+ let params = QueryParams { offset, limit };
let range = OwnedBounds::new(
match start {
PyRangeBound::Unbounded() => StdBound::Unbounded,
@@ -338,7 +353,7 @@ impl DB {
);
self.db
- .range_by(&field, range)
+ .range_by_with_params(&field, range, &params)
.map_err(|e| PyException::new_err(e.to_string()))
}