| 233 | } |
| 234 | |
| 235 | PyObject* |
| 236 | Connection::open_bucket(PyObject* kwargs) |
| 237 | { |
| 238 | PyObject* pyObj_bucket_name = PyDict_GetItemString(kwargs, "bucket_name"); |
| 239 | PyObject* pyObj_callback = PyDict_GetItemString(kwargs, "callback"); |
| 240 | PyObject* pyObj_errback = PyDict_GetItemString(kwargs, "errback"); |
| 241 | |
| 242 | if (!validate_and_incref_callbacks(pyObj_callback, pyObj_errback)) { |
| 243 | return nullptr; |
| 244 | } |
| 245 | |
| 246 | std::shared_ptr<std::promise<PyObject*>> barrier = nullptr; |
| 247 | std::future<PyObject*> fut; |
| 248 | if (nullptr == pyObj_callback && nullptr == pyObj_errback) { |
| 249 | barrier = std::make_shared<std::promise<PyObject*>>(); |
| 250 | fut = barrier->get_future(); |
| 251 | } |
| 252 | |
| 253 | try { |
| 254 | std::string bucket_name = std::string(PyUnicode_AsUTF8(pyObj_bucket_name)); |
| 255 | |
| 256 | Py_BEGIN_ALLOW_THREADS |
| 257 | { |
| 258 | cluster_.open_bucket( |
| 259 | bucket_name, |
| 260 | [callback = pyObj_callback, errback = pyObj_errback, barrier, this](std::error_code ec) { |
| 261 | handle_connection_operation_callback(ec, "open_bucket", callback, errback, barrier); |
| 262 | }); |
| 263 | } |
| 264 | Py_END_ALLOW_THREADS |
| 265 | |
| 266 | if (barrier) |
| 267 | { |
| 268 | PyObject* result = nullptr; |
| 269 | Py_BEGIN_ALLOW_THREADS result = fut.get(); |
| 270 | Py_END_ALLOW_THREADS return result; |
| 271 | } |
| 272 | Py_RETURN_NONE; |
| 273 | } catch (const std::exception& e) { |
| 274 | if (barrier) { |
| 275 | barrier->set_value(nullptr); |
| 276 | } |
| 277 | PyErr_SetString(PyExc_RuntimeError, e.what()); |
| 278 | Py_XDECREF(pyObj_callback); |
| 279 | Py_XDECREF(pyObj_errback); |
| 280 | return nullptr; |
| 281 | } |
| 282 | } |
| 283 | |
| 284 | PyObject* |
| 285 | Connection::close_bucket(PyObject* kwargs) |
no outgoing calls
no test coverage detected