From 9f67172d4f93c07eeabbd8f7804e59ded9d3de8c Mon Sep 17 00:00:00 2001 From: karthik Ganeshram Date: Wed, 18 Jan 2023 04:03:36 +0530 Subject: [PATCH] Add redis del, publish, sadd, smembers and srem commands Signed-off-by: karthik Ganeshram --- py/app.py | 9 ++++++++- src/lib.rs | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/py/app.py b/py/app.py index baed786..58eb253 100644 --- a/py/app.py +++ b/py/app.py @@ -1,5 +1,5 @@ from spin_http import Request, Response, http_send -from spin_redis import redis_get, redis_set +from spin_redis import redis_del, redis_get, redis_incr, redis_set, redis_sadd, redis_srem, redis_smembers from spin_config import config_get from os import environ import toml @@ -27,6 +27,13 @@ def handle_request(request): redis_address = config_get("redis_address") redis_set(redis_address, "foo", b"bar") value = redis_get(redis_address, "foo") + redis_del(redis_address, ["testIncr"]) + redis_incr(redis_address, "testIncr") + + redis_sadd(redis_address, "testSets", ["hello", "world"]) + content = redis_smembers(redis_address, "testSets") + redis_srem(redis_address, "testSets", ["hello"]) + assert value == b"bar", f"expected \"bar\", got \"{str(value, 'utf-8')}\"" return Response(200, diff --git a/src/lib.rs b/src/lib.rs index 361ca74..918db08 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -158,6 +158,13 @@ fn spin_http_module(_py: Python<'_>, module: &PyModule) -> PyResult<()> { module.add_class::() } +#[pyo3::pyfunction] +fn redis_del(address: String, keys: Vec) -> PyResult { + let keys = keys.iter().map(|s| s.as_str()).collect::>(); + redis::del(&address, &keys) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis set command")))) +} + #[pyo3::pyfunction] #[pyo3(pass_module)] fn redis_get(module: &PyModule, address: String, key: String) -> PyResult> { @@ -168,17 +175,56 @@ fn redis_get(module: &PyModule, address: String, key: String) -> PyResult PyResult { + redis::incr(&address, &key) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis incr command")))) +} + +#[pyo3::pyfunction] +fn redis_publish(address: String, channel: String, payload: &PyBytes) -> PyResult<()> { + redis::publish(&address, &channel, payload.as_bytes()) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis publish command")))) +} + +#[pyo3::pyfunction] +fn redis_sadd(address: String, key: String, values: Vec) -> PyResult { + let values = values.iter().map(|s| s.as_str()).collect::>(); + redis::sadd(&address, &key, &values) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis set command")))) +} + #[pyo3::pyfunction] fn redis_set(address: String, key: String, value: &PyBytes) -> PyResult<()> { redis::set(&address, &key, value.as_bytes()) .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis set command")))) } +#[pyo3::pyfunction] +fn redis_smembers(address: String, key: String) -> PyResult> { + redis::smembers(&address, &key) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis set command")))) +} + +#[pyo3::pyfunction] +fn redis_srem(address: String, key: String, values: Vec) -> PyResult { + let values = values.iter().map(|s| s.as_str()).collect::>(); + redis::srem(&address, &key, &values) + .map_err(|_| PyErr::from(Anyhow(anyhow!("Error executing Redis set command")))) +} + #[pyo3::pymodule] #[pyo3(name = "spin_redis")] fn spin_redis_module(_py: Python<'_>, module: &PyModule) -> PyResult<()> { + module.add_function(pyo3::wrap_pyfunction!(redis_del, module)?)?; module.add_function(pyo3::wrap_pyfunction!(redis_get, module)?)?; - module.add_function(pyo3::wrap_pyfunction!(redis_set, module)?) + module.add_function(pyo3::wrap_pyfunction!(redis_incr, module)?)?; + module.add_function(pyo3::wrap_pyfunction!(redis_publish, module)?)?; + module.add_function(pyo3::wrap_pyfunction!(redis_sadd, module)?)?; + module.add_function(pyo3::wrap_pyfunction!(redis_set, module)?)?; + module.add_function(pyo3::wrap_pyfunction!(redis_smembers, module)?)?; + module.add_function(pyo3::wrap_pyfunction!(redis_srem, module)?) + } #[pyo3::pyfunction]