Generated by Cython 3.3.1
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: oidc.pxi
0001: ################################################################################
0002: ## ___ _ ____ ____
0003: ## / _ \ _ _ ___ ___| |_| _ \| __ )
0004: ## | | | | | | |/ _ \/ __| __| | | | _ \
0005: ## | |_| | |_| | __/\__ \ |_| |_| | |_) |
0006: ## \__\_\\__,_|\___||___/\__|____/|____/
0007: ##
0008: ## Copyright (c) 2014-2019 Appsicle
0009: ## Copyright (c) 2019-2026 QuestDB
0010: ##
0011: ## Licensed under the Apache License, Version 2.0 (the "License");
0012: ## you may not use this file except in compliance with the License.
0013: ## You may obtain a copy of the License at
0014: ##
0015: ## http://www.apache.org/licenses/LICENSE-2.0
0016: ##
0017: ## Unless required by applicable law or agreed to in writing, software
0018: ## distributed under the License is distributed on an "AS IS" BASIS,
0019: ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0020: ## See the License for the specific language governing permissions and
0021: ## limitations under the License.
0022: ##
0023: ################################################################################
0024:
0025: # Native OIDC device-flow glue. The Rust implementation in c-questdb-client is
0026: # the single owner of token acquisition, refresh, caching, and persistence;
0027: # Python retains presentation and adapter conveniences only.
0028:
+0029: if not qdb_oidc_callback_gate_init():
__pyx_t_8 = (!qdb_oidc_callback_gate_init());
if (unlikely(__pyx_t_8)) {
/* … */
}
+0030: raise MemoryError('Could not initialize the OIDC callback shutdown gate')
__pyx_t_16 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_Could_not_initialize_the_OIDC_ca};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 30, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__Pyx_Raise(__pyx_t_17, 0, 0, 0);
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__PYX_ERR(1, 30, __pyx_L1_error)
0031:
0032:
0033: cdef extern from *:
0034: """
0035: /* Re-raise an exception on the main thread at its next bytecode.
0036: CPython runs a pending call exactly where it runs Python signal
0037: handlers, and an exception the call sets propagates from there, so a
0038: parked exception surfaces as if the handler had raised it after the
0039: native call returned -- without running that handler a second time, as
0040: re-arming the signal did. PyPy's cpyext declares the function but
0041: never delivers the call (measured on PyPy 7.3.19), so there this
0042: reports failure, as a full queue does on CPython, and the next
0043: native-return boundary raises the exception instead
0044: (`_oidc_raise_unscheduled_main`). */
0045: #if defined(PYPY_VERSION)
0046: static int questdb_add_pending_call(int (*func)(void*), void* arg) {
0047: (void)func; (void)arg; return -1;
0048: }
0049: #else
0050: static int questdb_add_pending_call(int (*func)(void*), void* arg) {
0051: return Py_AddPendingCall(func, arg);
0052: }
0053: #endif
0054: """
0055: int questdb_add_pending_call(int (*func)(void*) noexcept, void* arg)
0056:
0057: # Defined by every Cython-generated module.
0058: int CYTHON_COMPILING_IN_PYPY
0059:
0060:
0061: cdef extern from "pythread.h":
0062: # A plain C call. Asking `threading` instead runs bytecode, and CPython
0063: # runs pending signal handlers at bytecode boundaries -- inside a callback
0064: # that must first catch them with PyErr_CheckSignals().
0065: unsigned long questdb_thread_ident "PyThread_get_thread_ident" () nogil
0066:
0067:
0068: # A genuinely *interpreted* no-op, used to give PyPy a bytecode boundary at
0069: # which to deliver a pending signal (see `_oidc_signal_tick`). It has to be
0070: # built with exec(): a `def` in this file is compiled to C like everything
0071: # else here, and C frames are exactly what PyPy will not interrupt. The
0072: # backward jump is the boundary PyPy's periodic-action check is tied to.
+0073: _OIDC_SIGNAL_TICK_NS = {}
__pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 73, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS, __pyx_t_17) < (0)) __PYX_ERR(1, 73, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+0074: exec(
__pyx_t_16 = __Pyx_PyExec2(__pyx_mstate_global->__pyx_kp_u_def__oidc_signal_tick_py_for___i, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
0075: 'def _oidc_signal_tick_py():\n'
0076: ' for _ in range(2):\n'
0077: ' pass\n',
+0078: _OIDC_SIGNAL_TICK_NS)
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 78, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17);
+0079: _OIDC_SIGNAL_TICK = _OIDC_SIGNAL_TICK_NS['_oidc_signal_tick_py']
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyObject_Dict_GetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_oidc_signal_tick_py); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK, __pyx_t_17) < (0)) __PYX_ERR(1, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
0080:
0081:
+0082: cdef void_int _oidc_signal_tick() except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_signal_tick(void) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_signal_tick", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0083: """Run any Python signal handler PyPy has left pending.
0084:
0085: A no-op on CPython, where ``PyErr_CheckSignals()`` has already done it.
0086: """
+0087: _OIDC_SIGNAL_TICK()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0088: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
0089:
0090:
+0091: cdef object _oidc_signal_handler_codes():
static PyObject *__pyx_f_7questdb_7_client__oidc_signal_handler_codes(void) {
PyObject *__pyx_v_functools = NULL;
PyObject *__pyx_v_signal = NULL;
PyObject *__pyx_v_types = NULL;
PyObject *__pyx_v_codes = NULL;
PyObject *__pyx_v_signum = NULL;
PyObject *__pyx_v_handler = NULL;
PyObject *__pyx_v_code = NULL;
PyObject *__pyx_v_cls = NULL;
PyObject *__pyx_v_call = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._oidc_signal_handler_codes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_functools);
__Pyx_XDECREF(__pyx_v_signal);
__Pyx_XDECREF(__pyx_v_types);
__Pyx_XDECREF(__pyx_v_codes);
__Pyx_XDECREF(__pyx_v_signum);
__Pyx_XDECREF(__pyx_v_handler);
__Pyx_XDECREF(__pyx_v_code);
__Pyx_XDECREF(__pyx_v_cls);
__Pyx_XDECREF(__pyx_v_call);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0092: """Snapshot handler code AND signum, without reading handler properties.
0093:
0094: The pre-callback snapshot covers a one-shot handler that unregisters
0095: before raising. Only the main thread can run Python signal handlers.
0096: """
+0097: if questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT:
__pyx_t_1 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
if (__pyx_t_1) {
/* … */
}
+0098: return {}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 98, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+0099: import functools
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 99, __pyx_L1_error) __pyx_t_2 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_2); __pyx_v_functools = __pyx_t_2; __pyx_t_2 = 0;
+0100: import signal
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_signal, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 100, __pyx_L1_error) __pyx_t_2 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_2); __pyx_v_signal = __pyx_t_2; __pyx_t_2 = 0;
+0101: import types
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_types, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 101, __pyx_L1_error) __pyx_t_2 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_2); __pyx_v_types = __pyx_t_2; __pyx_t_2 = 0;
+0102: codes = {}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_codes = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+0103: for signum in signal.valid_signals():
__pyx_t_4 = __pyx_v_signal; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_valid_signals, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 103, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 103, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 103, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6)); #else __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 103, __pyx_L1_error) } else { __pyx_t_2 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 103, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_signum, __pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_L4_continue:; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0104: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L13_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L12_try_continue:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_8, __pyx_t_9);
goto __pyx_L4_continue;
__pyx_L13_try_end:;
}
+0105: handler = signal.getsignal(signum)
__pyx_t_10 = __pyx_v_signal;
__Pyx_INCREF(__pyx_t_10);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_signum};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getsignal, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 105, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_XDECREF_SET(__pyx_v_handler, __pyx_t_2);
__pyx_t_2 = 0;
+0106: except (OSError, ValueError):
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_OSError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_11) {
__Pyx_AddTraceback("questdb._client._oidc_signal_handler_codes", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_10, &__pyx_t_12) < 0) __PYX_ERR(1, 106, __pyx_L8_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
+0107: continue # valid_signals includes OS-reserved signal numbers
goto __pyx_L14_except_continue;
__pyx_L14_except_continue:;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L12_try_continue;
}
goto __pyx_L8_except_error;
+0108: while isinstance(handler, functools.partial):
while (1) {
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_functools, __pyx_mstate_global->__pyx_n_u_partial); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 108, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (!__pyx_t_1) break;
+0109: handler = handler.func
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_func); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF_SET(__pyx_v_handler, __pyx_t_12); __pyx_t_12 = 0; }
+0110: if isinstance(handler, types.MethodType):
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_MethodType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 110, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_1) { /* … */ }
+0111: handler = handler.__func__
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_func_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF_SET(__pyx_v_handler, __pyx_t_12); __pyx_t_12 = 0;
+0112: if isinstance(handler, types.FunctionType):
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_FunctionType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 112, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L19; }
+0113: code = handler.__code__
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_XDECREF_SET(__pyx_v_code, __pyx_t_12); __pyx_t_12 = 0;
+0114: elif callable(handler):
__pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_handler); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 114, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L19; }
0115: # Inspect the class dictionary, not the handler instance: an
0116: # unrelated callable signal handler may define a __code__ property
0117: # with side effects or one that raises on access.
+0118: code = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_code, Py_None);
+0119: for cls in type(handler).__mro__:
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_handler)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (likely(PyList_CheckExact(__pyx_t_12)) || PyTuple_CheckExact(__pyx_t_12)) { __pyx_t_10 = __pyx_t_12; __Pyx_INCREF(__pyx_t_10); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_14 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 119, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; for (;;) { if (likely(!__pyx_t_14)) { if (likely(PyList_CheckExact(__pyx_t_10))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_10); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 119, __pyx_L1_error) #endif if (__pyx_t_13 >= __pyx_temp) break; } __pyx_t_12 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_10, __pyx_t_13, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_13; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_10); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 119, __pyx_L1_error) #endif if (__pyx_t_13 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_12 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_13)); #else __pyx_t_12 = __Pyx_PySequence_ITEM(__pyx_t_10, __pyx_t_13); #endif ++__pyx_t_13; } if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 119, __pyx_L1_error) } else { __pyx_t_12 = __pyx_t_14(__pyx_t_10); if (unlikely(!__pyx_t_12)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 119, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_12); __Pyx_XDECREF_SET(__pyx_v_cls, __pyx_t_12); __pyx_t_12 = 0; /* … */ } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L23_for_end; __pyx_L21_break:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L23_for_end; __pyx_L23_for_end:;
+0120: call = cls.__dict__.get('__call__')
__pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_2 = __pyx_t_15; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_call}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __Pyx_XDECREF_SET(__pyx_v_call, __pyx_t_12); __pyx_t_12 = 0;
+0121: if isinstance(call, types.FunctionType):
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_FunctionType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = PyObject_IsInstance(__pyx_v_call, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 121, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_1) { /* … */ }
+0122: code = call.__code__
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_call, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF_SET(__pyx_v_code, __pyx_t_12); __pyx_t_12 = 0;
+0123: break
goto __pyx_L21_break;
0124: else:
+0125: code = None
/*else*/ {
__Pyx_INCREF(Py_None);
__Pyx_XDECREF_SET(__pyx_v_code, Py_None);
}
__pyx_L19:;
+0126: if code is not None:
__pyx_t_1 = (__pyx_v_code != Py_None);
if (__pyx_t_1) {
/* … */
}
+0127: codes.setdefault(code, set()).add(signum)
__pyx_t_15 = PySet_New(0); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_2 = __Pyx_PyDict_SetDefault(__pyx_v_codes, __pyx_v_code, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_12 = __pyx_t_2; __Pyx_INCREF(__pyx_t_12); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_signum}; __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_add, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 127, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0128: return codes
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_codes);
__pyx_r = __pyx_v_codes;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
0129:
0130:
+0131: cdef bint _oidc_traceback_has_signal_call(
static int __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(PyObject *__pyx_v_tb, PyObject *__pyx_v_codes) {
PyObject *__pyx_v_inspect = NULL;
PyObject *__pyx_v_frame = NULL;
PyObject *__pyx_v_code = NULL;
PyObject *__pyx_v_signums = NULL;
PyObject *__pyx_v_frame_locals = NULL;
PyObject *__pyx_v_args = NULL;
PyObject *__pyx_v_varargs_name = NULL;
PyObject *__pyx_v_rest = NULL;
PyObject *__pyx_v_idx = NULL;
PyObject *__pyx_8genexpr3__pyx_v_name = NULL;
int __pyx_r;
__Pyx_INCREF(__pyx_v_tb);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._oidc_traceback_has_signal_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_inspect);
__Pyx_XDECREF(__pyx_v_frame);
__Pyx_XDECREF(__pyx_v_code);
__Pyx_XDECREF(__pyx_v_signums);
__Pyx_XDECREF(__pyx_v_frame_locals);
__Pyx_XDECREF(__pyx_v_args);
__Pyx_XDECREF(__pyx_v_varargs_name);
__Pyx_XDECREF(__pyx_v_rest);
__Pyx_XDECREF(__pyx_v_idx);
__Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name);
__Pyx_XDECREF(__pyx_v_tb);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0132: object tb, object codes) except -1:
0133: """Check the actual (signum, interrupted frame) handler arguments.
0134:
0135: Code identity alone is insufficient: separate closures from one factory
0136: share __code__, and a renderer may call its installed handler as an
0137: ordinary helper without a signal. Python invokes a handler with the
0138: signal number followed by the interrupted Python frame; require both.
0139: """
+0140: import inspect
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_inspect, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 140, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __Pyx_GOTREF(__pyx_t_1); __pyx_v_inspect = __pyx_t_1; __pyx_t_1 = 0;
+0141: while tb is not None:
while (1) {
__pyx_t_3 = (__pyx_v_tb != Py_None);
if (!__pyx_t_3) break;
+0142: frame = tb.tb_frame
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tb, __pyx_mstate_global->__pyx_n_u_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_frame, __pyx_t_1); __pyx_t_1 = 0;
+0143: code = frame.f_code
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_code, __pyx_t_1); __pyx_t_1 = 0;
+0144: signums = codes.get(code)
__pyx_t_4 = __pyx_v_codes;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_code};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 144, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XDECREF_SET(__pyx_v_signums, __pyx_t_1);
__pyx_t_1 = 0;
+0145: if signums:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_signums); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 145, __pyx_L1_error) if (__pyx_t_3) { /* … */ }
+0146: frame_locals = frame.f_locals
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_locals); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_frame_locals, __pyx_t_1); __pyx_t_1 = 0;
+0147: args = [frame_locals[name]
{ /* enter inner scope */
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 147, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
/* … */
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_frame_locals, __pyx_8genexpr3__pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 147, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_GIVEREF(__pyx_t_7);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_1, __pyx_t_7))) __PYX_ERR(1, 147, __pyx_L8_error)
__pyx_t_7 = 0;
+0148: for name in code.co_varnames[:code.co_argcount]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_varnames); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 148, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_argcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 148, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 0, NULL, &__pyx_t_6, NULL, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 148, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { __pyx_t_6 = __pyx_t_7; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 148, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 148, __pyx_L8_error) } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; for (;;) { if (likely(!__pyx_t_9)) { if (likely(PyList_CheckExact(__pyx_t_6))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 148, __pyx_L8_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_6, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_8; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 148, __pyx_L8_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8)); #else __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_8); #endif ++__pyx_t_8; } if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 148, __pyx_L8_error) } else { __pyx_t_7 = __pyx_t_9(__pyx_t_6); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 148, __pyx_L8_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_7); __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_name, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name); __pyx_8genexpr3__pyx_v_name = 0; goto __pyx_L13_exit_scope; __pyx_L8_error:; __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name); __pyx_8genexpr3__pyx_v_name = 0; goto __pyx_L1_error; __pyx_L13_exit_scope:; } /* exit inner scope */ __Pyx_XDECREF_SET(__pyx_v_args, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+0149: if name in frame_locals]
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_8genexpr3__pyx_v_name, __pyx_v_frame_locals, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 149, __pyx_L8_error) if (__pyx_t_3) { /* … */ }
+0150: if code.co_flags & inspect.CO_VARARGS:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_inspect, __pyx_mstate_global->__pyx_n_u_CO_VARARGS); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyNumber_And_object_object(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 150, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_3) { /* … */ }
+0151: varargs_name = code.co_varnames[
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_varnames); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); /* … */ __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_varargs_name, __pyx_t_1); __pyx_t_1 = 0;
+0152: code.co_argcount + code.co_kwonlyargcount]
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_argcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_kwonlyargcount); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyNumber_Add_object_object(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 152, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0153: rest = frame_locals.get(varargs_name)
__pyx_t_4 = __pyx_v_frame_locals;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_varargs_name};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 153, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XDECREF_SET(__pyx_v_rest, __pyx_t_1);
__pyx_t_1 = 0;
+0154: if isinstance(rest, tuple):
__pyx_t_3 = PyTuple_Check(__pyx_v_rest);
if (__pyx_t_3) {
/* … */
}
+0155: args.extend(rest)
__pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_args, __pyx_v_rest); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 155, __pyx_L1_error)
+0156: for idx in range(len(args) - 1):
__pyx_t_4 = NULL;
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 156, __pyx_L1_error)
__pyx_t_7 = PyLong_FromSsize_t((__pyx_t_8 - 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 156, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 156, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 156, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 156, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
for (;;) {
{
__pyx_t_1 = __pyx_t_9(__pyx_t_7);
if (unlikely(!__pyx_t_1)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 156, __pyx_L1_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_1);
if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
__Pyx_XDECREF_SET(__pyx_v_idx, ((PyObject*)__pyx_t_1));
__pyx_t_1 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0157: if (type(args[idx]) is int and args[idx] in signums
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_v_idx); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = (((PyObject *)Py_TYPE(__pyx_t_1)) == ((PyObject *)(&PyLong_Type))); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_11) { } else { __pyx_t_3 = __pyx_t_11; goto __pyx_L19_bool_binop_done; } /* … */ __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_v_idx); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_11 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_signums, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(1, 157, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_11) { } else { __pyx_t_3 = __pyx_t_11; goto __pyx_L19_bool_binop_done; } /* … */ if (__pyx_t_3) { /* … */ }
+0158: and args[idx + 1] is frame.f_back):
__pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_v_idx, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = (__pyx_t_4 == __pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __pyx_t_11; __pyx_L19_bool_binop_done:;
+0159: return True
{
__pyx_r = 1;
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L0;
+0160: tb = tb.tb_next
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_tb, __pyx_mstate_global->__pyx_n_u_tb_next); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_tb, __pyx_t_7); __pyx_t_7 = 0; }
+0161: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
0162:
0163:
+0164: cdef bint _oidc_raised_in_signal_handler(
static int __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(PyObject *__pyx_v_exc, PyObject *__pyx_v_installed_codes) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_raised_in_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0165: object exc, object installed_codes) except -1:
0166: """Identify a delivered signal, not an ordinary renderer/logger error."""
+0167: if _oidc_traceback_has_signal_call(exc.__traceback__, installed_codes):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_traceback); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(__pyx_t_1, __pyx_v_installed_codes); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 167, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+0168: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
0169: # A callback may install a new handler after the snapshot. Also check the
0170: # handlers still installed at the point of failure; the snapshot above
0171: # remains necessary for one-shot handlers that removed themselves.
+0172: return _oidc_traceback_has_signal_call(
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(__pyx_t_1, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 172, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
+0173: exc.__traceback__, _oidc_signal_handler_codes())
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_traceback); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
0174:
0175:
+0176: def _oidc_exception_is_from_signal_handler(object exc):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_4_oidc_exception_is_from_signal_handler, "Whether ``exc`` was raised by a Python signal handler.\n\n For the built-in renderers, whose best-effort ``except Exception`` blocks\n would otherwise swallow a signal handler\047s exception (a SIGALRM deadline\047s\n ``TimeoutError``, say) raised while they run, so ``sign_in()`` kept\n polling. They re-raise it for the event dispatcher to cancel the sign-in,\n exactly as for a custom renderer.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_5_oidc_exception_is_from_signal_handler = {"_oidc_exception_is_from_signal_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_4_oidc_exception_is_from_signal_handler}; static PyObject *__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_exc = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_oidc_exception_is_from_signal_handler (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 176, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 176, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_oidc_exception_is_from_signal_handler", 0) < (0)) __PYX_ERR(1, 176, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_oidc_exception_is_from_signal_handler", 1, 1, 1, i); __PYX_ERR(1, 176, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 176, __pyx_L3_error) } __pyx_v_exc = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_oidc_exception_is_from_signal_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 176, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._oidc_exception_is_from_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_4_oidc_exception_is_from_signal_handler(__pyx_self, __pyx_v_exc); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_4_oidc_exception_is_from_signal_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exc) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._oidc_exception_is_from_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_5_oidc_exception_is_from_signal_handler, 0, __pyx_mstate_global->__pyx_n_u_oidc_exception_is_from_signal_h, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_exception_is_from_signal_h, __pyx_t_17) < (0)) __PYX_ERR(1, 176, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
0177: """Whether ``exc`` was raised by a Python signal handler.
0178:
0179: For the built-in renderers, whose best-effort ``except Exception`` blocks
0180: would otherwise swallow a signal handler's exception (a SIGALRM deadline's
0181: ``TimeoutError``, say) raised while they run, so ``sign_in()`` kept
0182: polling. They re-raise it for the event dispatcher to cancel the sign-in,
0183: exactly as for a custom renderer.
0184: """
+0185: return bool(_oidc_raised_in_signal_handler(
__pyx_t_2 = NULL; /* … */ __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 185, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 185, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+0186: exc, _oidc_signal_handler_codes()))
__pyx_t_3 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
0187:
0188:
0189: # Exceptions Python signal handlers raised on the MAIN thread inside a
0190: # persistence diagnostic that no foreground sign_in()/token()/clear() record
0191: # can re-raise -- an attached transport (an ILP/HTTP flush, say) pulled the
0192: # token on the caller's thread with the GIL released. Catching one inside the
0193: # callback already cleared CPython's tripped-signal state, so each is handed
0194: # back to the main thread through a pending call (`_oidc_raise_parked_main`),
0195: # oldest first, one per pending call -- as CPython itself delivers two
0196: # signals' exceptions at successive bytecode boundaries. Where no pending call
0197: # can be queued -- always on PyPy -- the next native-return boundary raises
0198: # them instead (`_oidc_raise_unscheduled_main`). Bounded: only a handler that
0199: # raises adds to it. Touched only with the GIL held.
0200: #
0201: # Each entry is `(exception, owner)`: the greenlet that was running when the
0202: # exception was caught, or None without greenlets. Greenlets share the main
0203: # thread, and an exception gevent throws into one greenlet's callback -- a
0204: # `gevent.Timeout`, the `GreenletExit` of `kill()` -- is parked like a signal's;
0205: # it is raised only in its own greenlet, never in whichever one runs next.
+0206: cdef list _OIDC_MAIN_PARKED = []
__pyx_t_17 = PyList_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, ((PyObject*)__pyx_t_17)); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_17 = 0;
+0207: cdef Py_ssize_t _OIDC_MAIN_PARKED_MAX = 64
__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED_MAX = 64;
+0208: cdef bint _OIDC_MAIN_PARK_SCHEDULED = False
__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
0209: # Internal fault injection, used to exercise CPython's documented full-queue
0210: # return without a racy native producer flooding the process-wide queue.
+0211: cdef int _OIDC_PENDING_CALL_FAILURES_REMAINING = 0
__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 0;
+0212: cdef bint _OIDC_COUNT_NATIVE_FREES = False
__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES = 0;
+0213: cdef uint64_t _OIDC_TOKEN_FREES = 0
__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = 0;
+0214: cdef uint64_t _OIDC_ERROR_FREES = 0
__pyx_v_7questdb_7_client__OIDC_ERROR_FREES = 0;
0215: # Regions of code ON THE MAIN THREAD in which a parked exception must not be
0216: # raised, by kind:
0217: #
0218: # * A diagnostic dispatch: a pending call that fires inside one (the logging
0219: # call runs bytecode) must not raise there, where the dispatcher would take
0220: # the exception for a logging-handler failure; it defers, and the dispatcher
0221: # reschedules on its way out. Pending calls only ever run on the main thread,
0222: # so dispatches on other threads are not counted: counting them let an
0223: # unrelated worker's slow logging handler hold back the main thread's
0224: # interrupt for as long as that handler ran, while the main thread kept
0225: # executing user code.
0226: # * A token callback: they can run repeatedly inside one GIL-released
0227: # transport call, and parked exceptions must never be delivered back into
0228: # one.
0229: # * Row serialization, which wraps ordinary exceptions as dataframe errors:
0230: # saved signals are delivered only after leaving it, at Sender.dataframe's
0231: # outer boundary.
0232: #
0233: # Each kind maps a context to its depth: the greenlet running when the region
0234: # was entered, or None without greenlets. A greenlet suspended inside a region
0235: # -- a token provider waiting on gevent I/O, say -- then holds back only its
0236: # own exceptions, not those of the greenlet that runs meanwhile. A region
0237: # entered before the greenlet module was loaded counts for every greenlet, and
0238: # so does one that could not be recorded (`_OIDC_MAIN_UNTRACKED_REGIONS`).
+0239: cdef enum:
enum {
__pyx_e_7questdb_7_client__OIDC_REGION_TOKEN = 0,
__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC = 1,
__pyx_e_7questdb_7_client__OIDC_REGION_DATAFRAME = 2,
__pyx_e_7questdb_7_client__OIDC_REGION_KINDS = 3
};
0240: _OIDC_REGION_TOKEN = 0
0241: _OIDC_REGION_DIAGNOSTIC = 1
0242: _OIDC_REGION_DATAFRAME = 2
0243: _OIDC_REGION_KINDS = 3
+0244: cdef list _OIDC_MAIN_REGIONS = [{}, {}, {}]
__pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); { PyObject* __pyx_temp[3] = {__pyx_t_17, __pyx_t_16, __pyx_t_5}; __pyx_t_18 = __Pyx_PyList_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, ((PyObject*)__pyx_t_18)); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
+0245: cdef int _OIDC_MAIN_UNTRACKED_REGIONS = 0
__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = 0;
0246: # Marks a region `_oidc_main_region_enter` could not record, and an unset value.
+0247: cdef object _OIDC_UNTRACKED = object()
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 247, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_UNTRACKED);
__Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_UNTRACKED, __pyx_t_18);
__Pyx_GIVEREF(__pyx_t_18);
__pyx_t_18 = 0;
+0248: cdef object _OIDC_UNSET = object()
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 248, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
__Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_UNSET, __pyx_t_18);
__Pyx_GIVEREF(__pyx_t_18);
__pyx_t_18 = 0;
0249: # `greenlet.getcurrent` and the base type's C `dead` and `parent` getters,
0250: # once the greenlet module is loaded. Never imported here: without greenlets
0251: # there is nothing to tell apart.
+0252: cdef object _OIDC_GREENLET_GETCURRENT = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT, Py_None); __Pyx_GIVEREF(Py_None);
+0253: cdef object _OIDC_GREENLET_DEAD = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD, Py_None); __Pyx_GIVEREF(Py_None);
+0254: cdef object _OIDC_GREENLET_PARENT = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT, Py_None); __Pyx_GIVEREF(Py_None);
0255:
+0256: import sys as _oidc_sys
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 256, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_sys, __pyx_t_18) < (0)) __PYX_ERR(1, 256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0257:
0258:
+0259: cdef unsigned long _oidc_main_thread_ident() except? 0:
static unsigned long __pyx_f_7questdb_7_client__oidc_main_thread_ident(void) {
unsigned long __pyx_v_ident;
PyObject *__pyx_v_main = NULL;
PyObject *__pyx_v_get_native_id = NULL;
unsigned long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._oidc_main_thread_ident", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_main);
__Pyx_XDECREF(__pyx_v_get_native_id);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0260: """The interpreter's main thread, as ``questdb_thread_ident`` reports it.
0261:
0262: ``threading.main_thread()`` names that thread whichever thread imports this
0263: module, but its ``ident`` is the threading module's view, and gevent's
0264: monkey-patching makes that a greenlet id. A greenlet id never equals the
0265: native ident the main-thread checks compare against, and on 64-bit Windows
0266: it does not fit an ``unsigned long``, so importing questdb after
0267: ``monkey.patch_all()`` failed there with OverflowError. gevent leaves
0268: ``get_native_id()`` alone: it tells whether this is the main OS thread,
0269: whichever greenlet runs, and there the native ident is at hand.
0270: """
0271: cdef unsigned long ident
+0272: main = threading.main_thread()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_main_thread); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_main = __pyx_t_1; __pyx_t_1 = 0;
+0273: get_native_id = getattr(threading, 'get_native_id', None)
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_get_native_id, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_get_native_id = __pyx_t_4; __pyx_t_4 = 0;
+0274: if (get_native_id is not None and main.native_id is not None
__pyx_t_7 = (__pyx_v_get_native_id != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_6 = __pyx_t_7;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_native_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 274, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
/* … */
__pyx_t_7 = (__pyx_t_4 != Py_None);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__pyx_t_7) {
} else {
__pyx_t_6 = __pyx_t_7;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+0275: and main.native_id == get_native_id()):
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_native_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = NULL; __Pyx_INCREF(__pyx_v_get_native_id); __pyx_t_3 = __pyx_v_get_native_id; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_4, __pyx_t_1, Py_EQ); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 275, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = __pyx_t_7; __pyx_L4_bool_binop_done:;
+0276: return questdb_thread_ident()
{
__pyx_r = PyThread_get_thread_ident();
}
goto __pyx_L0;
0277: # Imported from another OS thread, where `ident` is native -- unless gevent
0278: # patched it, and then no native ident is to be had. Match no thread rather
0279: # than fail the import over a greenlet id that does not fit.
+0280: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L10_except_return:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L0;
__pyx_L12_try_end:;
}
+0281: ident = main.ident
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 281, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyLong_As_unsigned_long(__pyx_t_1); if (unlikely((__pyx_t_11 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(1, 281, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_ident = __pyx_t_11;
+0282: except OverflowError:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_OverflowError)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0);
+0283: return 0
{
__pyx_r = 0;
}
goto __pyx_L10_except_return;
}
goto __pyx_L9_except_error;
+0284: return ident
{
__pyx_r = __pyx_v_ident;
}
goto __pyx_L0;
0285:
0286:
0287: # `_oidc_after_fork_in_child` re-reads the main thread in a child forked from
0288: # another thread, where the forking thread becomes the main thread: a stale
0289: # value there made every diagnostic on the child's real main thread look like a
0290: # worker's, so an exception it parked was never scheduled and was lost.
+0291: cdef unsigned long _OIDC_MAIN_THREAD_IDENT = _oidc_main_thread_ident()
__pyx_t_30 = __pyx_f_7questdb_7_client__oidc_main_thread_ident(); if (unlikely(__pyx_t_30 == ((unsigned long)0) && PyErr_Occurred())) __PYX_ERR(1, 291, __pyx_L1_error) __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT = __pyx_t_30;
0292:
0293:
+0294: def _oidc_after_fork_in_child():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6_oidc_after_fork_in_child, "Re-anchor the main-thread state in a freshly forked child.\n\n Runs on the forking thread, the only thread the child has and therefore\n its main thread. When that is not the thread this state described, the\n in-flight diagnostic dispatches it counted, the exception it parked and\n the pending call scheduled for it all belonged to a thread that does not\n exist here: start clean rather than holding a stale exception forever (or\n deferring every later one behind a depth that can never return to zero).\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7_oidc_after_fork_in_child = {"_oidc_after_fork_in_child", (PyCFunction)__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child, METH_NOARGS, __pyx_doc_7questdb_7_client_6_oidc_after_fork_in_child}; static PyObject *__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_oidc_after_fork_in_child (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_6_oidc_after_fork_in_child(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6_oidc_after_fork_in_child(CYTHON_UNUSED PyObject *__pyx_self) { unsigned long __pyx_v_current; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client._oidc_after_fork_in_child", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7_oidc_after_fork_in_child, 0, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child, __pyx_t_18) < (0)) __PYX_ERR(1, 294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0295: """Re-anchor the main-thread state in a freshly forked child.
0296:
0297: Runs on the forking thread, the only thread the child has and therefore
0298: its main thread. When that is not the thread this state described, the
0299: in-flight diagnostic dispatches it counted, the exception it parked and
0300: the pending call scheduled for it all belonged to a thread that does not
0301: exist here: start clean rather than holding a stale exception forever (or
0302: deferring every later one behind a depth that can never return to zero).
0303: """
0304: global _OIDC_MAIN_THREAD_IDENT, _OIDC_MAIN_PARKED
0305: global _OIDC_MAIN_PARK_SCHEDULED, _OIDC_MAIN_REGIONS
0306: global _OIDC_MAIN_UNTRACKED_REGIONS
0307: global _OIDC_REGISTRY_LOCK, _OIDC_DIAGNOSTICS_ACTIVE
0308: global _OIDC_DIAGNOSTICS_DRAINED
+0309: cdef unsigned long current = questdb_thread_ident()
__pyx_v_current = PyThread_get_thread_ident();
+0310: if not qdb_oidc_callback_gate_init():
__pyx_t_1 = (!qdb_oidc_callback_gate_init());
if (unlikely(__pyx_t_1)) {
/* … */
}
+0311: raise MemoryError('Could not reset the OIDC callback gate after fork')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_reset_the_OIDC_callbac};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 311, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 311, __pyx_L1_error)
0312: # The forking thread is the child's main thread.
+0313: qdb_oidc_callback_gate_set_owner(current)
qdb_oidc_callback_gate_set_owner(__pyx_v_current);
0314: # The registry lock may have been held by a parent thread that disappeared.
0315: # Keep its entries, but never try to acquire the inherited lock in a child.
+0316: _OIDC_REGISTRY_LOCK = threading.RLock()
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
+0317: _OIDC_DIAGNOSTICS_DRAINED = threading.Condition(_OIDC_REGISTRY_LOCK)
__pyx_t_6 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
0318: # Any callback active in the parent either belonged to a vanished thread
0319: # or cannot continue across fork. Do not reject pool closes in the child.
+0320: _OIDC_DIAGNOSTICS_ACTIVE = {}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, ((PyObject*)__pyx_t_2)); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
+0321: if current == _OIDC_MAIN_THREAD_IDENT:
__pyx_t_1 = (__pyx_v_current == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
if (__pyx_t_1) {
/* … */
}
+0322: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0323: _OIDC_MAIN_THREAD_IDENT = current
__pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT = __pyx_v_current;
+0324: _OIDC_MAIN_PARKED = []
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, ((PyObject*)__pyx_t_2)); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
+0325: _OIDC_MAIN_PARK_SCHEDULED = False
__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
+0326: _OIDC_MAIN_REGIONS = [{}, {}, {}]
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 326, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5) != (0)) __PYX_ERR(1, 326, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_6) != (0)) __PYX_ERR(1, 326, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, ((PyObject*)__pyx_t_3)); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0;
+0327: _OIDC_MAIN_UNTRACKED_REGIONS = 0
__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = 0;
0328:
0329:
0330: # `_client.pyx` includes this file before its own `import os`.
+0331: import os
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 331, __pyx_L1_error) __pyx_t_18 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_18) < (0)) __PYX_ERR(1, 331, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0332:
+0333: if hasattr(os, 'register_at_fork'):
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_8 = __Pyx_HasAttr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_register_at_fork); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 333, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__pyx_t_8) { /* … */ }
+0334: os.register_at_fork(after_in_child=_oidc_after_fork_in_child)
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
__pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_register_at_fork); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
#if CYTHON_VECTORCALL
#endif
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_16};
#if CYTHON_VECTORCALL
__pyx_t_19 = __pyx_mstate_global->__pyx_tuple[60];
if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_19);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_after_in_child};
__pyx_t_19 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
}
#endif
__pyx_t_18 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_19);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_after_in_child};
__pyx_mstate_global->__pyx_tuple[60] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[60])) __PYX_ERR(1, 334, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[60]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[60]);
0335:
0336:
0337: # The exit drain runs on the main thread and does not wait for callbacks
0338: # admitted there: only a greenlet suspended inside one can hold such an
0339: # admission while that thread runs the drain, and it cannot resume until the
0340: # drain returns (see `qdb_oidc_callback_drain`).
+0341: qdb_oidc_callback_gate_set_owner(_OIDC_MAIN_THREAD_IDENT)
qdb_oidc_callback_gate_set_owner(__pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
0342:
0343:
+0344: def _debug_oidc_main_thread_ident():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_8_debug_oidc_main_thread_ident, "Internal test hook: the thread OIDC treats as the main thread."); static PyMethodDef __pyx_mdef_7questdb_7_client_9_debug_oidc_main_thread_ident = {"_debug_oidc_main_thread_ident", (PyCFunction)__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident, METH_NOARGS, __pyx_doc_7questdb_7_client_8_debug_oidc_main_thread_ident}; static PyObject *__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_main_thread_ident (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_8_debug_oidc_main_thread_ident(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_8_debug_oidc_main_thread_ident(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_oidc_main_thread_ident", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_9_debug_oidc_main_thread_ident, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_main_thread_ident, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_main_thread_ident, __pyx_t_18) < (0)) __PYX_ERR(1, 344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0345: """Internal test hook: the thread OIDC treats as the main thread."""
+0346: return _OIDC_MAIN_THREAD_IDENT
__pyx_t_1 = __Pyx_PyLong_From_unsigned_long(__pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0347:
0348:
+0349: cdef object _oidc_main_context():
static PyObject *__pyx_f_7questdb_7_client__oidc_main_context(void) {
PyObject *__pyx_v_getcurrent = 0;
PyObject *__pyx_v_module = NULL;
PyObject *__pyx_v_base = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._oidc_main_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_getcurrent);
__Pyx_XDECREF(__pyx_v_module);
__Pyx_XDECREF(__pyx_v_base);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0350: """The greenlet running on the main thread now, or None while the greenlet
0351: module is not loaded.
0352:
0353: Main thread only, GIL held. Runs no bytecode: module, dictionary and
0354: attribute lookups, and the C `greenlet.getcurrent()`, so no pending signal
0355: handler runs inside it. PyPy's greenlet module is Python code, which can
0356: run one there, so on PyPy greenlets are not told apart.
0357: """
0358: global _OIDC_GREENLET_GETCURRENT, _OIDC_GREENLET_DEAD
0359: global _OIDC_GREENLET_PARENT
+0360: cdef object getcurrent = _OIDC_GREENLET_GETCURRENT
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT);
__pyx_v_getcurrent = __pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT;
+0361: if CYTHON_COMPILING_IN_PYPY:
__pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);
if (__pyx_t_1) {
/* … */
}
+0362: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0363: if getcurrent is None:
__pyx_t_1 = (__pyx_v_getcurrent == Py_None);
if (__pyx_t_1) {
/* … */
}
+0364: module = _oidc_sys.modules.get('greenlet')
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_oidc_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_greenlet}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_module = __pyx_t_2; __pyx_t_2 = 0;
+0365: if module is None:
__pyx_t_1 = (__pyx_v_module == Py_None);
if (__pyx_t_1) {
/* … */
}
+0366: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0367: getcurrent = getattr(module, 'getcurrent', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_getcurrent, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_getcurrent, __pyx_t_2); __pyx_t_2 = 0;
+0368: base = getattr(module, 'greenlet', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_greenlet, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_base = __pyx_t_2; __pyx_t_2 = 0;
+0369: if getcurrent is None or base is None:
__pyx_t_7 = (__pyx_v_getcurrent == Py_None);
if (!__pyx_t_7) {
} else {
__pyx_t_1 = __pyx_t_7;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_7 = (__pyx_v_base == Py_None);
__pyx_t_1 = __pyx_t_7;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0370: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0371: _OIDC_GREENLET_DEAD = base.__dict__['dead']
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dead); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+0372: _OIDC_GREENLET_PARENT = base.__dict__['parent']
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_parent); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
+0373: _OIDC_GREENLET_GETCURRENT = getcurrent
__Pyx_INCREF(__pyx_v_getcurrent); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT, __pyx_v_getcurrent); __Pyx_GIVEREF(__pyx_v_getcurrent);
+0374: return getcurrent()
__pyx_t_5 = NULL; __Pyx_INCREF(__pyx_v_getcurrent); __pyx_t_3 = __pyx_v_getcurrent; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
0375:
0376:
+0377: cdef object _oidc_main_region_enter(int kind):
static PyObject *__pyx_f_7questdb_7_client__oidc_main_region_enter(int __pyx_v_kind) {
PyObject *__pyx_v_regions = 0;
PyObject *__pyx_v_context = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._oidc_main_region_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_regions);
__Pyx_XDECREF(__pyx_v_context);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0378: """Enter a main-thread region of ``kind`` (see `_OIDC_MAIN_REGIONS`).
0379:
0380: Main thread only. Never raises: a region it cannot record counts for
0381: every greenlet. Pass the result to `_oidc_main_region_exit`.
0382: """
0383: global _OIDC_MAIN_UNTRACKED_REGIONS
0384: cdef dict regions
+0385: try:
{
/*try:*/ {
/* … */
}
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_except_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
}
+0386: context = _oidc_main_context()
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 386, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_context = __pyx_t_4; __pyx_t_4 = 0;
+0387: regions = <dict>_OIDC_MAIN_REGIONS[kind]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 387, __pyx_L3_error)
}
__pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_kind, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 387, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __pyx_t_4;
__Pyx_INCREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_regions = ((PyObject*)__pyx_t_5);
__pyx_t_5 = 0;
+0388: regions[context] = regions.get(context, 0) + 1
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 388, __pyx_L3_error)
}
__pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_regions, __pyx_v_context, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 388, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 388, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 388, __pyx_L3_error)
}
if (unlikely((PyDict_SetItem(__pyx_v_regions, __pyx_v_context, __pyx_t_4) < 0))) __PYX_ERR(1, 388, __pyx_L3_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0389: return context
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_context);
__pyx_r = __pyx_v_context;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L7_try_return;
+0390: except BaseException:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_6) { __Pyx_AddTraceback("questdb._client._oidc_main_region_enter", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_7) < 0) __PYX_ERR(1, 390, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_7);
+0391: _OIDC_MAIN_UNTRACKED_REGIONS += 1
__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS + 1);
+0392: return _OIDC_UNTRACKED
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNTRACKED);
__pyx_r = __pyx_v_7questdb_7_client__OIDC_UNTRACKED;
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L6_except_return;
}
goto __pyx_L5_except_error;
0393:
0394:
+0395: cdef void _oidc_main_region_exit(int kind, object context) noexcept:
static void __pyx_f_7questdb_7_client__oidc_main_region_exit(int __pyx_v_kind, PyObject *__pyx_v_context) {
PyObject *__pyx_v_regions = 0;
PyObject *__pyx_v_depth = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_WriteUnraisable("questdb._client._oidc_main_region_exit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_regions);
__Pyx_XDECREF(__pyx_v_depth);
__Pyx_RefNannyFinishContext();
}
0396: global _OIDC_MAIN_UNTRACKED_REGIONS
0397: cdef dict regions
+0398: if context is _OIDC_UNTRACKED:
__pyx_t_1 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNTRACKED);
if (__pyx_t_1) {
/* … */
}
+0399: _OIDC_MAIN_UNTRACKED_REGIONS -= 1
__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS - 1);
+0400: return
{
}
goto __pyx_L0;
+0401: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L9_try_end:;
}
+0402: regions = <dict>_OIDC_MAIN_REGIONS[kind]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 402, __pyx_L4_error)
}
__pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_kind, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 402, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __pyx_t_5;
__Pyx_INCREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_v_regions = ((PyObject*)__pyx_t_6);
__pyx_t_6 = 0;
+0403: depth = regions.get(context, 0) - 1
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 403, __pyx_L4_error)
}
__pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_regions, __pyx_v_context, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 403, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __Pyx_PyLong_SubtractObjC(__pyx_t_6, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 403, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_v_depth = __pyx_t_5;
__pyx_t_5 = 0;
+0404: if depth > 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_depth, __pyx_mstate_global->__pyx_int_0, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 404, __pyx_L4_error) if (__pyx_t_1) { /* … */ goto __pyx_L10; }
+0405: regions[context] = depth
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 405, __pyx_L4_error)
}
if (unlikely((PyDict_SetItem(__pyx_v_regions, __pyx_v_context, __pyx_v_depth) < 0))) __PYX_ERR(1, 405, __pyx_L4_error)
0406: else:
+0407: regions.pop(context, None)
/*else*/ {
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 407, __pyx_L4_error)
}
__pyx_t_7 = __Pyx_PyDict_Pop_ignore(__pyx_v_regions, __pyx_v_context, Py_None); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 407, __pyx_L4_error)
}
__pyx_L10:;
+0408: except BaseException:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0); goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
0409: pass
0410:
0411:
+0412: cdef bint _oidc_main_region_active(int kind) noexcept:
static int __pyx_f_7questdb_7_client__oidc_main_region_active(int __pyx_v_kind) {
PyObject *__pyx_v_regions = 0;
int __pyx_v_k;
PyObject *__pyx_v_context = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_WriteUnraisable("questdb._client._oidc_main_region_active", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_regions);
__Pyx_XDECREF(__pyx_v_context);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0413: """Whether the code running on the main thread now is inside a region of
0414: ``kind``, or of any kind when ``kind`` is negative."""
0415: cdef dict regions
0416: cdef int k
+0417: if _OIDC_MAIN_UNTRACKED_REGIONS > 0:
__pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS > 0);
if (__pyx_t_1) {
/* … */
}
+0418: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+0419: try:
{
/*try:*/ {
/* … */
}
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L8_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
}
+0420: context = _OIDC_UNSET
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
__pyx_v_context = __pyx_v_7questdb_7_client__OIDC_UNSET;
+0421: for k in range(_OIDC_REGION_KINDS):
__pyx_t_5 = __pyx_e_7questdb_7_client__OIDC_REGION_KINDS;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_k = __pyx_t_7;
+0422: if kind >= 0 and k != kind:
__pyx_t_8 = (__pyx_v_kind >= 0);
if (__pyx_t_8) {
} else {
__pyx_t_1 = __pyx_t_8;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_k != __pyx_v_kind);
__pyx_t_1 = __pyx_t_8;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0423: continue
goto __pyx_L10_continue;
+0424: regions = <dict>_OIDC_MAIN_REGIONS[k]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 424, __pyx_L4_error)
}
__pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_k, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 424, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = __pyx_t_9;
__Pyx_INCREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF_SET(__pyx_v_regions, ((PyObject*)__pyx_t_10));
__pyx_t_10 = 0;
+0425: if not regions:
if (__pyx_v_regions == Py_None) __pyx_t_1 = 0;
else
{
Py_ssize_t __pyx_temp = __Pyx_PyDict_GET_SIZE(__pyx_v_regions);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 425, __pyx_L4_error)
__pyx_t_1 = (__pyx_temp != 0);
}
__pyx_t_8 = (!__pyx_t_1);
if (__pyx_t_8) {
/* … */
}
+0426: continue
goto __pyx_L10_continue;
+0427: if None in regions:
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(1, 427, __pyx_L4_error)
}
__pyx_t_8 = (__Pyx_PyDict_ContainsTF(Py_None, __pyx_v_regions, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 427, __pyx_L4_error)
if (__pyx_t_8) {
/* … */
}
+0428: return True
{
__pyx_r = 1;
}
goto __pyx_L8_try_return;
+0429: if context is _OIDC_UNSET:
__pyx_t_8 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNSET);
if (__pyx_t_8) {
/* … */
}
+0430: context = _oidc_main_context()
__pyx_t_10 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 430, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_10); __pyx_t_10 = 0;
+0431: if context is not None and context in regions:
__pyx_t_1 = (__pyx_v_context != Py_None);
if (__pyx_t_1) {
} else {
__pyx_t_8 = __pyx_t_1;
goto __pyx_L19_bool_binop_done;
}
if (unlikely(__pyx_v_regions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(1, 431, __pyx_L4_error)
}
__pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_context, __pyx_v_regions, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 431, __pyx_L4_error)
__pyx_t_8 = __pyx_t_1;
__pyx_L19_bool_binop_done:;
if (__pyx_t_8) {
/* … */
}
__pyx_L10_continue:;
}
+0432: return True
{
__pyx_r = 1;
}
goto __pyx_L8_try_return;
+0433: return False
{
__pyx_r = 0;
}
goto __pyx_L8_try_return;
+0434: except BaseException:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0);
+0435: return True
{
__pyx_r = 1;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
0436:
0437:
+0438: cdef Py_ssize_t _oidc_parked_index(bint queued_rule) except -2:
static Py_ssize_t __pyx_f_7questdb_7_client__oidc_parked_index(int __pyx_v_queued_rule) {
Py_ssize_t __pyx_v_i;
PyObject *__pyx_v_context = 0;
PyObject *__pyx_v_owner = NULL;
Py_ssize_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._oidc_parked_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -2L;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_context);
__Pyx_XDECREF(__pyx_v_owner);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0439: """The index of the oldest parked exception that may be raised in the
0440: code running on the main thread now, or -1.
0441:
0442: An exception a greenlet parked is raised only in that greenlet. One parked
0443: without greenlets, or by the main greenlet, keeps the rule for a single
0444: flow of control: it is eligible when ``queued_rule`` is true (always for
0445: the pending call, and at a native-return boundary only when no pending
0446: call is queued). One parked by any other greenlet -- a gevent greenlet --
0447: is eligible whenever that greenlet runs: the queued pending call may run
0448: in another greenlet first, and that greenlet may end before it runs code
0449: the call could interrupt. An exception whose greenlet has died is
0450: dropped: nothing could ever raise it.
0451: """
+0452: cdef Py_ssize_t i = 0
__pyx_v_i = 0;
+0453: cdef object context = _OIDC_UNSET
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
__pyx_v_context = __pyx_v_7questdb_7_client__OIDC_UNSET;
+0454: while i < len(_OIDC_MAIN_PARKED):
while (1) {
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED;
__Pyx_INCREF(__pyx_t_1);
if (unlikely(__pyx_t_1 == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
__PYX_ERR(1, 454, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 454, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_3 = (__pyx_v_i < __pyx_t_2);
if (!__pyx_t_3) break;
+0455: owner = (<tuple>_OIDC_MAIN_PARKED[i])[1]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 455, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 455, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (unlikely(__pyx_t_1 == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 455, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_t_1), 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 455, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF_SET(__pyx_v_owner, __pyx_t_4);
__pyx_t_4 = 0;
+0456: if owner is None:
__pyx_t_3 = (__pyx_v_owner == Py_None);
if (__pyx_t_3) {
/* … */
goto __pyx_L5;
}
+0457: if queued_rule:
if (__pyx_v_queued_rule) {
/* … */
}
+0458: return i
{
__pyx_r = __pyx_v_i;
}
goto __pyx_L0;
+0459: elif _OIDC_GREENLET_DEAD.__get__(owner, None):
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_owner, Py_None};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 459, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 459, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__pyx_t_3) {
/* … */
}
+0460: del _OIDC_MAIN_PARKED[i]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 460, __pyx_L1_error)
}
if (unlikely((__Pyx_DelItemInt(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 460, __pyx_L1_error)
+0461: continue
goto __pyx_L3_continue;
0462: else:
+0463: if context is _OIDC_UNSET:
/*else*/ {
__pyx_t_3 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNSET);
if (__pyx_t_3) {
/* … */
}
+0464: context = _oidc_main_context()
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 464, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_4); __pyx_t_4 = 0;
+0465: if owner is context and (
__pyx_t_6 = (__pyx_v_owner == __pyx_v_context);
if (__pyx_t_6) {
} else {
__pyx_t_3 = __pyx_t_6;
goto __pyx_L9_bool_binop_done;
}
/* … */
if (__pyx_t_3) {
/* … */
}
}
__pyx_L5:;
+0466: queued_rule
if (!__pyx_v_queued_rule) {
} else {
__pyx_t_3 = __pyx_v_queued_rule;
goto __pyx_L9_bool_binop_done;
}
+0467: or _OIDC_GREENLET_PARENT.__get__(owner, None) is not None):
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_owner, Py_None};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 467, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_6 = (__pyx_t_4 != Py_None);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_3 = __pyx_t_6;
__pyx_L9_bool_binop_done:;
+0468: return i
{
__pyx_r = __pyx_v_i;
}
goto __pyx_L0;
+0469: i += 1
__pyx_v_i = (__pyx_v_i + 1);
__pyx_L3_continue:;
}
+0470: return -1
{
__pyx_r = -1L;
}
goto __pyx_L0;
0471:
0472:
+0473: cdef int _oidc_raise_parked_main(void* unused) noexcept:
static int __pyx_f_7questdb_7_client__oidc_raise_parked_main(CYTHON_UNUSED void *__pyx_v_unused) {
Py_ssize_t __pyx_v_index;
PyObject *__pyx_v_entry = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_v_chained = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_WriteUnraisable("questdb._client._oidc_raise_parked_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_chained);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0474: """Pending-call body: raise the oldest parked exception on the main
0475: thread, and schedule the next one, if any, for the following boundary.
0476:
0477: It runs in whichever greenlet runs next, so it raises only an exception
0478: parked without greenlets or by that greenlet; the others wait for their
0479: own greenlet's native-return boundary (`_oidc_take_unscheduled_main`).
0480: """
0481: global _OIDC_MAIN_PARK_SCHEDULED
0482: cdef Py_ssize_t index
+0483: _OIDC_MAIN_PARK_SCHEDULED = False
__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
+0484: if _oidc_main_region_active(-1):
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_main_region_active(-1);
if (__pyx_t_1) {
/* … */
}
+0485: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+0486: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L8_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+0487: index = _oidc_parked_index(True)
__pyx_t_5 = __pyx_f_7questdb_7_client__oidc_parked_index(1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 487, __pyx_L4_error)
__pyx_v_index = __pyx_t_5;
+0488: if index < 0:
__pyx_t_1 = (__pyx_v_index < 0);
if (__pyx_t_1) {
/* … */
}
+0489: return 0
{
__pyx_r = 0;
}
goto __pyx_L8_try_return;
+0490: entry = _OIDC_MAIN_PARKED.pop(index)
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 490, __pyx_L4_error)
}
__pyx_t_6 = __Pyx_PyList_PopIndex(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, Py_None, __pyx_v_index, 1, Py_ssize_t, PyLong_FromSsize_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 490, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_v_entry = __pyx_t_6;
__pyx_t_6 = 0;
+0491: exc = (<tuple>entry)[0]
if (unlikely(__pyx_v_entry == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 491, __pyx_L4_error)
}
__pyx_t_6 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_entry), 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 491, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_v_exc = __pyx_t_6;
__pyx_t_6 = 0;
+0492: _oidc_schedule_parked_main()
__pyx_f_7questdb_7_client__oidc_schedule_parked_main();
0493: # Queue producers can fill the slot freed by this callback. If
0494: # registering the next exception fails, deliver the rest in this
0495: # exception's context chain rather than stranding them after the
0496: # Python call already returned.
+0497: if not _OIDC_MAIN_PARK_SCHEDULED and _oidc_parked_index(True) >= 0:
__pyx_t_7 = (!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED);
if (__pyx_t_7) {
} else {
__pyx_t_1 = __pyx_t_7;
goto __pyx_L12_bool_binop_done;
}
__pyx_t_5 = __pyx_f_7questdb_7_client__oidc_parked_index(1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 497, __pyx_L4_error)
__pyx_t_7 = (__pyx_t_5 >= 0);
__pyx_t_1 = __pyx_t_7;
__pyx_L12_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0498: _OIDC_MAIN_PARKED.insert(index, entry)
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "insert");
__PYX_ERR(1, 498, __pyx_L4_error)
}
__pyx_t_8 = PyList_Insert(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_index, __pyx_v_entry); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 498, __pyx_L4_error)
+0499: chained = _oidc_take_unscheduled_main()
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 499, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_chained = __pyx_t_6; __pyx_t_6 = 0;
+0500: if chained is None:
__pyx_t_1 = (__pyx_v_chained == Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L14;
}
+0501: _OIDC_MAIN_PARKED.remove(entry)
__pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyList_Type__remove, __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_entry); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 501, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
0502: else:
+0503: exc = chained
/*else*/ {
__Pyx_INCREF(__pyx_v_chained);
__Pyx_DECREF_SET(__pyx_v_exc, __pyx_v_chained);
}
__pyx_L14:;
+0504: except BaseException:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+0505: return 0
{
__pyx_r = 0;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+0506: PyErr_SetObject(type(exc), exc)
PyErr_SetObject(((PyObject *)Py_TYPE(__pyx_v_exc)), __pyx_v_exc);
+0507: return -1
{
__pyx_r = -1;
}
goto __pyx_L0;
0508:
0509:
+0510: cdef void _oidc_park_main(object exc) noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_main(PyObject *__pyx_v_exc) {
PyObject *__pyx_v_owner = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_WriteUnraisable("questdb._client._oidc_park_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_owner);
__Pyx_RefNannyFinishContext();
}
0511: """Queue ``exc`` for `_oidc_raise_parked_main`, for the greenlet running
0512: now. GIL held; never raises."""
+0513: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L4_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
__pyx_L8_try_end:;
}
+0514: if len(_OIDC_MAIN_PARKED) < _OIDC_MAIN_PARKED_MAX:
__pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED;
__Pyx_INCREF(__pyx_t_4);
if (unlikely(__pyx_t_4 == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
__PYX_ERR(1, 514, __pyx_L3_error)
}
__pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 514, __pyx_L3_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = (__pyx_t_5 < __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED_MAX);
if (__pyx_t_6) {
/* … */
}
+0515: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L15_try_end;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L12_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L3_error;
__pyx_L11_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_L15_try_end:;
}
+0516: owner = _oidc_main_context()
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 516, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_owner = __pyx_t_4; __pyx_t_4 = 0;
+0517: except BaseException:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0);
0518: # Parked without an owner, as without greenlets, rather than
0519: # lost.
+0520: owner = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_owner, Py_None); goto __pyx_L11_exception_handled; } goto __pyx_L12_except_error;
+0521: _OIDC_MAIN_PARKED.append((exc, owner))
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "append");
__PYX_ERR(1, 521, __pyx_L3_error)
}
__pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 521, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_INCREF(__pyx_v_exc);
__Pyx_GIVEREF(__pyx_v_exc);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_exc) != (0)) __PYX_ERR(1, 521, __pyx_L3_error);
__Pyx_INCREF(__pyx_v_owner);
__Pyx_GIVEREF(__pyx_v_owner);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_owner) != (0)) __PYX_ERR(1, 521, __pyx_L3_error);
__pyx_t_11 = __Pyx_PyList_Append(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_t_4); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 521, __pyx_L3_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0522: except BaseException:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0); goto __pyx_L4_exception_handled; } goto __pyx_L5_except_error;
0523: pass
0524:
0525:
+0526: cdef void _oidc_schedule_parked_main() noexcept:
static void __pyx_f_7questdb_7_client__oidc_schedule_parked_main(void) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("questdb._client._oidc_schedule_parked_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
}
0527: global _OIDC_MAIN_PARK_SCHEDULED, _OIDC_PENDING_CALL_FAILURES_REMAINING
+0528: if not _OIDC_MAIN_PARKED or _OIDC_MAIN_PARK_SCHEDULED:
if (__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None) __pyx_t_2 = 0;
else
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 528, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_3 = (!__pyx_t_2);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0529: return
{
}
goto __pyx_L0;
+0530: if _OIDC_PENDING_CALL_FAILURES_REMAINING > 0:
__pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING > 0);
if (__pyx_t_1) {
/* … */
}
+0531: _OIDC_PENDING_CALL_FAILURES_REMAINING -= 1
__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = (__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING - 1);
+0532: return
{
}
goto __pyx_L0;
+0533: if questdb_add_pending_call(_oidc_raise_parked_main, NULL) == 0:
__pyx_t_1 = (questdb_add_pending_call(__pyx_f_7questdb_7_client__oidc_raise_parked_main, NULL) == 0);
if (__pyx_t_1) {
/* … */
}
+0534: _OIDC_MAIN_PARK_SCHEDULED = True
__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 1;
0535: # A failed enqueue is delivered by the Python-visible native-return
0536: # boundary below, after native ownership/borrow cleanup. No bytecode or
0537: # retry thread may be started here: that could deliver an exception while
0538: # this noexcept foreign callback is still running and swallow it again.
0539:
0540:
+0541: cdef object _oidc_take_unscheduled_main():
static PyObject *__pyx_f_7questdb_7_client__oidc_take_unscheduled_main(void) {
PyObject *__pyx_v_exc = 0;
Py_ssize_t __pyx_v_index;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._oidc_take_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0542: """Take saved signals if CPython could not register their pending call.
0543:
0544: Call only at an exception-safe native-return boundary, not inside a
0545: callback or before freeing an owned native result/error. Successfully
0546: queued delivery remains asynchronous. When even re-enqueueing successive
0547: signals is impossible, preserve all of them in the exception context chain
0548: instead of leaving another one stranded in the queue.
0549: """
0550: cdef object exc
0551: cdef Py_ssize_t index
+0552: if (questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT
__pyx_t_2 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+0553: or not _OIDC_MAIN_PARKED or _oidc_main_region_active(-1)):
if (__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None) __pyx_t_2 = 0;
else
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 553, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_3 = (!__pyx_t_2);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_f_7questdb_7_client__oidc_main_region_active(-1);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
+0554: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
0555: # A gevent greenlet's own exceptions are raised here, at its native-return
0556: # boundary, even while a pending call is queued: that call can run in
0557: # another greenlet first, which must not raise them. Exceptions parked
0558: # without greenlets, or by the main greenlet, keep the rule above: a
0559: # queued pending call delivers them (see `_oidc_parked_index`).
+0560: index = _oidc_parked_index(not _OIDC_MAIN_PARK_SCHEDULED)
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_parked_index((!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 560, __pyx_L1_error)
__pyx_v_index = __pyx_t_4;
+0561: if index < 0:
__pyx_t_1 = (__pyx_v_index < 0);
if (__pyx_t_1) {
/* … */
}
+0562: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0563: exc = (<tuple>_OIDC_MAIN_PARKED.pop(index))[0]
if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 563, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_PyList_PopIndex(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, Py_None, __pyx_v_index, 1, Py_ssize_t, PyLong_FromSsize_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 563, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (unlikely(__pyx_t_5 == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 563, __pyx_L1_error)
}
__pyx_t_6 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_t_5), 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 563, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_v_exc = __pyx_t_6;
__pyx_t_6 = 0;
+0564: try:
{
/*try:*/ {
/* … */
}
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L11_except_return:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L0;
}
+0565: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(1, 565, __pyx_L8_error)
+0566: except BaseException:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_10) { __Pyx_AddTraceback("questdb._client._oidc_take_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_11) < 0) __PYX_ERR(1, 566, __pyx_L10_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_11);
+0567: if _oidc_parked_index(not _OIDC_MAIN_PARK_SCHEDULED) >= 0:
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_parked_index((!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 567, __pyx_L10_except_error)
__pyx_t_1 = (__pyx_t_4 >= 0);
if (__pyx_t_1) {
/* … */
}
0568: # Let normal exception normalization chain these, rather than
0569: # invoking a subclass's __setattr__ or creating a context cycle
0570: # when two handlers raise the same reusable exception instance.
0571: # Recursion is bounded by _OIDC_MAIN_PARKED_MAX (64).
+0572: return _oidc_take_unscheduled_main()
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 572, __pyx_L10_except_error) __Pyx_GOTREF(__pyx_t_12); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_12; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L11_except_return;
+0573: return exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_exc);
__pyx_r = __pyx_v_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L11_except_return;
}
goto __pyx_L10_except_error;
0574:
0575:
+0576: cdef void_int _oidc_raise_unscheduled_main() except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(void) {
PyObject *__pyx_v_exc = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._oidc_raise_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0577: cdef object exc = _oidc_take_unscheduled_main()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0;
+0578: if exc is not None:
__pyx_t_2 = (__pyx_v_exc != Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+0579: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(1, 579, __pyx_L1_error)
+0580: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
0581:
0582:
+0583: def _debug_oidc_fail_pending_calls(int count):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10_debug_oidc_fail_pending_calls, "Internal test hook: fail the next count pending-call registrations."); static PyMethodDef __pyx_mdef_7questdb_7_client_11_debug_oidc_fail_pending_calls = {"_debug_oidc_fail_pending_calls", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10_debug_oidc_fail_pending_calls}; static PyObject *__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_count; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_fail_pending_calls (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_count,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 583, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 583, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_fail_pending_calls", 0) < (0)) __PYX_ERR(1, 583, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_fail_pending_calls", 1, 1, 1, i); __PYX_ERR(1, 583, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 583, __pyx_L3_error) } __pyx_v_count = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 583, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_fail_pending_calls", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 583, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_fail_pending_calls", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10_debug_oidc_fail_pending_calls(__pyx_self, __pyx_v_count); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10_debug_oidc_fail_pending_calls(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_count) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_oidc_fail_pending_calls", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11_debug_oidc_fail_pending_calls, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_fail_pending_calls, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_fail_pending_calls, __pyx_t_18) < (0)) __PYX_ERR(1, 583, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0584: """Internal test hook: fail the next count pending-call registrations."""
0585: global _OIDC_PENDING_CALL_FAILURES_REMAINING
+0586: if count < 0:
__pyx_t_1 = (__pyx_v_count < 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+0587: raise ValueError('count must be non-negative')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_count_must_be_non_negative};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 587, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 587, __pyx_L1_error)
+0588: _OIDC_PENDING_CALL_FAILURES_REMAINING = count
__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = __pyx_v_count;
0589:
0590:
+0591: def _debug_oidc_pending_call_failures_remaining():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining = {"_debug_oidc_pending_call_failures_remaining", (PyCFunction)__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining, METH_NOARGS, 0};
static PyObject *__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_debug_oidc_pending_call_failures_remaining (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_12_debug_oidc_pending_call_failures_remaining(__pyx_self);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12_debug_oidc_pending_call_failures_remaining(CYTHON_UNUSED PyObject *__pyx_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._debug_oidc_pending_call_failures_remaining", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_pending_call_failure, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 591, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_pending_call_failure, __pyx_t_18) < (0)) __PYX_ERR(1, 591, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0592: return _OIDC_PENDING_CALL_FAILURES_REMAINING
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0593:
0594:
+0595: def _debug_oidc_deliver_test_exceptions(tuple exceptions, bint fail_initial):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14_debug_oidc_deliver_test_exceptions, "Exercise initial and successive enqueue failures without native races."); static PyMethodDef __pyx_mdef_7questdb_7_client_15_debug_oidc_deliver_test_exceptions = {"_debug_oidc_deliver_test_exceptions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14_debug_oidc_deliver_test_exceptions}; static PyObject *__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_exceptions = 0; int __pyx_v_fail_initial; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_deliver_test_exceptions (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exceptions,&__pyx_mstate_global->__pyx_n_u_fail_initial,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 595, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 595, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 595, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_deliver_test_exceptions", 0) < (0)) __PYX_ERR(1, 595, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_deliver_test_exceptions", 1, 2, 2, i); __PYX_ERR(1, 595, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 595, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 595, __pyx_L3_error) } __pyx_v_exceptions = ((PyObject*)values[0]); __pyx_v_fail_initial = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_fail_initial == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 595, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_deliver_test_exceptions", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 595, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_deliver_test_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_exceptions), (&PyTuple_Type), 1, "exceptions", 1))) __PYX_ERR(1, 595, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_14_debug_oidc_deliver_test_exceptions(__pyx_self, __pyx_v_exceptions, __pyx_v_fail_initial); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14_debug_oidc_deliver_test_exceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exceptions, int __pyx_v_fail_initial) { PyObject *__pyx_v_exc = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client._debug_oidc_deliver_test_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_exc); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15_debug_oidc_deliver_test_exceptions, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_deliver_test_excepti, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_deliver_test_excepti, __pyx_t_18) < (0)) __PYX_ERR(1, 595, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0596: """Exercise initial and successive enqueue failures without native races."""
0597: global _OIDC_PENDING_CALL_FAILURES_REMAINING
+0598: for exc in exceptions:
if (unlikely(__pyx_v_exceptions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(1, 598, __pyx_L1_error)
}
__pyx_t_1 = __pyx_v_exceptions; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 598, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
#else
__pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
#endif
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 598, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_3);
__pyx_t_3 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0599: if not isinstance(exc, BaseException):
__pyx_t_4 = __Pyx_PyExc_BaseException_Check(__pyx_v_exc);
__pyx_t_5 = (!__pyx_t_4);
if (unlikely(__pyx_t_5)) {
/* … */
}
+0600: raise TypeError('expected exception instances')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_expected_exception_instances};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 600, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(1, 600, __pyx_L1_error)
+0601: for exc in exceptions:
if (unlikely(__pyx_v_exceptions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(1, 601, __pyx_L1_error)
}
__pyx_t_1 = __pyx_v_exceptions; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 601, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
#else
__pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
#endif
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 601, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_3);
__pyx_t_3 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0602: _oidc_park_main(exc)
__pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+0603: if fail_initial:
if (__pyx_v_fail_initial) {
/* … */
}
+0604: _OIDC_PENDING_CALL_FAILURES_REMAINING = 1
__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 1;
+0605: _oidc_schedule_parked_main()
__pyx_f_7questdb_7_client__oidc_schedule_parked_main();
+0606: if not fail_initial:
__pyx_t_5 = (!__pyx_v_fail_initial);
if (__pyx_t_5) {
/* … */
}
0607: # No bytecode runs between successful C registration and this write.
0608: # The already-queued callback will fail to enqueue its successor.
+0609: _OIDC_PENDING_CALL_FAILURES_REMAINING = 1
__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 1;
+0610: _oidc_raise_unscheduled_main()
__pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 610, __pyx_L1_error)
0611:
0612:
+0613: def _debug_oidc_native_free_counts(bint enabled=False):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_16_debug_oidc_native_free_counts, "Count actual native release calls; enabling starts a fresh measurement."); static PyMethodDef __pyx_mdef_7questdb_7_client_17_debug_oidc_native_free_counts = {"_debug_oidc_native_free_counts", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_16_debug_oidc_native_free_counts}; static PyObject *__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_enabled; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_native_free_counts (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_enabled,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 613, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 613, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_native_free_counts", 0) < (0)) __PYX_ERR(1, 613, __pyx_L3_error) } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 613, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_enabled = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_enabled == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 613, __pyx_L3_error) } else { __pyx_v_enabled = ((int)((int)0)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_native_free_counts", 0, 0, 1, __pyx_nargs); __PYX_ERR(1, 613, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_native_free_counts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_16_debug_oidc_native_free_counts(__pyx_self, __pyx_v_enabled); /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_16_debug_oidc_native_free_counts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_enabled) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_oidc_native_free_counts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); { PyObject* __pyx_temp[1] = {__pyx_t_18}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17_debug_oidc_native_free_counts, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_native_free_counts, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_native_free_counts, __pyx_t_18) < (0)) __PYX_ERR(1, 613, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0614: """Count actual native release calls; enabling starts a fresh measurement."""
0615: global _OIDC_COUNT_NATIVE_FREES, _OIDC_TOKEN_FREES, _OIDC_ERROR_FREES
+0616: if enabled:
if (__pyx_v_enabled) {
/* … */
}
+0617: _OIDC_TOKEN_FREES = 0
__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = 0;
+0618: _OIDC_ERROR_FREES = 0
__pyx_v_7questdb_7_client__OIDC_ERROR_FREES = 0;
+0619: _OIDC_COUNT_NATIVE_FREES = enabled
__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES = __pyx_v_enabled;
+0620: return (_OIDC_TOKEN_FREES, _OIDC_ERROR_FREES)
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__OIDC_ERROR_FREES); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 620, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 620, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
0621:
0622:
+0623: cdef void _oidc_release_token(questdb_oidc_token* token) noexcept:
static void __pyx_f_7questdb_7_client__oidc_release_token(struct questdb_oidc_token *__pyx_v_token) {
int __pyx_v_counted;
/* … */
/* function exit code */
}
0624: global _OIDC_TOKEN_FREES
+0625: cdef bint counted = _OIDC_COUNT_NATIVE_FREES and token != NULL
if (__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES) {
} else {
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_token != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L3_bool_binop_done:;
__pyx_v_counted = __pyx_t_1;
+0626: questdb_oidc_token_free(token)
questdb_oidc_token_free(__pyx_v_token);
+0627: if counted:
if (__pyx_v_counted) {
/* … */
}
+0628: _OIDC_TOKEN_FREES += 1
__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = (__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES + 1);
0629:
0630:
+0631: cdef void _oidc_release_error(questdb_error* err) noexcept:
static void __pyx_f_7questdb_7_client__oidc_release_error(questdb_error *__pyx_v_err) {
int __pyx_v_counted;
/* … */
/* function exit code */
}
0632: global _OIDC_ERROR_FREES
+0633: cdef bint counted = _OIDC_COUNT_NATIVE_FREES and err != NULL
if (__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES) {
} else {
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_err != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L3_bool_binop_done:;
__pyx_v_counted = __pyx_t_1;
+0634: questdb_error_free(err)
questdb_error_free(__pyx_v_err);
+0635: if counted:
if (__pyx_v_counted) {
/* … */
}
+0636: _OIDC_ERROR_FREES += 1
__pyx_v_7questdb_7_client__OIDC_ERROR_FREES = (__pyx_v_7questdb_7_client__OIDC_ERROR_FREES + 1);
0637:
0638:
0639: # Live providers, keyed by the opaque integer handed to native as `user_data`.
0640: #
0641: # Native is given a key rather than a `PyObject*` so that the release callback
0642: # -- which can run on an abandoned acquisition worker long after the owning
0643: # handles are gone, potentially past the start of interpreter finalization --
0644: # owns no Python reference and never needs the GIL.
0645: #
0646: # The value is a weakref: the registry must not keep a provider alive, or a
0647: # `with` block's exit would never collect one.
0648: #
0649: # This is BOOKKEEPING ONLY. The native handle is owned by the provider itself
0650: # (`OidcDeviceAuth._native`), not by `_OIDC_NATIVE_HANDLES`, so evicting or
0651: # losing an entry here cannot free a handle a live provider still points at.
0652: # It used to be the sole owner, and that was a use-after-free: the cyclic
0653: # collector runs weakref callbacks BEFORE finalizers, so a provider in a cycle
0654: # had its handle freed by this callback and was then handed to a `__del__` in
0655: # the same cycle that called `close()` on the dangling pointer.
0656: #
0657: # `_OIDC_REGISTRY_LOCK` guards the id counter and every paired dict update. It
0658: # is re-entrant because a weakref callback can run synchronously inside a
0659: # collection triggered while the same thread already holds it; an ordinary lock
0660: # would deadlock there. The RLock keeps the registry invariant independent of
0661: # the GIL without changing a hot path -- it is taken only during provider
0662: # construction, collection, and the one shutdown snapshot.
0663: #
0664: # A module-level `cdef object` is a C static rather than an entry in the module
0665: # dict, so `_PyModule_Clear` never swaps it for None at interpreter shutdown:
0666: # readers need no None guard.
+0667: cdef object _OIDC_PROVIDERS = {}
__pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_PROVIDERS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_PROVIDERS, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
+0668: cdef object _OIDC_NATIVE_HANDLES = {}
__pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
+0669: cdef object _OIDC_REGISTRY_LOCK = threading.RLock()
__pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
0670: # Count callbacks by the opaque provider id given to native, as well as by
0671: # thread: a logging handler may delegate db.close() to another thread and wait
0672: # for it. A pool close must not join a provider worker that is still inside its
0673: # own warning callback, even when no Python lease is currently outstanding.
0674: # Protected by _OIDC_REGISTRY_LOCK; keys never retain a provider.
+0675: cdef dict _OIDC_DIAGNOSTICS_ACTIVE = {}
__pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, ((PyObject*)__pyx_t_18)); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
0676: # Notified whenever a provider's count drops, so a close on a thread that is
0677: # not itself inside the callback can wait for it instead of failing.
+0678: cdef object _OIDC_DIAGNOSTICS_DRAINED = threading.Condition(_OIDC_REGISTRY_LOCK)
__pyx_t_16 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
0679: # The provider ids whose diagnostic is being dispatched on the current thread.
+0680: cdef object _OIDC_DIAGNOSTIC_LOCAL = threading.local()
__pyx_t_19 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_local); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
+0681: cdef size_t _oidc_last_provider_id = 0
__pyx_v_7questdb_7_client__oidc_last_provider_id = 0;
0682:
0683: # How long a pool close waits for a persistence-warning callback of its
0684: # provider that runs on another thread. Bounded, because a callback that
0685: # delegated this very close and joins it can never return first: the wait must
0686: # give up so that callback can. Unrelated closers simply wait it out.
+0687: cdef double _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS = 2.0
__pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS = 2.0;
0688:
0689:
+0690: cdef bint _oidc_diagnostic_on_this_thread(object provider) except -1:
static int __pyx_f_7questdb_7_client__oidc_diagnostic_on_this_thread(PyObject *__pyx_v_provider) {
PyObject *__pyx_v_ids = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_diagnostic_on_this_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_ids);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0691: if provider is None:
__pyx_t_1 = (__pyx_v_provider == Py_None);
if (__pyx_t_1) {
/* … */
}
+0692: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+0693: ids = getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None)
__pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_ids = __pyx_t_3; __pyx_t_3 = 0;
+0694: return bool(ids) and (<OidcDeviceAuth>provider)._provider_id in ids
__pyx_t_2 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_ids};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 694, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_3)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 694, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_3); __pyx_t_3 = 0;
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyLong_FromSize_t(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_provider_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 694, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_ids, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 694, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
0695:
0696:
+0697: cdef bint _oidc_wait_diagnostics_drained(
static int __pyx_f_7questdb_7_client__oidc_wait_diagnostics_drained(PyObject *__pyx_v_provider, double __pyx_v_timeout) {
size_t __pyx_v_provider_id;
PyObject *__pyx_v_deadline = NULL;
PyObject *__pyx_v_remaining = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._oidc_wait_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_deadline);
__Pyx_XDECREF(__pyx_v_remaining);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0698: object provider, double timeout) except -1:
0699: """Wait until no persistence-warning callback for ``provider`` runs.
0700:
0701: Returns False if one is still running after ``timeout`` seconds. Never
0702: call it while holding a lock that callback might need.
0703: """
+0704: if provider is None:
__pyx_t_1 = (__pyx_v_provider == Py_None);
if (__pyx_t_1) {
/* … */
}
+0705: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+0706: provider_id = (<OidcDeviceAuth>provider)._provider_id
__pyx_t_2 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_provider_id; __pyx_v_provider_id = __pyx_t_2;
+0707: deadline = time.monotonic() + timeout
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_2 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_6 = PyFloat_FromDouble(__pyx_v_timeout); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_deadline = __pyx_t_4; __pyx_t_4 = 0;
0708: # The RLock's own `with`, whose `__enter__` and `__exit__` are C. The
0709: # Condition's are Python, and a pending Ctrl-C raised in them left this
0710: # process-wide lock held (see `QuestDB.close()`). `wait()` shares the lock.
+0711: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_6 = NULL;
__pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 711, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_2 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 711, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._oidc_wait_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(1, 711, __pyx_L10_except_error)
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
__pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 711, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 711, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(1, 711, __pyx_L10_except_error)
__pyx_t_12 = (!__pyx_t_1);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_3, __pyx_t_4);
__pyx_t_5 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0;
__PYX_ERR(1, 711, __pyx_L10_except_error)
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_exception_handled;
}
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L12_try_return:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L5_return;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_L13_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_7) {
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
}
goto __pyx_L7;
}
__pyx_L5_return: {
__pyx_t_12 = __pyx_r;
if (__pyx_t_7) {
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
}
__pyx_r = __pyx_t_12;
goto __pyx_L0;
}
__pyx_L7:;
}
goto __pyx_L20;
__pyx_L4_error:;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L1_error;
__pyx_L20:;
}
/* … */
{
PyObject* __pyx_temp[3] = {Py_None, Py_None, Py_None};
__pyx_mstate_global->__pyx_tuple[6] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(1, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);
+0712: while _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0) != 0:
while (1) {
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 712, __pyx_L8_error)
}
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 712, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_4, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 712, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 712, __pyx_L8_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (!__pyx_t_1) break;
+0713: remaining = deadline - time.monotonic()
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 713, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 713, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_2 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_2 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 713, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_5 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 713, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_5);
__pyx_t_5 = 0;
+0714: if remaining <= 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 714, __pyx_L8_error) if (__pyx_t_1) { /* … */ }
+0715: return False
{
__pyx_r = 0;
}
goto __pyx_L12_try_return;
+0716: _OIDC_DIAGNOSTICS_DRAINED.wait(remaining)
__pyx_t_3 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_remaining};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 716, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
+0717: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
0718:
0719:
0720: # Set before the atexit hook snapshots the registry. A provider whose native
0721: # build completes after that snapshot observes the flag under the same lock and
0722: # detaches its callbacks before construction returns, closing the new-provider
0723: # race while the hook releases the GIL to drain an older callback.
+0724: cdef bint _oidc_callbacks_shutting_down = False
__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 0;
0725:
0726:
+0727: def _debug_oidc_registry_size():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_18_debug_oidc_registry_size, "Internal test hook: live entries in the provider registry.\n\n Native owns no Python reference. A provider weakref callback removes both\n registry entries; either one left behind would retain bookkeeping or the\n native auth handle for the life of the process.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_19_debug_oidc_registry_size = {"_debug_oidc_registry_size", (PyCFunction)__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size, METH_NOARGS, __pyx_doc_7questdb_7_client_18_debug_oidc_registry_size}; static PyObject *__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_registry_size (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_18_debug_oidc_registry_size(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_18_debug_oidc_registry_size(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client._debug_oidc_registry_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_19_debug_oidc_registry_size, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_size, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_size, __pyx_t_18) < (0)) __PYX_ERR(1, 727, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0728: """Internal test hook: live entries in the provider registry.
0729:
0730: Native owns no Python reference. A provider weakref callback removes both
0731: registry entries; either one left behind would retain bookkeeping or the
0732: native auth handle for the life of the process.
0733: """
+0734: if len(_OIDC_PROVIDERS) != len(_OIDC_NATIVE_HANDLES):
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 734, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 734, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_2 != __pyx_t_3); if (unlikely(__pyx_t_4)) { /* … */ }
+0735: raise AssertionError('OIDC provider/native registries are out of sync')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_OIDC_provider_native_registries};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 735, __pyx_L1_error)
+0736: return len(_OIDC_PROVIDERS)
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 736, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0737:
0738:
+0739: def _debug_oidc_registry_snapshot():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_20_debug_oidc_registry_snapshot, "Internal test hook: paired registry ids observed under their lock."); static PyMethodDef __pyx_mdef_7questdb_7_client_21_debug_oidc_registry_snapshot = {"_debug_oidc_registry_snapshot", (PyCFunction)__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot, METH_NOARGS, __pyx_doc_7questdb_7_client_20_debug_oidc_registry_snapshot}; static PyObject *__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_registry_snapshot (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_20_debug_oidc_registry_snapshot(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_20_debug_oidc_registry_snapshot(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("questdb._client._debug_oidc_registry_snapshot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_21_debug_oidc_registry_snapshot, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_snapshot, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_snapshot, __pyx_t_18) < (0)) __PYX_ERR(1, 739, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0740: """Internal test hook: paired registry ids observed under their lock."""
+0741: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 741, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 741, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._debug_oidc_registry_snapshot", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(1, 741, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_2);
{
PyObject* __pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_2};
__pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 741, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 741, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (__pyx_t_11 < (0)) __PYX_ERR(1, 741, __pyx_L9_except_error)
__pyx_t_12 = (!__pyx_t_11);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_4, __pyx_t_2);
__pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_2 = 0;
__PYX_ERR(1, 741, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 741, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+0742: return (frozenset(_OIDC_PROVIDERS),
__pyx_t_2 = __Pyx_PyFrozenSet_New(__pyx_v_7questdb_7_client__OIDC_PROVIDERS); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 742, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 742, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 742, __pyx_L7_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(1, 742, __pyx_L7_error); __pyx_t_2 = 0; __pyx_t_4 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L11_try_return;
+0743: frozenset(_OIDC_NATIVE_HANDLES))
__pyx_t_4 = __Pyx_PyFrozenSet_New(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 743, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_4);
0744:
0745:
+0746: def _debug_oidc_registry_lock():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_22_debug_oidc_registry_lock, "Internal test hook: the lock guarding the provider registry and the\n persistence-diagnostic counts."); static PyMethodDef __pyx_mdef_7questdb_7_client_23_debug_oidc_registry_lock = {"_debug_oidc_registry_lock", (PyCFunction)__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock, METH_NOARGS, __pyx_doc_7questdb_7_client_22_debug_oidc_registry_lock}; static PyObject *__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_registry_lock (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_22_debug_oidc_registry_lock(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_22_debug_oidc_registry_lock(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_23_debug_oidc_registry_lock, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_lock, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_lock, __pyx_t_18) < (0)) __PYX_ERR(1, 746, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0747: """Internal test hook: the lock guarding the provider registry and the
0748: persistence-diagnostic counts."""
+0749: return _OIDC_REGISTRY_LOCK
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
__pyx_r = __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
0750:
0751:
+0752: def _debug_oidc_last_provider_id():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_24_debug_oidc_last_provider_id, "Internal test hook: the most recently allocated provider id.\n\n Ids are monotonic and never reused, so every provider built after a reading\n has a larger id. That lets a test track exactly the providers it created,\n regardless of what earlier tests left for the collector to finalize.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_25_debug_oidc_last_provider_id = {"_debug_oidc_last_provider_id", (PyCFunction)__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id, METH_NOARGS, __pyx_doc_7questdb_7_client_24_debug_oidc_last_provider_id}; static PyObject *__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_last_provider_id (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_24_debug_oidc_last_provider_id(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_24_debug_oidc_last_provider_id(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("questdb._client._debug_oidc_last_provider_id", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_25_debug_oidc_last_provider_id, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_last_provider_id, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_last_provider_id, __pyx_t_18) < (0)) __PYX_ERR(1, 752, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0753: """Internal test hook: the most recently allocated provider id.
0754:
0755: Ids are monotonic and never reused, so every provider built after a reading
0756: has a larger id. That lets a test track exactly the providers it created,
0757: regardless of what earlier tests left for the collector to finalize.
0758: """
+0759: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 759, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 759, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._debug_oidc_last_provider_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(1, 759, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 759, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 759, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (__pyx_t_11 < (0)) __PYX_ERR(1, 759, __pyx_L9_except_error)
__pyx_t_12 = (!__pyx_t_11);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(1, 759, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+0760: return _oidc_last_provider_id
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_7questdb_7_client__oidc_last_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 760, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L11_try_return;
0761:
0762:
+0763: def _debug_oidc_callbacks_shutting_down():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_26_debug_oidc_callbacks_shutting_down, "Internal test hook: has the callback-detach atexit phase started?"); static PyMethodDef __pyx_mdef_7questdb_7_client_27_debug_oidc_callbacks_shutting_down = {"_debug_oidc_callbacks_shutting_down", (PyCFunction)__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down, METH_NOARGS, __pyx_doc_7questdb_7_client_26_debug_oidc_callbacks_shutting_down}; static PyObject *__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_callbacks_shutting_down (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_26_debug_oidc_callbacks_shutting_down(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_26_debug_oidc_callbacks_shutting_down(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("questdb._client._debug_oidc_callbacks_shutting_down", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_27_debug_oidc_callbacks_shutting_down, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_callbacks_shutting_d, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_callbacks_shutting_d, __pyx_t_18) < (0)) __PYX_ERR(1, 763, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0764: """Internal test hook: has the callback-detach atexit phase started?"""
+0765: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 765, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 765, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 765, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._debug_oidc_callbacks_shutting_down", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(1, 765, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
__pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 765, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (__pyx_t_11 < (0)) __PYX_ERR(1, 765, __pyx_L9_except_error)
__pyx_t_12 = (!__pyx_t_11);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0;
__PYX_ERR(1, 765, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 765, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 765, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+0766: return bool(_oidc_callbacks_shutting_down)
__pyx_t_4 = NULL;
__pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 766, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 766, __pyx_L7_error)
__Pyx_GOTREF((PyObject *)__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_2);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L11_try_return;
0767:
0768:
+0769: def _debug_oidc_reset_callback_shutdown():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_28_debug_oidc_reset_callback_shutdown, "Internal test hook: undo a manually invoked atexit phase."); static PyMethodDef __pyx_mdef_7questdb_7_client_29_debug_oidc_reset_callback_shutdown = {"_debug_oidc_reset_callback_shutdown", (PyCFunction)__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown, METH_NOARGS, __pyx_doc_7questdb_7_client_28_debug_oidc_reset_callback_shutdown}; static PyObject *__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_reset_callback_shutdown (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_28_debug_oidc_reset_callback_shutdown(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_28_debug_oidc_reset_callback_shutdown(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client._debug_oidc_reset_callback_shutdown", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_29_debug_oidc_reset_callback_shutdown, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_callback_shutd, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_callback_shutd, __pyx_t_18) < (0)) __PYX_ERR(1, 769, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0770: """Internal test hook: undo a manually invoked atexit phase."""
0771: global _oidc_callbacks_shutting_down
+0772: if not qdb_oidc_callback_reopen_for_test():
__pyx_t_1 = (!qdb_oidc_callback_reopen_for_test());
if (unlikely(__pyx_t_1)) {
/* … */
}
+0773: raise RuntimeError('OIDC callbacks are still active')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_OIDC_callbacks_are_still_active};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 773, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 773, __pyx_L1_error)
+0774: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 774, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = NULL;
__pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 774, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 774, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_5) {
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 774, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
goto __pyx_L7;
}
__pyx_L7:;
}
goto __pyx_L14;
__pyx_L4_error:;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L1_error;
__pyx_L14:;
}
+0775: _oidc_callbacks_shutting_down = False
__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 0;
0776:
0777:
+0778: def _debug_oidc_pause_callback_before_gil():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_30_debug_oidc_pause_callback_before_gil, "Park the next admitted callback at a native-only pre-GIL barrier."); static PyMethodDef __pyx_mdef_7questdb_7_client_31_debug_oidc_pause_callback_before_gil = {"_debug_oidc_pause_callback_before_gil", (PyCFunction)__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil, METH_NOARGS, __pyx_doc_7questdb_7_client_30_debug_oidc_pause_callback_before_gil}; static PyObject *__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_pause_callback_before_gil (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_30_debug_oidc_pause_callback_before_gil(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_30_debug_oidc_pause_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_oidc_pause_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_31_debug_oidc_pause_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_pause_callback_befor, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_pause_callback_befor, __pyx_t_18) < (0)) __PYX_ERR(1, 778, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0779: """Park the next admitted callback at a native-only pre-GIL barrier."""
+0780: if not qdb_oidc_callback_pause_next_for_test():
__pyx_t_1 = (!qdb_oidc_callback_pause_next_for_test());
if (unlikely(__pyx_t_1)) {
/* … */
}
+0781: raise MemoryError('Could not allocate the callback test barrier')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_the_callback};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 781, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 781, __pyx_L1_error)
0782:
0783:
+0784: def _debug_oidc_wait_callback_before_gil(double timeout=5):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_33_debug_oidc_wait_callback_before_gil = {"_debug_oidc_wait_callback_before_gil", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
double __pyx_v_timeout;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_debug_oidc_wait_callback_before_gil (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 784, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 784, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_wait_callback_before_gil", 0) < (0)) __PYX_ERR(1, 784, __pyx_L3_error)
} else {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 784, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
}
if (values[0]) {
__pyx_v_timeout = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_timeout == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 784, __pyx_L3_error)
} else {
__pyx_v_timeout = ((double)((double)5.0));
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_debug_oidc_wait_callback_before_gil", 0, 0, 1, __pyx_nargs); __PYX_ERR(1, 784, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._debug_oidc_wait_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_32_debug_oidc_wait_callback_before_gil(__pyx_self, __pyx_v_timeout);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_32_debug_oidc_wait_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_timeout) {
int __pyx_v_paused;
double __pyx_v_deadline;
double __pyx_v_remaining;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._debug_oidc_wait_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = PyFloat_FromDouble(((double)5.0)); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 784, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
{
PyObject* __pyx_temp[1] = {__pyx_t_18};
__pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 784, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_33_debug_oidc_wait_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_wait_callback_before, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 784, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_t_17);
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_wait_callback_before, __pyx_t_18) < (0)) __PYX_ERR(1, 784, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0785: if not 0 <= timeout <= 30:
__pyx_t_1 = (0.0 <= __pyx_v_timeout);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_timeout <= 30.0);
}
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+0786: raise ValueError('timeout must be between 0 and 30 seconds')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_timeout_must_be_between_0_and_30};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 786, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(1, 786, __pyx_L1_error)
0787: cdef bint paused
+0788: cdef double deadline = time.monotonic() + timeout
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_7 = PyFloat_FromDouble(__pyx_v_timeout); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 788, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_deadline = __pyx_t_8;
0789: cdef double remaining
+0790: while True:
while (1) {
+0791: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L10;
}
__pyx_L10:;
}
}
+0792: paused = qdb_oidc_callback_try_paused_for_test()
__pyx_v_paused = qdb_oidc_callback_try_paused_for_test();
}
+0793: if paused:
if (__pyx_v_paused) {
/* … */
}
+0794: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0795: remaining = deadline - time.monotonic()
__pyx_t_4 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_9 = __Pyx_PyNumber_Subtract_float_object(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 795, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_remaining = __pyx_t_8;
+0796: if remaining <= 0:
__pyx_t_2 = (__pyx_v_remaining <= 0.0);
if (__pyx_t_2) {
/* … */
}
+0797: return False
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_False);
__pyx_r = Py_False;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0798: time.sleep(min(remaining, 0.001))
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 798, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sleep); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 798, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_8 = 0.001;
__pyx_t_10 = __pyx_v_remaining;
__pyx_t_2 = (__pyx_t_8 < __pyx_t_10);
if (__pyx_t_2) {
__pyx_t_11 = __pyx_t_8;
} else {
__pyx_t_11 = __pyx_t_10;
}
__pyx_t_4 = PyFloat_FromDouble(__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 798, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 798, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
0799:
0800:
+0801: def _debug_oidc_resume_callback_before_gil():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_35_debug_oidc_resume_callback_before_gil = {"_debug_oidc_resume_callback_before_gil", (PyCFunction)__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil, METH_NOARGS, 0};
static PyObject *__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_debug_oidc_resume_callback_before_gil (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_34_debug_oidc_resume_callback_before_gil(__pyx_self);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_34_debug_oidc_resume_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_35_debug_oidc_resume_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_resume_callback_befo, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 801, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_resume_callback_befo, __pyx_t_18) < (0)) __PYX_ERR(1, 801, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0802: qdb_oidc_callback_resume_for_test()
qdb_oidc_callback_resume_for_test();
0803:
0804:
+0805: def _debug_oidc_reset_errors_module():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_36_debug_oidc_reset_errors_module, "Internal test hook: drop the cached ``questdb.auth._errors`` module."); static PyMethodDef __pyx_mdef_7questdb_7_client_37_debug_oidc_reset_errors_module = {"_debug_oidc_reset_errors_module", (PyCFunction)__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module, METH_NOARGS, __pyx_doc_7questdb_7_client_36_debug_oidc_reset_errors_module}; static PyObject *__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_reset_errors_module (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_36_debug_oidc_reset_errors_module(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_36_debug_oidc_reset_errors_module(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_37_debug_oidc_reset_errors_module, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_errors_module, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_errors_module, __pyx_t_18) < (0)) __PYX_ERR(1, 805, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0806: """Internal test hook: drop the cached ``questdb.auth._errors`` module."""
0807: global _OIDC_ERRORS_MOD
+0808: _OIDC_ERRORS_MOD = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, Py_None); __Pyx_GIVEREF(Py_None);
0809:
0810:
+0811: def _debug_oidc_errors_module_ready():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_38_debug_oidc_errors_module_ready, "Internal test hook: does the non-importing resolver find a usable module?"); static PyMethodDef __pyx_mdef_7questdb_7_client_39_debug_oidc_errors_module_ready = {"_debug_oidc_errors_module_ready", (PyCFunction)__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready, METH_NOARGS, __pyx_doc_7questdb_7_client_38_debug_oidc_errors_module_ready}; static PyObject *__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_errors_module_ready (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_38_debug_oidc_errors_module_ready(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_38_debug_oidc_errors_module_ready(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_oidc_errors_module_ready", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_39_debug_oidc_errors_module_ready, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_ready, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_ready, __pyx_t_18) < (0)) __PYX_ERR(1, 811, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0812: """Internal test hook: does the non-importing resolver find a usable module?"""
+0813: return _oidc_errors_module_if_ready() is not None
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0814:
0815:
+0816: def _debug_oidc_errors_module_resolved():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_40_debug_oidc_errors_module_resolved, "Internal test hook: does the importing resolver find a usable module?"); static PyMethodDef __pyx_mdef_7questdb_7_client_41_debug_oidc_errors_module_resolved = {"_debug_oidc_errors_module_resolved", (PyCFunction)__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved, METH_NOARGS, __pyx_doc_7questdb_7_client_40_debug_oidc_errors_module_resolved}; static PyObject *__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_errors_module_resolved (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_40_debug_oidc_errors_module_resolved(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_40_debug_oidc_errors_module_resolved(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_oidc_errors_module_resolved", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_41_debug_oidc_errors_module_resolved, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_resolv, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_resolv, __pyx_t_18) < (0)) __PYX_ERR(1, 816, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0817: """Internal test hook: does the importing resolver find a usable module?"""
+0818: return _oidc_errors_module() is not None
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0819:
0820:
+0821: def _oidc_provider_collected(size_t provider_id, object provider_ref):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_43_oidc_provider_collected(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_42_oidc_provider_collected, "Drop the registry bookkeeping for a collected provider.\n\n Ids come from a monotonic counter and are never reused, so both entries\n belong to this provider alone and are dropped unconditionally. The previous\n identity guard returned early when the `_OIDC_PROVIDERS` entry was already\n gone, without touching `_OIDC_NATIVE_HANDLES` -- so anything that removed\n one and not the other left the two permanently out of sync, retaining the\n stale entry for the life of the process.\n\n Frees nothing: the provider owns its native handle (`OidcDeviceAuth.\n _native`), so neither this callback nor a caller invoking it with a forged\n id can release a handle that is still in use.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_43_oidc_provider_collected = {"_oidc_provider_collected", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_43_oidc_provider_collected, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_42_oidc_provider_collected}; static PyObject *__pyx_pw_7questdb_7_client_43_oidc_provider_collected(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { size_t __pyx_v_provider_id; CYTHON_UNUSED PyObject *__pyx_v_provider_ref = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_oidc_provider_collected (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_provider_id,&__pyx_mstate_global->__pyx_n_u_provider_ref,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 821, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 821, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 821, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_oidc_provider_collected", 0) < (0)) __PYX_ERR(1, 821, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_oidc_provider_collected", 1, 2, 2, i); __PYX_ERR(1, 821, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 821, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 821, __pyx_L3_error) } __pyx_v_provider_id = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_provider_id == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 821, __pyx_L3_error) __pyx_v_provider_ref = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_oidc_provider_collected", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 821, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_42_oidc_provider_collected(__pyx_self, __pyx_v_provider_id, __pyx_v_provider_ref); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_42_oidc_provider_collected(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_provider_id, CYTHON_UNUSED PyObject *__pyx_v_provider_ref) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_43_oidc_provider_collected, 0, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected, __pyx_t_18) < (0)) __PYX_ERR(1, 821, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0822: """Drop the registry bookkeeping for a collected provider.
0823:
0824: Ids come from a monotonic counter and are never reused, so both entries
0825: belong to this provider alone and are dropped unconditionally. The previous
0826: identity guard returned early when the `_OIDC_PROVIDERS` entry was already
0827: gone, without touching `_OIDC_NATIVE_HANDLES` -- so anything that removed
0828: one and not the other left the two permanently out of sync, retaining the
0829: stale entry for the life of the process.
0830:
0831: Frees nothing: the provider owns its native handle (`OidcDeviceAuth.
0832: _native`), so neither this callback nor a caller invoking it with a forged
0833: id can release a handle that is still in use.
0834: """
+0835: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 835, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 835, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(1, 835, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 835, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 835, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (__pyx_t_11 < (0)) __PYX_ERR(1, 835, __pyx_L9_except_error)
__pyx_t_12 = (!__pyx_t_11);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(1, 835, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 835, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+0836: _OIDC_PROVIDERS.pop(provider_id, None)
__pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 836, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, Py_None};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 836, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0837: _OIDC_NATIVE_HANDLES.pop(provider_id, None)
__pyx_t_3 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 837, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, Py_None};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 837, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
0838:
0839:
+0840: cdef void _oidc_detach_handle_callbacks(
static void __pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_handle, int __pyx_v_wait_for_events) {
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_WriteUnraisable("questdb._client._oidc_detach_handle_callbacks", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
0841: _OidcNativeHandle handle, bint wait_for_events) noexcept:
0842: """Stop one native auth handle delivering managed-runtime callbacks.
0843:
0844: Both native detaches are idempotent and NULL-tolerant. The process-wide
0845: callback gate handles interpreter-exit admission and draining, including
0846: callbacks from providers no longer present in the registry. Native nowait
0847: detach remains necessary for finalizers that may own a logging lock.
0848: """
+0849: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+0850: if handle is None or handle.raw == NULL or handle.pid != os.getpid():
__pyx_t_2 = (((PyObject *)__pyx_v_handle) == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_handle->raw == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_handle->pid); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_3, __pyx_t_4, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 850, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0851: return
{
}
goto __pyx_L0;
+0852: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+0853: if wait_for_events:
if (__pyx_v_wait_for_events) {
/* … */
goto __pyx_L7;
}
+0854: questdb_oidc_auth_detach_events(handle.raw)
questdb_oidc_auth_detach_events(__pyx_v_handle->raw);
+0855: questdb_oidc_auth_detach_diagnostics(handle.raw)
questdb_oidc_auth_detach_diagnostics(__pyx_v_handle->raw);
0856: else:
+0857: questdb_oidc_auth_detach_events_nowait(handle.raw)
/*else*/ {
questdb_oidc_auth_detach_events_nowait(__pyx_v_handle->raw);
+0858: questdb_oidc_auth_detach_diagnostics_nowait(handle.raw)
questdb_oidc_auth_detach_diagnostics_nowait(__pyx_v_handle->raw); } __pyx_L7:;
+0859: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
0860:
0861:
+0862: def _oidc_detach_diagnostics_at_exit():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_44_oidc_detach_diagnostics_at_exit, "Suppress new Python callbacks and drain admitted ones before finalization.\n\n Native nowait detach alone cannot drain a callback already admitted but\n paused before GIL acquisition. The C-level gate counts that entire interval\n and every callback body, even for a provider removed from the registry.\n Close admission first, detach without holding Python locks, then wait with\n the GIL released while the interpreter is still alive. Callback code must\n return: abandoning its Python frames can force an unwind through Rust on\n CPython <=3.13/glibc. A daemon sign-in does not exempt its active renderer.\n The one exception is a greenlet suspended inside a callback on this, the\n main, thread -- a token provider waiting on gevent I/O, say. It cannot\n resume until this hook returns, so waiting for it hung the exit for good;\n the drain skips it, and its thread is the one finishing the interpreter.\n\n Providers stay open so transports can finish their bounded close-flush drain\n during subsequent module teardown. We do not wait for an IdP request that\n has not entered a Python callback; its later callback is refused by the gate.\n The one exception is a token-provider callback the main thread makes from\n inside its own native call while the interpreter is not yet finalizing --\n an ILP/HTTP flush from a later atexit callback or from `logging.shutdown()`\n -- which still runs (see `_tp_main_thread_before_finalization`).\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_45_oidc_detach_diagnostics_at_exit = {"_oidc_detach_diagnostics_at_exit", (PyCFunction)__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit, METH_NOARGS, __pyx_doc_7questdb_7_client_44_oidc_detach_diagnostics_at_exit}; static PyObject *__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_oidc_detach_diagnostics_at_exit (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_44_oidc_detach_diagnostics_at_exit(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_44_oidc_detach_diagnostics_at_exit(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_v_handles = NULL; PyObject *__pyx_v_handle = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client._oidc_detach_diagnostics_at_exit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_handles); __Pyx_XDECREF(__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_45_oidc_detach_diagnostics_at_exit, 0, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit, __pyx_t_18) < (0)) __PYX_ERR(1, 862, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0863: """Suppress new Python callbacks and drain admitted ones before finalization.
0864:
0865: Native nowait detach alone cannot drain a callback already admitted but
0866: paused before GIL acquisition. The C-level gate counts that entire interval
0867: and every callback body, even for a provider removed from the registry.
0868: Close admission first, detach without holding Python locks, then wait with
0869: the GIL released while the interpreter is still alive. Callback code must
0870: return: abandoning its Python frames can force an unwind through Rust on
0871: CPython <=3.13/glibc. A daemon sign-in does not exempt its active renderer.
0872: The one exception is a greenlet suspended inside a callback on this, the
0873: main, thread -- a token provider waiting on gevent I/O, say. It cannot
0874: resume until this hook returns, so waiting for it hung the exit for good;
0875: the drain skips it, and its thread is the one finishing the interpreter.
0876:
0877: Providers stay open so transports can finish their bounded close-flush drain
0878: during subsequent module teardown. We do not wait for an IdP request that
0879: has not entered a Python callback; its later callback is refused by the gate.
0880: The one exception is a token-provider callback the main thread makes from
0881: inside its own native call while the interpreter is not yet finalizing --
0882: an ILP/HTTP flush from a later atexit callback or from `logging.shutdown()`
0883: -- which still runs (see `_tp_main_thread_before_finalization`).
0884: """
0885: global _oidc_callbacks_shutting_down
+0886: if _oidc_callback_on_this_thread():
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 886, __pyx_L1_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+0887: raise RuntimeError('Cannot drain OIDC callbacks from inside a callback')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Cannot_drain_OIDC_callbacks_from};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 887, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 887, __pyx_L1_error)
+0888: qdb_oidc_callback_stop()
qdb_oidc_callback_stop();
+0889: try:
/*try:*/ {
+0890: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 890, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = NULL;
__pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 890, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 890, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L16_try_end;
__pyx_L11_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client._oidc_detach_diagnostics_at_exit", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 890, __pyx_L13_except_error)
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_3};
__pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 890, __pyx_L13_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 890, __pyx_L13_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(1, 890, __pyx_L13_except_error)
__pyx_t_12 = (!__pyx_t_1);
if (unlikely(__pyx_t_12)) {
__Pyx_GIVEREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_2, __pyx_t_3);
__pyx_t_6 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0;
__PYX_ERR(1, 890, __pyx_L13_except_error)
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L12_exception_handled;
}
__pyx_L13_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L5_error;
__pyx_L12_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_L16_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_5) {
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 890, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
goto __pyx_L10;
}
__pyx_L10:;
}
goto __pyx_L20;
__pyx_L7_error:;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L5_error;
__pyx_L20:;
}
+0891: _oidc_callbacks_shutting_down = True
__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 1;
+0892: handles = list(_OIDC_NATIVE_HANDLES.values())
__pyx_t_6 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_values, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 892, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_6 = __Pyx_PySequence_ListKeepNew(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 892, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_handles = ((PyObject*)__pyx_t_6);
__pyx_t_6 = 0;
+0893: for handle in handles:
if (unlikely(!__pyx_v_handles)) { __Pyx_RaiseUnboundLocalError("handles"); __PYX_ERR(1, 893, __pyx_L5_error) }
__pyx_t_3 = __pyx_v_handles; __Pyx_INCREF(__pyx_t_3);
__pyx_t_13 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 893, __pyx_L5_error)
#endif
if (__pyx_t_13 >= __pyx_temp) break;
}
__pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_13, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_13;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 893, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_handle, __pyx_t_2);
__pyx_t_2 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
+0894: _oidc_detach_handle_callbacks(handle, False)
if (!(likely(((__pyx_v_handle) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_handle, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcNativeHandle))))) __PYX_ERR(1, 894, __pyx_L5_error) __pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_handle), 0);
0895: finally:
0896: # No registry or user logging lock is held here. Drain even if snapshot
0897: # allocation/detach was interrupted: admission is already closed.
+0898: with nogil:
/*finally:*/ {
/*normal exit:*/{
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L26;
}
__pyx_L26:;
}
}
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_5 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_7, &__pyx_t_11, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_9, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_9, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
{
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L31;
}
__pyx_L31:;
}
}
}
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_11, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_5, __pyx_t_9, __pyx_t_8);
__pyx_t_5 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
goto __pyx_L1_error;
}
__pyx_L6:;
}
+0899: qdb_oidc_callback_drain()
qdb_oidc_callback_drain();
}
/* … */
qdb_oidc_callback_drain();
}
0900:
0901:
+0902: atexit.register(_oidc_detach_diagnostics_at_exit)
__pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_atexit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_register); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_19}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0903:
0904:
+0905: cdef inline object _oidc_text(const char* buf, size_t length):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_text(char const *__pyx_v_buf, size_t __pyx_v_length) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._oidc_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0906: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (__pyx_t_1) {
/* … */
}
+0907: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+0908: return PyUnicode_FromStringAndSize(buf, <Py_ssize_t>length)
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_length)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
0909:
0910:
+0911: cdef inline size_t _oidc_error_view_v1_size() noexcept nogil:
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__oidc_error_view_v1_size(void) {
struct questdb_oidc_error_view __pyx_v_layout;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0912: # Mirrors native's `QUESTDB_OIDC_ERROR_VIEW_V1_SIZE`: the prefix through
0913: # `retry_after_seconds`. `acquisition_busy` was appended after v1, and
0914: # `questdb_error_oidc_get_view` accepts -- and reports -- any capacity from
0915: # this size up. Computed from the declared layout rather than hardcoded, so
0916: # it tracks the header on every ABI the extension is compiled for.
0917: cdef questdb_oidc_error_view layout
0918: return (<size_t>(<char*>&layout.retry_after_seconds - <char*>&layout)
+0919: + sizeof(uint64_t))
{
__pyx_r = (((size_t)(((char *)(&__pyx_v_layout.retry_after_seconds)) - ((char *)(&__pyx_v_layout)))) + (sizeof(uint64_t)));
}
goto __pyx_L0;
0920:
0921:
+0922: cdef inline bint _oidc_error_view_has_v1(size_t struct_size) noexcept nogil:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_error_view_has_v1(size_t __pyx_v_struct_size) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0923: # kind, idp_error, idp_error_description, status and retry_after.
+0924: return struct_size >= _oidc_error_view_v1_size()
{
__pyx_r = (__pyx_v_struct_size >= __pyx_f_7questdb_7_client__oidc_error_view_v1_size());
}
goto __pyx_L0;
0925:
0926:
+0927: cdef inline size_t _oidc_error_view_size() noexcept nogil:
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__oidc_error_view_size(void) {
struct questdb_oidc_error_view __pyx_v_layout;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0928: # Mirrors native's `QUESTDB_OIDC_ERROR_VIEW_SIZE`: the prefix through
0929: # `acquisition_busy`, which is what a current library writes back. Not
0930: # `sizeof`: the trailing `bool` leaves padding a later field can occupy
0931: # without changing `sizeof`, so native reports the end of the field.
0932: cdef questdb_oidc_error_view layout
0933: return (<size_t>(<char*>&layout.acquisition_busy - <char*>&layout)
+0934: + sizeof(cbool))
{
__pyx_r = (((size_t)(((char *)(&__pyx_v_layout.acquisition_busy)) - ((char *)(&__pyx_v_layout)))) + (sizeof(bool)));
}
goto __pyx_L0;
0935:
0936:
+0937: cdef inline bint _oidc_error_view_has_acquisition_busy(
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(size_t __pyx_v_struct_size) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0938: size_t struct_size) noexcept nogil:
0939: # The appended tail. Gated separately: a library that predates it still
0940: # reports a complete, classifiable v1 prefix, and collapsing that to a bare
0941: # OidcError would drop the kind the foreground fail-fast gate and every
0942: # `except OidcInteractionRequired` / `except OidcTimeoutError` key on.
+0943: return struct_size >= _oidc_error_view_size()
{
__pyx_r = (__pyx_v_struct_size >= __pyx_f_7questdb_7_client__oidc_error_view_size());
}
goto __pyx_L0;
0944:
0945:
+0946: cdef inline bint _oidc_config_view_is_full(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_config_view_is_full(size_t __pyx_v_struct_size) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0947: # Native's config-view v1 ends at `issuer_len`, which is also the last
0948: # declared field, so v1 and the full struct coincide today.
+0949: return struct_size >= sizeof(questdb_oidc_config_view)
{
__pyx_r = (__pyx_v_struct_size >= (sizeof(struct questdb_oidc_config_view)));
}
goto __pyx_L0;
0950:
0951:
+0952: def _debug_oidc_view_prefix_support(size_t error_size, size_t config_size):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_46_debug_oidc_view_prefix_support, "Internal test hook for config/error view write-back gates.\n\n Returns ``(error_has_v1, error_has_acquisition_busy, config_is_full)``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_47_debug_oidc_view_prefix_support = {"_debug_oidc_view_prefix_support", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_46_debug_oidc_view_prefix_support}; static PyObject *__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { size_t __pyx_v_error_size; size_t __pyx_v_config_size; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_view_prefix_support (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_error_size,&__pyx_mstate_global->__pyx_n_u_config_size,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 952, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 952, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 952, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_view_prefix_support", 0) < (0)) __PYX_ERR(1, 952, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_view_prefix_support", 1, 2, 2, i); __PYX_ERR(1, 952, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 952, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 952, __pyx_L3_error) } __pyx_v_error_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_error_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 952, __pyx_L3_error) __pyx_v_config_size = __Pyx_PyLong_As_size_t(values[1]); if (unlikely((__pyx_v_config_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 952, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_view_prefix_support", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 952, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_view_prefix_support", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_46_debug_oidc_view_prefix_support(__pyx_self, __pyx_v_error_size, __pyx_v_config_size); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_46_debug_oidc_view_prefix_support(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_error_size, size_t __pyx_v_config_size) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client._debug_oidc_view_prefix_support", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_47_debug_oidc_view_prefix_support, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_prefix_support, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_prefix_support, __pyx_t_18) < (0)) __PYX_ERR(1, 952, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0953: """Internal test hook for config/error view write-back gates.
0954:
0955: Returns ``(error_has_v1, error_has_acquisition_busy, config_is_full)``.
0956: """
+0957: return (_oidc_error_view_has_v1(error_size),
__pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_7questdb_7_client__oidc_error_view_has_v1(__pyx_v_error_size)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 957, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 957, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4) != (0)) __PYX_ERR(1, 957, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
+0958: _oidc_error_view_has_acquisition_busy(error_size),
__pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(__pyx_v_error_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
+0959: _oidc_config_view_is_full(config_size))
__pyx_t_3 = __pyx_f_7questdb_7_client__oidc_config_view_is_full(__pyx_v_config_size); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 959, __pyx_L1_error) __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
0960:
0961:
+0962: def _debug_oidc_view_sizes():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_48_debug_oidc_view_sizes, "Internal test hook: ``(error_v1, error_full, config_full)`` sizes."); static PyMethodDef __pyx_mdef_7questdb_7_client_49_debug_oidc_view_sizes = {"_debug_oidc_view_sizes", (PyCFunction)__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes, METH_NOARGS, __pyx_doc_7questdb_7_client_48_debug_oidc_view_sizes}; static PyObject *__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_view_sizes (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_48_debug_oidc_view_sizes(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_48_debug_oidc_view_sizes(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client._debug_oidc_view_sizes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_49_debug_oidc_view_sizes, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_sizes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_sizes, __pyx_t_18) < (0)) __PYX_ERR(1, 962, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0963: """Internal test hook: ``(error_v1, error_full, config_full)`` sizes."""
+0964: return (_oidc_error_view_v1_size(),
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__oidc_error_view_v1_size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 964, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 964, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3) != (0)) __PYX_ERR(1, 964, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+0965: _oidc_error_view_size(),
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__oidc_error_view_size()); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
+0966: sizeof(questdb_oidc_config_view))
__pyx_t_3 = __Pyx_PyLong_FromSize_t((sizeof(struct questdb_oidc_config_view))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
0967:
0968:
+0969: def _debug_oidc_error_from_view_prefix(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_50_debug_oidc_error_from_view_prefix, "Internal test hook: convert a synthetic error view of a given prefix.\n\n Drives the same classification an older shared library\047s write-back would,\n so the per-tier gates are tested through the real conversion rather than\n only through the predicates.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_51_debug_oidc_error_from_view_prefix = {"_debug_oidc_error_from_view_prefix", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_50_debug_oidc_error_from_view_prefix}; static PyObject *__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { size_t __pyx_v_struct_size; int __pyx_v_kind; int __pyx_v_acquisition_busy; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_error_from_view_prefix (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_struct_size,&__pyx_mstate_global->__pyx_n_u_kind,&__pyx_mstate_global->__pyx_n_u_acquisition_busy,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 969, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 969, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 969, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 969, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_error_from_view_prefix", 0) < (0)) __PYX_ERR(1, 969, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_error_from_view_prefix", 1, 3, 3, i); __PYX_ERR(1, 969, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 969, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 969, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 969, __pyx_L3_error) } __pyx_v_struct_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_struct_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error) __pyx_v_kind = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_kind == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error) __pyx_v_acquisition_busy = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_acquisition_busy == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_error_from_view_prefix", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 969, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_error_from_view_prefix", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_50_debug_oidc_error_from_view_prefix(__pyx_self, __pyx_v_struct_size, __pyx_v_kind, __pyx_v_acquisition_busy); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_50_debug_oidc_error_from_view_prefix(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_struct_size, int __pyx_v_kind, int __pyx_v_acquisition_busy) { struct questdb_oidc_error_view __pyx_v_view; PyObject *__pyx_v_errors = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_oidc_error_from_view_prefix", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_errors); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_51_debug_oidc_error_from_view_prefix, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_error_from_view_pref, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_error_from_view_pref, __pyx_t_18) < (0)) __PYX_ERR(1, 969, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
0970: size_t struct_size, int kind, bint acquisition_busy):
0971: """Internal test hook: convert a synthetic error view of a given prefix.
0972:
0973: Drives the same classification an older shared library's write-back would,
0974: so the per-tier gates are tested through the real conversion rather than
0975: only through the predicates.
0976: """
0977: cdef questdb_oidc_error_view view
+0978: errors = _oidc_errors_module()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_errors = __pyx_t_1; __pyx_t_1 = 0;
+0979: if errors is None:
__pyx_t_2 = (__pyx_v_errors == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+0980: raise RuntimeError('questdb.auth._errors is unavailable')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_questdb_auth__errors_is_unavaila};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 980, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 980, __pyx_L1_error)
+0981: memset(&view, 0, sizeof(questdb_oidc_error_view))
(void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_error_view))));
+0982: view.struct_size = struct_size
__pyx_v_view.struct_size = __pyx_v_struct_size;
+0983: view.kind = <questdb_oidc_error_kind>kind
__pyx_v_view.kind = ((enum questdb_oidc_error_kind)__pyx_v_kind);
+0984: view.has_status = True
__pyx_v_view.has_status = 1;
+0985: view.status = 400
__pyx_v_view.status = 0x190;
+0986: view.has_retry_after = True
__pyx_v_view.has_retry_after = 1;
+0987: view.retry_after_seconds = 7
__pyx_v_view.retry_after_seconds = 7;
+0988: view.acquisition_busy = acquisition_busy
__pyx_v_view.acquisition_busy = __pyx_v_acquisition_busy;
+0989: return _oidc_exc_from_view(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_exc_from_view(__pyx_v_errors, __pyx_mstate_global->__pyx_kp_u_synthetic_OIDC_error, (&__pyx_v_view), 0, __pyx_t_3, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
0990: errors, 'synthetic OIDC error', &view, False,
+0991: QuestDBErrorCode.AuthError, None)
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
0992:
0993:
0994: # Resolved on first use and cached. See `_oidc_errors_module`.
+0995: cdef object _OIDC_ERRORS_MOD = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, Py_None); __Pyx_GIVEREF(Py_None);
0996:
0997:
0998: # Every class `_oidc_err_to_py_unowned` and `_is_oidc_terminal_for_foreground`
0999: # resolve off the module. The readiness test must cover all of them, not just
1000: # the first: a module is published in `sys.modules` before its body runs, so a
1001: # sentinel on the first-defined class (`OidcError`, which `_errors.py` defines
1002: # ahead of the other six) accepts a module on which the rest do not exist yet
1003: # -- exactly the half-built window the test is there to reject.
1004: cdef tuple _OIDC_ERROR_NAMES = (
+1005: 'OidcError', 'OidcConfigError', 'OidcNetworkError',
__Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[61]); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES, __pyx_mstate_global->__pyx_tuple[61]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]); /* … */ { PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_mstate_global->__pyx_n_u_OidcConfigError, __pyx_mstate_global->__pyx_n_u_OidcNetworkError, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired, __pyx_mstate_global->__pyx_n_u_OidcCancelledError, __pyx_mstate_global->__pyx_n_u_OidcDeviceFlowError, __pyx_mstate_global->__pyx_n_u_OidcTimeoutError}; __pyx_mstate_global->__pyx_tuple[61] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[61])) __PYX_ERR(1, 1005, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[61]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]);
1006: 'OidcInteractionRequired', 'OidcCancelledError',
1007: 'OidcDeviceFlowError', 'OidcTimeoutError')
1008:
1009:
+1010: cdef bint _oidc_errors_module_complete(object mod):
static int __pyx_f_7questdb_7_client__oidc_errors_module_complete(PyObject *__pyx_v_mod) {
PyObject *__pyx_v_name = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_errors_module_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_name);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1011: """Does ``mod`` carry every class the error paths resolve off it?
1012:
1013: Checked as a whole rather than one sentinel, so a module caught partway
1014: through its body is treated as absent by every caller.
1015: """
+1016: for name in _OIDC_ERROR_NAMES:
if (unlikely(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(1, 1016, __pyx_L1_error)
}
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_ERROR_NAMES; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 1016, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
#else
__pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
#endif
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1016, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
__pyx_t_3 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1017: if getattr(mod, name, None) is None:
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_mod, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = (__pyx_t_3 == Py_None); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* … */ }
+1018: return False
{
__pyx_r = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
+1019: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
1020:
1021:
+1022: cdef object _oidc_errors_module_if_ready():
static PyObject *__pyx_f_7questdb_7_client__oidc_errors_module_if_ready(void) {
PyObject *__pyx_v_mod = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._oidc_errors_module_if_ready", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_mod);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1023: """``questdb.auth._errors`` if it is already imported and usable, else None.
1024:
1025: Never imports, so a caller on the ordinary (non-OIDC) error path pays one
1026: dict lookup and nothing else.
1027:
1028: A module is published in ``sys.modules`` *before* its body runs, and
1029: ``_errors.py`` imports ``._render`` and ``questdb._client`` before defining
1030: a single class. A concurrent first import -- or a re-entrant one reached
1031: from this very error path -- therefore hands back a module object with none
1032: of the ``Oidc*`` attributes on it, and reading one raises ``AttributeError``
1033: *over* the failure being reported, defeating every ``except QuestDBError``
1034: handler. That is precisely the substitution the untyped fallback exists to
1035: prevent, so a half-built module counts as absent and is deliberately not
1036: cached: a later call gets the finished one.
1037:
1038: This is also the single source of class identity for the whole extension.
1039: Resolving the classes here but testing ``isinstance`` against a separate
1040: ``sys.modules`` lookup elsewhere would let the two disagree after any
1041: ``sys.modules`` swap, silently disabling the check that used the other.
1042: """
1043: global _OIDC_ERRORS_MOD
+1044: if _OIDC_ERRORS_MOD is not None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD != Py_None);
if (__pyx_t_1) {
/* … */
}
+1045: return _OIDC_ERRORS_MOD
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
__pyx_r = __pyx_v_7questdb_7_client__OIDC_ERRORS_MOD;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1046: mod = sys.modules.get('questdb.auth._errors')
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_questdb_auth__errors}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_mod = __pyx_t_2; __pyx_t_2 = 0;
+1047: if mod is None or not _oidc_errors_module_complete(mod):
__pyx_t_7 = (__pyx_v_mod == Py_None);
if (!__pyx_t_7) {
} else {
__pyx_t_1 = __pyx_t_7;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_7 = __pyx_f_7questdb_7_client__oidc_errors_module_complete(__pyx_v_mod); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1047, __pyx_L1_error)
__pyx_t_8 = (!__pyx_t_7);
__pyx_t_1 = __pyx_t_8;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+1048: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1049: _OIDC_ERRORS_MOD = mod
__Pyx_INCREF(__pyx_v_mod); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, __pyx_v_mod); __Pyx_GIVEREF(__pyx_v_mod);
+1050: return mod
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_mod);
__pyx_r = __pyx_v_mod;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
1051:
1052:
+1053: cdef object _oidc_errors_module():
static PyObject *__pyx_f_7questdb_7_client__oidc_errors_module(void) {
PyObject *__pyx_v_mod = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_errors_module", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_mod);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1054: """The ``questdb.auth._errors`` module, or None if it cannot be reached.
1055:
1056: Deliberately not imported eagerly from ``questdb/__init__.py``: that would
1057: pull ``unicodedata`` / ``re`` / ``urllib.parse`` into every process that
1058: imports questdb, for a module only an auth failure needs. Cached after the
1059: first success so a long-running sender pays the lookup once rather than
1060: re-entering the import machinery on every failure.
1061:
1062: Returns None instead of raising. This runs while a failure is already being
1063: reported, and it can be the *first* import of the package -- a caller who
1064: took ``from questdb._client import OidcDeviceAuth`` never touches
1065: ``questdb.auth``. If that first import lands during interpreter
1066: finalization, where ``sys.meta_path`` is None and any import raises
1067: ``ImportError``, letting it propagate would replace the flush or connect
1068: error the caller actually needs with a misleading one about the import.
1069: ``_oidc_err_to_py_unowned`` falls back to a plain ``QuestDBError`` carrying
1070: the same native message and code, which is strictly better than that.
1071: """
1072: global _OIDC_ERRORS_MOD
+1073: mod = _oidc_errors_module_if_ready()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_mod = __pyx_t_1; __pyx_t_1 = 0;
+1074: if mod is not None:
__pyx_t_2 = (__pyx_v_mod != Py_None);
if (__pyx_t_2) {
/* … */
}
+1075: return mod
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_mod);
__pyx_r = __pyx_v_mod;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1076: if 'questdb.auth._errors' in sys.modules:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u_questdb_auth__errors, __pyx_t_3, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1076, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ }
1077: # Present but half-built (see `_oidc_errors_module_if_ready`). Importing
1078: # again just returns the same partial object out of `sys.modules`, so
1079: # there is nothing to gain and a re-entrant import to risk.
+1080: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1081: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L10_try_end;
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L8_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L10_try_end:;
}
+1082: import questdb.auth._errors as mod
__pyx_t_7 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, 0, 0, NULL, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1082, __pyx_L5_error) __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_auth); Py_DECREF(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1082, __pyx_L5_error) __pyx_t_7 = __pyx_t_8; __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_errors); Py_DECREF(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1082, __pyx_L5_error) __pyx_t_7 = __pyx_t_8; __pyx_t_3 = __pyx_t_7; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_mod, __pyx_t_3); __pyx_t_3 = 0;
+1083: except BaseException:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+1084: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L8_except_return;
}
goto __pyx_L7_except_error;
+1085: if not _oidc_errors_module_complete(mod):
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module_complete(__pyx_v_mod); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1085, __pyx_L1_error) __pyx_t_10 = (!__pyx_t_2); if (__pyx_t_10) { /* … */ }
+1086: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1087: _OIDC_ERRORS_MOD = mod
__Pyx_INCREF(__pyx_v_mod); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, __pyx_v_mod); __Pyx_GIVEREF(__pyx_v_mod);
+1088: return mod
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_mod);
__pyx_r = __pyx_v_mod;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
1089:
1090:
+1091: cdef object _oidc_err_to_py_unowned(questdb_error* err):
static PyObject *__pyx_f_7questdb_7_client__oidc_err_to_py_unowned(questdb_error *__pyx_v_err) {
char const *__pyx_v_msg_buf;
size_t __pyx_v_msg_len;
struct questdb_oidc_error_view __pyx_v_view;
struct line_sender_qwpws_error_view __pyx_v_qwp_ws_view;
PyObject *__pyx_v_message = 0;
PyObject *__pyx_v_sender_error = 0;
int __pyx_v_in_doubt;
PyObject *__pyx_v_code = 0;
PyObject *__pyx_v_exc = 0;
PyObject *__pyx_v_errors = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._oidc_err_to_py_unowned", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_sender_error);
__Pyx_XDECREF(__pyx_v_code);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_errors);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1092: cdef const char* msg_buf = NULL
__pyx_v_msg_buf = NULL;
+1093: cdef size_t msg_len = 0
__pyx_v_msg_len = 0;
1094: cdef questdb_oidc_error_view view
1095: cdef line_sender_qwpws_error_view qwp_ws_view
1096: cdef object message
+1097: cdef object sender_error = None
__Pyx_INCREF(Py_None);
__pyx_v_sender_error = Py_None;
+1098: cdef bint in_doubt = False
__pyx_v_in_doubt = 0;
1099: cdef object code
1100: cdef object exc
1101:
+1102: errors = _oidc_errors_module()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_errors = __pyx_t_1; __pyx_t_1 = 0;
+1103: if errors is None:
__pyx_t_2 = (__pyx_v_errors == Py_None);
if (__pyx_t_2) {
/* … */
}
1104: # The typed classes are unreachable (see `_oidc_errors_module`). Report
1105: # the native failure untyped rather than losing it: `except
1106: # QuestDBError` still catches this, only `except OidcError` does not.
+1107: if err == NULL:
__pyx_t_2 = (__pyx_v_err == NULL);
if (__pyx_t_2) {
/* … */
}
+1108: return QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+1109: QuestDBErrorCode.AuthError, 'Unknown native OIDC error.')
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+1110: msg_buf = questdb_error_msg(err, &msg_len)
__pyx_v_msg_buf = questdb_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+1111: if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
__pyx_t_2 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));
if (__pyx_t_2) {
/* … */
}
+1112: sender_error = c_sender_error_view_to_raw(qwp_ws_view)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_sender_error, __pyx_t_1); __pyx_t_1 = 0;
+1113: return QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_t_3, __pyx_t_5, __pyx_v_sender_error, __pyx_t_8};
#if CYTHON_VECTORCALL
__pyx_t_9 = __pyx_mstate_global->__pyx_tuple[7];
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1113, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_9);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_mstate_global->__pyx_tuple[7] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[7])) __PYX_ERR(1, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[7]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[7]);
+1114: c_err_code_to_py(questdb_error_get_code(err)),
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_code_to_py(questdb_error_get_code(__pyx_v_err)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+1115: _oidc_text(msg_buf, msg_len) or 'Unknown native OIDC error.',
__pyx_t_8 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_msg_buf, __pyx_v_msg_len); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1115, __pyx_L1_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = __pyx_t_8; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_bool_binop_done; } __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error); __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error; __pyx_L6_bool_binop_done:;
1116: sender_error,
+1117: in_doubt=questdb_error_in_doubt(err))
__pyx_t_8 = __Pyx_PyBool_FromLong(questdb_error_in_doubt(__pyx_v_err)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); #if CYTHON_VECTORCALL
1118:
+1119: if err == NULL:
__pyx_t_2 = (__pyx_v_err == NULL);
if (__pyx_t_2) {
/* … */
}
+1120: return errors.OidcError('Unknown native OIDC error.')
__pyx_t_6 = __pyx_v_errors;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1120, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
+1121: msg_buf = questdb_error_msg(err, &msg_len)
__pyx_v_msg_buf = questdb_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+1122: message = _oidc_text(msg_buf, msg_len) or 'Unknown native OIDC error.'
__pyx_t_6 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_msg_buf, __pyx_v_msg_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1122, __pyx_L1_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L9_bool_binop_done; } __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error); __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error; __pyx_L9_bool_binop_done:; __pyx_v_message = __pyx_t_1; __pyx_t_1 = 0;
1123: # A provider failure following an HTTP retry-loop 401 can carry delivery
1124: # uncertainty from an earlier write. Preserve it just as c_err_to_fields
1125: # does: retry/dead-letter handlers must not replay a possibly landed write.
+1126: in_doubt = questdb_error_in_doubt(err)
__pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
1127: # Carry the native classification too. The non-OIDC path does this via
1128: # c_err_to_fields; the OIDC path used to hardcode AuthError and drop it.
1129: # Native deliberately reclassifies a recoverable token-provider failure as a
1130: # retryable SocketError so failover polls it again, and QuestDB.dataframe()'s
1131: # reconnect loop gates on exactly that code -- stamping AuthError turned a
1132: # retryable reconnect into an immediate raise, so `oidc_auth=` silently lost
1133: # the retry that `token=` still had.
+1134: code = c_err_code_to_py(questdb_error_get_code(err))
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_code_to_py(questdb_error_get_code(__pyx_v_err)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1134, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_code = __pyx_t_1; __pyx_t_1 = 0;
1135: # Native reports an OIDC cause anywhere in the causal chain, so a
1136: # QWP/WebSocket rejection whose root cause was a token refresh reaches this
1137: # branch with the transport's structured payload still attached. This is
1138: # the only path that builds it, since returning here skips `c_err_to_fields`
1139: # -- without this the payload, and `.sender_error` with it, was silently
1140: # dropped for exactly the errors an `oidc_auth` transport produces.
+1141: if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
__pyx_t_2 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));
if (__pyx_t_2) {
/* … */
}
+1142: sender_error = c_sender_error_view_to_raw(qwp_ws_view)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_sender_error, __pyx_t_1); __pyx_t_1 = 0;
+1143: memset(&view, 0, sizeof(questdb_oidc_error_view))
(void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_error_view))));
+1144: view.struct_size = sizeof(questdb_oidc_error_view)
__pyx_v_view.struct_size = (sizeof(struct questdb_oidc_error_view));
+1145: if questdb_error_oidc_get_view(err, &view):
__pyx_t_2 = questdb_error_oidc_get_view(__pyx_v_err, (&__pyx_v_view));
if (__pyx_t_2) {
/* … */
}
+1146: return _oidc_exc_from_view(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_exc_from_view(__pyx_v_errors, __pyx_v_message, (&__pyx_v_view), __pyx_v_in_doubt, __pyx_v_code, __pyx_v_sender_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
1147: errors, message, &view, in_doubt, code, sender_error)
+1148: exc = errors.OidcError(
__pyx_t_6 = __pyx_v_errors; __Pyx_INCREF(__pyx_t_6); /* … */ #endif __pyx_t_7 = 0; { PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_v_message, __pyx_t_9, __pyx_v_code, __pyx_v_sender_error}; #if CYTHON_VECTORCALL __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[8]; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1148, __pyx_L1_error) __Pyx_INCREF(__pyx_t_8); #else { PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error}; __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } #endif __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0; /* … */ { PyObject* __pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error}; __pyx_mstate_global->__pyx_tuple[8] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[8])) __PYX_ERR(1, 1148, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[8]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[8]);
+1149: message, in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); #if CYTHON_VECTORCALL
+1150: exc._acquisition_busy = False
if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False) < (0)) __PYX_ERR(1, 1150, __pyx_L1_error)
+1151: return exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_exc);
__pyx_r = __pyx_v_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
1152:
1153:
+1154: cdef object _oidc_exc_from_view(
static PyObject *__pyx_f_7questdb_7_client__oidc_exc_from_view(PyObject *__pyx_v_errors, PyObject *__pyx_v_message, struct questdb_oidc_error_view const *__pyx_v_view, int __pyx_v_in_doubt, PyObject *__pyx_v_code, PyObject *__pyx_v_sender_error) {
PyObject *__pyx_v_idp_error = 0;
PyObject *__pyx_v_description = 0;
PyObject *__pyx_v_status = 0;
PyObject *__pyx_v_retry_after = 0;
int __pyx_v_acquisition_busy;
PyObject *__pyx_v_exc = 0;
PyObject *__pyx_v_OidcConfigError = NULL;
PyObject *__pyx_v_OidcCancelledError = NULL;
PyObject *__pyx_v_OidcDeviceFlowError = NULL;
PyObject *__pyx_v_OidcError = NULL;
PyObject *__pyx_v_OidcInteractionRequired = NULL;
PyObject *__pyx_v_OidcNetworkError = NULL;
PyObject *__pyx_v_OidcTimeoutError = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._oidc_exc_from_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_idp_error);
__Pyx_XDECREF(__pyx_v_description);
__Pyx_XDECREF(__pyx_v_status);
__Pyx_XDECREF(__pyx_v_retry_after);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_XDECREF(__pyx_v_OidcCancelledError);
__Pyx_XDECREF(__pyx_v_OidcDeviceFlowError);
__Pyx_XDECREF(__pyx_v_OidcError);
__Pyx_XDECREF(__pyx_v_OidcInteractionRequired);
__Pyx_XDECREF(__pyx_v_OidcNetworkError);
__Pyx_XDECREF(__pyx_v_OidcTimeoutError);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1155: object errors,
1156: object message,
1157: const questdb_oidc_error_view* view,
1158: bint in_doubt,
1159: object code,
1160: object sender_error):
1161: """Build the typed exception a populated error view describes.
1162:
1163: ``view.struct_size`` is the prefix the library wrote back, which an older
1164: shared library reports as its own (smaller) size. Each field is read only
1165: when that prefix covers it, in the same two tiers as the native contract:
1166: the v1 prefix (kind, IdP fields, status, retry-after) and the appended
1167: ``acquisition_busy`` tail. An unwritten tail keeps its zero default.
1168: """
+1169: cdef object idp_error = None
__Pyx_INCREF(Py_None);
__pyx_v_idp_error = Py_None;
+1170: cdef object description = None
__Pyx_INCREF(Py_None);
__pyx_v_description = Py_None;
+1171: cdef object status = None
__Pyx_INCREF(Py_None);
__pyx_v_status = Py_None;
+1172: cdef object retry_after = None
__Pyx_INCREF(Py_None);
__pyx_v_retry_after = Py_None;
+1173: cdef bint acquisition_busy = False
__pyx_v_acquisition_busy = 0;
1174: cdef object exc
+1175: OidcConfigError = errors.OidcConfigError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcConfigError = __pyx_t_1; __pyx_t_1 = 0;
+1176: OidcCancelledError = errors.OidcCancelledError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcCancelledError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcCancelledError = __pyx_t_1; __pyx_t_1 = 0;
+1177: OidcDeviceFlowError = errors.OidcDeviceFlowError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcDeviceFlowError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcDeviceFlowError = __pyx_t_1; __pyx_t_1 = 0;
+1178: OidcError = errors.OidcError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcError = __pyx_t_1; __pyx_t_1 = 0;
+1179: OidcInteractionRequired = errors.OidcInteractionRequired
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcInteractionRequired = __pyx_t_1; __pyx_t_1 = 0;
+1180: OidcNetworkError = errors.OidcNetworkError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcNetworkError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcNetworkError = __pyx_t_1; __pyx_t_1 = 0;
+1181: OidcTimeoutError = errors.OidcTimeoutError
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcTimeoutError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_OidcTimeoutError = __pyx_t_1; __pyx_t_1 = 0;
1182:
+1183: if _oidc_error_view_has_v1(view.struct_size):
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_error_view_has_v1(__pyx_v_view->struct_size);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+1184: idp_error = _oidc_text(view.idp_error, view.idp_error_len)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view->idp_error, __pyx_v_view->idp_error_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_idp_error, __pyx_t_1); __pyx_t_1 = 0;
+1185: description = _oidc_text(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view->idp_error_description, __pyx_v_view->idp_error_description_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_description, __pyx_t_1); __pyx_t_1 = 0;
1186: view.idp_error_description, view.idp_error_description_len)
+1187: status = view.status if view.has_status else None
__pyx_t_2 = (__pyx_v_view->has_status != 0);
if (__pyx_t_2) {
__pyx_t_3 = __Pyx_PyLong_From_uint16_t(__pyx_v_view->status); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1187, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __pyx_t_3;
__pyx_t_3 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
}
__Pyx_DECREF_SET(__pyx_v_status, __pyx_t_1);
__pyx_t_1 = 0;
1188: retry_after = (
+1189: view.retry_after_seconds if view.has_retry_after else None)
__pyx_t_2 = (__pyx_v_view->has_retry_after != 0);
if (__pyx_t_2) {
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_view->retry_after_seconds); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1189, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __pyx_t_3;
__pyx_t_3 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
}
__Pyx_DECREF_SET(__pyx_v_retry_after, __pyx_t_1);
__pyx_t_1 = 0;
+1190: if _oidc_error_view_has_acquisition_busy(view.struct_size):
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(__pyx_v_view->struct_size);
if (__pyx_t_2) {
/* … */
}
+1191: acquisition_busy = view.acquisition_busy
__pyx_t_4 = __pyx_v_view->acquisition_busy;
__pyx_v_acquisition_busy = __pyx_t_4;
+1192: if view.kind == QUESTDB_OIDC_ERROR_CONFIG:
switch (__pyx_v_view->kind) {
case QUESTDB_OIDC_ERROR_CONFIG:
/* … */
break;
case QUESTDB_OIDC_ERROR_NETWORK:
+1193: exc = OidcConfigError(
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_5 = __pyx_v_OidcConfigError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_8 = __pyx_mstate_global->__pyx_tuple[9];
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1193, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_8);
#else
{
PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1193, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1193, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_mstate_global->__pyx_tuple[9] = __Pyx_PyTuple_FromArray(__pyx_temp, 5); if (unlikely(!__pyx_mstate_global->__pyx_tuple[9])) __PYX_ERR(1, 1193, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[9]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[9]);
1194: message, status=status, retry_after=retry_after,
+1195: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
+1196: elif view.kind == QUESTDB_OIDC_ERROR_NETWORK:
break;
case QUESTDB_OIDC_ERROR_DEVICE_FLOW:
+1197: exc = OidcNetworkError(
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_OidcNetworkError);
__pyx_t_8 = __pyx_v_OidcNetworkError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[7] = {__pyx_t_5, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[9];
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1197, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1197, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1197, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
1198: message, status=status, retry_after=retry_after,
+1199: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
+1200: elif view.kind == QUESTDB_OIDC_ERROR_DEVICE_FLOW:
break;
case QUESTDB_OIDC_ERROR_TIMEOUT:
+1201: exc = OidcDeviceFlowError(
__pyx_t_8 = NULL;
__Pyx_INCREF(__pyx_v_OidcDeviceFlowError);
__pyx_t_3 = __pyx_v_OidcDeviceFlowError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[9] = {__pyx_t_8, __pyx_v_message, __pyx_v_idp_error, __pyx_v_description, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_5 = __pyx_mstate_global->__pyx_tuple[10];
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1201, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_5);
#else
{
PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 7);
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1201, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1201, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_mstate_global->__pyx_tuple[10] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[10])) __PYX_ERR(1, 1201, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[10]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[10]);
1202: message,
1203: error=idp_error,
1204: error_description=description,
1205: status=status,
1206: retry_after=retry_after,
+1207: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
+1208: elif view.kind == QUESTDB_OIDC_ERROR_TIMEOUT:
break;
case QUESTDB_OIDC_ERROR_INTERACTION_REQUIRED:
1209: # OidcTimeoutError is an OidcDeviceFlowError, and the native side
1210: # attaches the IdP error (e.g. "expired_token"); carry it through
1211: # like the DEVICE_FLOW branch instead of dropping it.
+1212: exc = OidcTimeoutError(
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_OidcTimeoutError);
__pyx_t_5 = __pyx_v_OidcTimeoutError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[9] = {__pyx_t_3, __pyx_v_message, __pyx_v_idp_error, __pyx_v_description, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_8 = __pyx_mstate_global->__pyx_tuple[10];
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1212, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_8);
#else
{
PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 7);
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
1213: message,
1214: error=idp_error,
1215: error_description=description,
1216: status=status,
1217: retry_after=retry_after,
+1218: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
+1219: elif view.kind == QUESTDB_OIDC_ERROR_INTERACTION_REQUIRED:
break;
case QUESTDB_OIDC_ERROR_CANCELLED:
+1220: exc = OidcInteractionRequired(
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_OidcInteractionRequired);
__pyx_t_8 = __pyx_v_OidcInteractionRequired;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[7] = {__pyx_t_5, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[9];
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1220, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1220, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1220, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
1221: message, status=status, retry_after=retry_after,
+1222: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
+1223: elif view.kind == QUESTDB_OIDC_ERROR_CANCELLED:
break;
default:
+1224: exc = OidcCancelledError(
__pyx_t_8 = NULL;
__Pyx_INCREF(__pyx_v_OidcCancelledError);
__pyx_t_3 = __pyx_v_OidcCancelledError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[7] = {__pyx_t_8, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_5 = __pyx_mstate_global->__pyx_tuple[9];
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1224, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_5);
#else
{
PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1224, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1224, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
1225: message, status=status, retry_after=retry_after,
+1226: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
1227: else:
+1228: exc = OidcError(
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_OidcError);
__pyx_t_5 = __pyx_v_OidcError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_8 = __pyx_mstate_global->__pyx_tuple[9];
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1228, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_8);
#else
{
PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1228, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1228, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
break;
}
1229: message, status=status, retry_after=retry_after,
+1230: in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
1231: else:
+1232: exc = OidcError(
/*else*/ {
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_OidcError);
__pyx_t_8 = __pyx_v_OidcError;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_message, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[8];
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1232, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3);
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1232, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1232, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_v_exc = __pyx_t_1;
__pyx_t_1 = 0;
}
__pyx_L3:;
+1233: message, in_doubt=in_doubt, code=code, sender_error=sender_error)
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #if CYTHON_VECTORCALL
1234: # Internal transport-retry discriminator. Keeping it on the converted
1235: # exception makes the decision describe the native error that actually
1236: # occurred, rather than racing a later read of provider state.
+1237: exc._acquisition_busy = bool(acquisition_busy)
__pyx_t_8 = NULL; __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_acquisition_busy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1237, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(1, 1237, __pyx_L1_error) __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
+1238: return exc
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_exc);
__pyx_r = __pyx_v_exc;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
1239:
1240:
+1241: cdef int _raise_oidc_auth_closed() except -1:
static int __pyx_f_7questdb_7_client__raise_oidc_auth_closed(void) {
PyObject *__pyx_v_OidcCancelledError = NULL;
PyObject *__pyx_v_exc = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._raise_oidc_auth_closed", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__Pyx_XDECREF(__pyx_v_OidcCancelledError);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1242: """Raise the error every use of a closed provider reports.
1243:
1244: Its own operations and attaching it to a transport report the same typed
1245: `OidcCancelledError` -- the error native raises for a closed provider, and
1246: the one a transport already attached to it raises once it is closed --
1247: so one `except OidcError` covers every path.
1248:
1249: It is marked as a closed `RefreshingTokenProvider`'s failure is
1250: (`_provider_closed`). A provider of your own that calls `token()` and lets
1251: the error escape -- `bearer_token_provider=lambda: auth.token()` -- then
1252: ends its clients, as `oidc_auth=auth` does, instead of leaving them
1253: retrying a provider that can never serve again.
1254: """
+1255: from questdb.auth._errors import OidcCancelledError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcCancelledError};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcCancelledError};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcCancelledError = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1256: exc = OidcCancelledError('The OIDC authentication provider is closed.')
__pyx_t_4 = NULL; __Pyx_INCREF(__pyx_v_OidcCancelledError); __pyx_t_5 = __pyx_v_OidcCancelledError; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_The_OIDC_authentication_provider}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0;
+1257: exc._provider_closed = True
if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_provider_closed, Py_True) < (0)) __PYX_ERR(1, 1257, __pyx_L1_error)
+1258: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(1, 1258, __pyx_L1_error)
1259:
1260:
+1261: cdef void_int _oidc_require_native_token(object oidc_auth) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_require_native_token(PyObject *__pyx_v_oidc_auth) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._oidc_require_native_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1262: """Refuse an ``oidc_auth=`` provider whose ``token()`` is overridden, by a
1263: subclass or an instance attribute.
1264:
1265: Connections take the token from the native provider and never call a
1266: Python ``token()``, so they would skip an override that ``headers()`` and
1267: the PG-wire adapters do call.
1268: """
+1269: if not _method_not_overridden(oidc_auth, OidcDeviceAuth, 'token'):
__pyx_t_1 = __pyx_f_7questdb_7_client__method_not_overridden(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_token); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1269, __pyx_L1_error)
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+1270: raise _ConfigTypeError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1270, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_oidc_auth_must_not_override_tok};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1270, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(1, 1270, __pyx_L1_error)
1271: '"oidc_auth" must not override token(): connections take the '
1272: 'token from the native provider and never call the override, '
1273: 'which runs only where Python calls token() itself, such as the '
1274: 'PG-wire adapters. Remove the override.')
+1275: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
1276:
1277:
+1278: cdef object _oidc_err_to_py(questdb_error* err):
static PyObject *__pyx_f_7questdb_7_client__oidc_err_to_py(questdb_error *__pyx_v_err) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._oidc_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1279: if err == NULL:
__pyx_t_1 = (__pyx_v_err == NULL);
if (__pyx_t_1) {
/* … */
}
+1280: return _oidc_err_to_py_unowned(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py_unowned(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+1281: try:
/*try:*/ {
+1282: return _oidc_err_to_py_unowned(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py_unowned(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1282, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L4_return; }
1283: finally:
+1284: _oidc_release_error(err)
/*finally:*/ {
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
/* … */
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+1285: _oidc_raise_unscheduled_main()
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1285, __pyx_L8_error) } __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8); __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5; goto __pyx_L1_error; __pyx_L8_error:; __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; goto __pyx_L1_error; } __pyx_L4_return: { __pyx_t_11 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1285, __pyx_L1_error) __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; } }
1286:
1287:
+1288: cdef inline bytes _oidc_required_utf8(object value, str name):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_required_utf8(PyObject *__pyx_v_value, PyObject *__pyx_v_name) {
PyObject *__pyx_v_OidcConfigError = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._oidc_required_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1289: from questdb.auth._errors import OidcConfigError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1289, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1289, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcConfigError = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1290: if not isinstance(value, str) or not value:
__pyx_t_6 = PyUnicode_Check(__pyx_v_value); __pyx_t_7 = (!__pyx_t_6); if (!__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L4_bool_binop_done; } __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 1290, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_7); __pyx_t_5 = __pyx_t_6; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_5)) { /* … */ }
+1291: raise OidcConfigError(
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_8 = __pyx_v_OidcConfigError;
+1292: f'{name} is required and must be a non-empty string')
__pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_is_required_and_must_be_a_non_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 1291, __pyx_L1_error)
+1293: try:
{
/*try:*/ {
/* … */
}
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L10_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
goto __pyx_L0;
}
+1294: return value.encode('utf-8')
__pyx_t_8 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1294, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_1);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(1, 1294, __pyx_L6_error)
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)__pyx_t_1);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L10_try_return;
+1295: except UnicodeEncodeError as exc:
__pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError)))); if (__pyx_t_14) { __Pyx_AddTraceback("questdb._client._oidc_required_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_10) < 0) __PYX_ERR(1, 1295, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_8); __pyx_v_exc = __pyx_t_8; /*try:*/ { /* … */ /*finally:*/ { __pyx_L17_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_14 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L8_except_error; } } } goto __pyx_L8_except_error;
+1296: raise OidcConfigError(
__pyx_t_9 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_15 = __pyx_v_OidcConfigError;
+1297: f'{name} must contain valid Unicode text') from exc
__pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1297, __pyx_L17_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_must_contain_valid_Unicode_text); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1297, __pyx_L17_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_17}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1296, __pyx_L17_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 1296, __pyx_L17_error) }
1298:
1299:
+1300: cdef inline bytes _oidc_optional_utf8(object value, str name):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_optional_utf8(PyObject *__pyx_v_value, PyObject *__pyx_v_name) {
PyObject *__pyx_v_OidcConfigError = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._oidc_optional_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1301: from questdb.auth._errors import OidcConfigError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1301, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1301, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcConfigError = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1302: if value is None:
__pyx_t_5 = (__pyx_v_value == Py_None);
if (__pyx_t_5) {
/* … */
}
+1303: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1304: if not isinstance(value, str):
__pyx_t_5 = PyUnicode_Check(__pyx_v_value);
__pyx_t_6 = (!__pyx_t_5);
if (unlikely(__pyx_t_6)) {
/* … */
}
+1305: raise OidcConfigError(f'{name} must be a string or None')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_7 = __pyx_v_OidcConfigError;
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1305, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_must_be_a_string_or_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1305, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1305, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 1305, __pyx_L1_error)
+1306: try:
{
/*try:*/ {
/* … */
}
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_11, __pyx_t_12);
goto __pyx_L1_error;
__pyx_L9_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_11, __pyx_t_12);
goto __pyx_L0;
}
+1307: return value.encode('utf-8')
__pyx_t_7 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1307, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(1, 1307, __pyx_L5_error)
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)__pyx_t_1);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L9_try_return;
+1308: except UnicodeEncodeError as exc:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client._oidc_optional_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(1, 1308, __pyx_L7_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_v_exc = __pyx_t_7; /*try:*/ { /* … */ /*finally:*/ { __pyx_L16_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); __Pyx_XGOTREF(__pyx_t_19); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __pyx_t_13 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; goto __pyx_L7_except_error; } } } goto __pyx_L7_except_error;
+1309: raise OidcConfigError(
__pyx_t_8 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_14 = __pyx_v_OidcConfigError;
+1310: f'{name} must contain valid Unicode text') from exc
__pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 1310, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_must_contain_valid_Unicode_text); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1310, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_14, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_16}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1309, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 1309, __pyx_L16_error) }
1311:
1312:
+1313: cdef inline void _oidc_validate_bool(
static CYTHON_INLINE void __pyx_f_7questdb_7_client__oidc_validate_bool(PyObject *__pyx_v_value, PyObject *__pyx_v_name, int __pyx_v_allow_none) {
PyObject *__pyx_v_OidcConfigError = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._oidc_validate_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_RefNannyFinishContext();
}
1314: object value, str name, bint allow_none) except *:
+1315: if (value is None and allow_none) or isinstance(value, bool):
__pyx_t_2 = (__pyx_v_value == Py_None);
if (!__pyx_t_2) {
goto __pyx_L5_next_or;
} else {
}
if (!__pyx_v_allow_none) {
} else {
__pyx_t_1 = __pyx_v_allow_none;
goto __pyx_L4_bool_binop_done;
}
__pyx_L5_next_or:;
__pyx_t_2 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+1316: return
{
}
goto __pyx_L0;
+1317: from questdb.auth._errors import OidcConfigError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_4 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1317, __pyx_L1_error)
}
__pyx_t_3 = __pyx_t_4;
__Pyx_GOTREF(__pyx_t_3);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_5 = 0; {
__pyx_t_6 = __Pyx_ImportFrom(__pyx_t_3, __pyx_imported_names[__pyx_t_5]); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1317, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
switch (__pyx_t_5) {
case 0:
__Pyx_INCREF(__pyx_t_6);
__pyx_v_OidcConfigError = __pyx_t_6;
break;
default:;
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
}
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1318: if allow_none:
if (unlikely(__pyx_v_allow_none)) {
/* … */
}
+1319: raise OidcConfigError(f'{name} must be a bool or None')
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_7 = __pyx_v_OidcConfigError;
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_must_be_a_bool_or_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(1, 1319, __pyx_L1_error)
+1320: raise OidcConfigError(f'{name} must be a bool')
__pyx_t_7 = NULL; __Pyx_INCREF(__pyx_v_OidcConfigError); __pyx_t_9 = __pyx_v_OidcConfigError; __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_must_be_a_bool); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 1320, __pyx_L1_error)
1321:
1322:
+1323: cdef void _oidc_cancel_sign_in_from_callback(
static void __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider) {
questdb_error *__pyx_v_err;
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_WriteUnraisable("questdb._client._oidc_cancel_sign_in_from_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
1324: OidcDeviceAuth provider) noexcept:
1325: """Cancel only this device flow from inside its event callback.
1326:
1327: Native's attempt-scoped signal wakes the poll wait without taking the
1328: authentication lock held around this callback. It does not close the shared
1329: provider, discard credentials, or disable attached transports. Errors are
1330: swallowed deliberately: this runs on the interrupt path, where the pending
1331: ``KeyboardInterrupt`` or ``SystemExit`` is the thing worth surfacing.
1332:
1333: The GIL is released around the native call for consistency with every other
1334: native call in this file, not because a deadlock is known here: native's
1335: ``cancel_sign_in`` takes only ``close_wait``, and ``CEventHandler::
1336: cancel_sign_in`` takes ``callback_gate``, which is free while a callback
1337: runs. Holding the GIL across a native lock acquisition is the shape this
1338: file otherwise treats as a rule, so it is not worth being the one exception
1339: should either of those lock disciplines change.
1340: """
+1341: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
1342: cdef bint ok
+1343: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+1344: if provider._raw == NULL or provider._pid != os.getpid():
__pyx_t_2 = (__pyx_v_provider->_raw == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_provider->_pid); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1344, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1344, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1344, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1344, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_3, __pyx_t_4, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1344, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+1345: return
{
}
goto __pyx_L0;
+1346: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+1347: ok = questdb_oidc_auth_cancel_sign_in(provider._raw, &err)
__pyx_v_ok = questdb_oidc_auth_cancel_sign_in(__pyx_v_provider->_raw, (&__pyx_v_err));
+1348: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+1349: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (__pyx_t_1) {
/* … */
}
+1350: if err != NULL:
__pyx_t_1 = (__pyx_v_err != NULL);
if (__pyx_t_1) {
/* … */
}
+1351: _oidc_release_error(err)
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
1352:
1353:
+1354: cdef inline bint _oidc_event_has_browser_target(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_event_has_browser_target(size_t __pyx_v_struct_size) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1355: # browser_target_len immediately precedes the appended uint64 interval.
1356: # A struct from the ABI revision before interval therefore ends here.
1357: return struct_size >= (
+1358: sizeof(questdb_oidc_event) - sizeof(uint64_t))
{
__pyx_r = (__pyx_v_struct_size >= ((sizeof(struct questdb_oidc_event)) - (sizeof(uint64_t))));
}
goto __pyx_L0;
1359:
1360:
+1361: cdef inline bint _oidc_event_has_interval(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_event_has_interval(size_t __pyx_v_struct_size) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+1362: return struct_size >= sizeof(questdb_oidc_event)
{
__pyx_r = (__pyx_v_struct_size >= (sizeof(struct questdb_oidc_event)));
}
goto __pyx_L0;
1363:
1364:
+1365: def _debug_oidc_event_tail_support(size_t struct_size):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_52_debug_oidc_event_tail_support, "Internal test hook for the event ABI\047s appended-field gates."); static PyMethodDef __pyx_mdef_7questdb_7_client_53_debug_oidc_event_tail_support = {"_debug_oidc_event_tail_support", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_52_debug_oidc_event_tail_support}; static PyObject *__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { size_t __pyx_v_struct_size; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_event_tail_support (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_struct_size,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 1365, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 1365, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_event_tail_support", 0) < (0)) __PYX_ERR(1, 1365, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_event_tail_support", 1, 1, 1, i); __PYX_ERR(1, 1365, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 1365, __pyx_L3_error) } __pyx_v_struct_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_struct_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1365, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_event_tail_support", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 1365, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_support", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_52_debug_oidc_event_tail_support(__pyx_self, __pyx_v_struct_size); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_52_debug_oidc_event_tail_support(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_struct_size) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_support", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_53_debug_oidc_event_tail_support, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_support, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_support, __pyx_t_18) < (0)) __PYX_ERR(1, 1365, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
1366: """Internal test hook for the event ABI's appended-field gates."""
+1367: return (_oidc_event_has_browser_target(struct_size),
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_event_has_browser_target(__pyx_v_struct_size); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1367, __pyx_L1_error) __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 1367, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3) != (0)) __PYX_ERR(1, 1367, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+1368: _oidc_event_has_interval(struct_size))
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_event_has_interval(__pyx_v_struct_size); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1368, __pyx_L1_error) __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1368, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
1369:
1370:
+1371: def _debug_oidc_event_tail_sizes():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_54_debug_oidc_event_tail_sizes, "Internal test hook: minimum ABI sizes for browser URL and interval."); static PyMethodDef __pyx_mdef_7questdb_7_client_55_debug_oidc_event_tail_sizes = {"_debug_oidc_event_tail_sizes", (PyCFunction)__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes, METH_NOARGS, __pyx_doc_7questdb_7_client_54_debug_oidc_event_tail_sizes}; static PyObject *__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_event_tail_sizes (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_54_debug_oidc_event_tail_sizes(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_54_debug_oidc_event_tail_sizes(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_sizes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_55_debug_oidc_event_tail_sizes, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_sizes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_sizes, __pyx_t_18) < (0)) __PYX_ERR(1, 1371, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
1372: """Internal test hook: minimum ABI sizes for browser URL and interval."""
+1373: return (sizeof(questdb_oidc_event) - sizeof(uint64_t),
__pyx_t_1 = __Pyx_PyLong_FromSize_t(((sizeof(struct questdb_oidc_event)) - (sizeof(uint64_t)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 1373, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 1373, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+1374: sizeof(questdb_oidc_event))
__pyx_t_2 = __Pyx_PyLong_FromSize_t((sizeof(struct questdb_oidc_event))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
1375:
1376:
+1377: cdef class _OidcForegroundCall:
struct __pyx_obj_7questdb_7_client__OidcForegroundCall {
PyObject_HEAD
PyObject *provider;
PyObject *interrupt;
PyObject *previous;
};
1378: """One ``sign_in()`` / ``token()`` / ``clear()`` running on this thread.
1379:
1380: Those calls release the GIL for the whole native operation, so the only
1381: Python bytecode that runs on the caller's thread meanwhile is a callback
1382: native makes from inside it -- a renderer event, or a persistence
1383: diagnostic -- and CPython delivers a pending signal at the first bytecode
1384: it runs. A ``KeyboardInterrupt`` (or ``SystemExit``) raised there must not
1385: unwind through native, so the callback parks it here for the call to
1386: re-raise once native returns.
1387: """
1388: # The provider whose `sign_in()` this is, or None for token() / clear().
1389: # A sign-in parks on the provider's own `_interrupt` slot, which the event
1390: # dispatcher also reads, and is additionally cancelled.
1391: cdef object provider
1392: cdef object interrupt
1393: # The record this one shadows: a renderer callback may itself call token().
1394: cdef object previous
1395:
1396:
1397: # Per-thread stack of `_OidcForegroundCall` records. The diagnostic callback's
1398: # `user_data` is an opaque integer provider id, never a Python object; it
1399: # cannot identify which foreground call (if any) a background worker's warning
1400: # interrupted. Only the current thread can associate a diagnostic with that
1401: # call.
1402: # `with gil` on a thread that released the GIL through `PyEval_SaveThread`
1403: # resumes that thread's own state, so this sees the caller's record. A native
1404: # worker thread gets a fresh state and correctly sees none.
+1405: cdef object _OIDC_FOREGROUND = threading.local()
__pyx_t_16 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_local); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_16, NULL}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_FOREGROUND); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_t_18); __Pyx_GIVEREF(__pyx_t_18); __pyx_t_18 = 0;
1406:
1407:
+1408: cdef bint _oidc_callback_on_this_thread() except -1:
static int __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(void) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._oidc_callback_on_this_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1409: """Whether this thread is running Python code inside an OIDC callback.
1410:
1411: That is a persistence-warning diagnostic of any provider, or -- while a
1412: ``sign_in()`` / ``token()`` / ``clear()`` runs on this thread with the GIL
1413: released -- one of its renderer events: the only Python code that thread
1414: can run meanwhile is a callback native makes from inside the call.
1415: """
+1416: if getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None):
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 1416, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* … */ }
+1417: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+1418: return getattr(_OIDC_FOREGROUND, 'call', None) is not None
__pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND; __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { __pyx_r = __pyx_t_3; } goto __pyx_L0;
1419:
1420:
+1421: cdef _OidcForegroundCall _oidc_foreground_enter(object provider):
static struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_f_7questdb_7_client__oidc_foreground_enter(PyObject *__pyx_v_provider) {
struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._oidc_foreground_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_call);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1422: cdef _OidcForegroundCall call = _OidcForegroundCall.__new__(
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client__OidcForegroundCall(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcForegroundCall), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1); __pyx_t_1 = 0;
1423: _OidcForegroundCall)
+1424: call.provider = provider
__Pyx_INCREF(__pyx_v_provider); __Pyx_GIVEREF(__pyx_v_provider); __Pyx_GOTREF(__pyx_v_call->provider); __Pyx_DECREF_SET(__pyx_v_call->provider, __pyx_v_provider);
+1425: call.interrupt = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_call->interrupt); __Pyx_DECREF_SET(__pyx_v_call->interrupt, Py_None);
+1426: call.previous = getattr(_OIDC_FOREGROUND, 'call', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_call->previous); __Pyx_DECREF_SET(__pyx_v_call->previous, __pyx_t_2); __pyx_t_2 = 0;
+1427: _OIDC_FOREGROUND.call = call
if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_mstate_global->__pyx_n_u_call_2, ((PyObject *)__pyx_v_call)) < (0)) __PYX_ERR(1, 1427, __pyx_L1_error)
+1428: return call
{
struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_call);
__pyx_r = __pyx_v_call;
}
__Pyx_XDECREF((PyObject *)__pyx_temp);
}
goto __pyx_L0;
1429:
1430:
+1431: cdef object _oidc_foreground_exit(_OidcForegroundCall call):
static PyObject *__pyx_f_7questdb_7_client__oidc_foreground_exit(struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._oidc_foreground_exit", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1432: """Pop ``call`` and return the interrupt a callback parked on it."""
+1433: _OIDC_FOREGROUND.call = call.previous
__pyx_t_1 = __pyx_v_call->previous; __Pyx_INCREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_mstate_global->__pyx_n_u_call_2, __pyx_t_1) < (0)) __PYX_ERR(1, 1433, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1434: call.previous = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_call->previous); __Pyx_DECREF_SET(__pyx_v_call->previous, Py_None);
+1435: return call.interrupt
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_call->interrupt);
__pyx_r = __pyx_v_call->interrupt;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
1436:
1437:
+1438: cdef void _oidc_park_foreground_interrupt(object exc) noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(PyObject *__pyx_v_exc) {
struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider = 0;
PyObject *__pyx_v_record = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_WriteUnraisable("questdb._client._oidc_park_foreground_interrupt", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_call);
__Pyx_XDECREF((PyObject *)__pyx_v_provider);
__Pyx_XDECREF(__pyx_v_record);
__Pyx_RefNannyFinishContext();
}
1439: """Hand an interrupt raised inside a diagnostic to the call it stopped.
1440:
1441: Must not raise: it runs on the error path of a ``noexcept`` callback. It
1442: also runs no bytecode: CPython runs the next pending signal handler at any
1443: bytecode boundary, and an exception raised there -- before ``exc`` was
1444: stored -- was swallowed below together with ``exc``. That lost both of two
1445: signals arriving together (Ctrl-C plus a SIGALRM deadline, say), which is
1446: why the main-thread test is a plain C comparison and not
1447: ``threading.main_thread()``.
1448: """
1449: cdef _OidcForegroundCall call
1450: cdef OidcDeviceAuth provider
+1451: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L4_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
__pyx_L8_try_end:;
}
+1452: record = getattr(_OIDC_FOREGROUND, 'call', None)
__pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = __Pyx_GetAttr3(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1452, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_record = __pyx_t_5;
__pyx_t_5 = 0;
+1453: if record is not None:
__pyx_t_6 = (__pyx_v_record != Py_None);
if (__pyx_t_6) {
/* … */
}
+1454: call = <_OidcForegroundCall>record
__pyx_t_5 = __pyx_v_record;
__Pyx_INCREF(__pyx_t_5);
__pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_5);
__pyx_t_5 = 0;
+1455: if call.provider is not None:
__pyx_t_6 = (__pyx_v_call->provider != Py_None);
if (__pyx_t_6) {
/* … */
goto __pyx_L10;
}
1456: # A sign-in. Park where the renderer path parks, so sign_in()
1457: # has one slot to read, and cancel the device flow so the call
1458: # actually returns. A diagnostic can also fire before the flow
1459: # starts (a failed store read, or the save after a refresh that
1460: # did not yield a servable token), when there is nothing to
1461: # cancel yet; `_oidc_event_dispatch` then cancels at the first
1462: # prompt instead of painting it.
+1463: provider = <OidcDeviceAuth>call.provider
__pyx_t_5 = __pyx_v_call->provider;
__Pyx_INCREF(__pyx_t_5);
__pyx_v_provider = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_t_5);
__pyx_t_5 = 0;
+1464: if provider._interrupt is None:
__pyx_t_6 = (__pyx_v_provider->_interrupt == Py_None);
if (__pyx_t_6) {
/* … */
}
+1465: provider._interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_GIVEREF(__pyx_v_exc); __Pyx_GOTREF(__pyx_v_provider->_interrupt); __Pyx_DECREF_SET(__pyx_v_provider->_interrupt, __pyx_v_exc);
+1466: _oidc_cancel_sign_in_from_callback(provider)
__pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
+1467: return
{
}
goto __pyx_L7_try_return;
+1468: _oidc_cancel_sign_in_from_callback(provider)
__pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
+1469: elif call.interrupt is None:
__pyx_t_6 = (__pyx_v_call->interrupt == Py_None);
if (__pyx_t_6) {
/* … */
}
__pyx_L10:;
+1470: call.interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_GIVEREF(__pyx_v_exc); __Pyx_GOTREF(__pyx_v_call->interrupt); __Pyx_DECREF_SET(__pyx_v_call->interrupt, __pyx_v_exc);
+1471: return
{
}
goto __pyx_L7_try_return;
1472: # The call already holds an interrupt to raise. A second signal's
1473: # exception is not dropped: queue it for the main thread, which
1474: # raises it at the following boundary, as CPython would have.
+1475: if questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT:
__pyx_t_6 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
if (__pyx_t_6) {
/* … */
}
1476: # A native worker thread: signals are never delivered here and
1477: # there is no caller to hand an exception to.
+1478: return
{
}
goto __pyx_L7_try_return;
1479: # No foreground call to re-raise it (or one that already has an
1480: # interrupt), yet this is the main thread: an attached transport
1481: # pulled a token on the caller's thread with the GIL released.
1482: # Catching the exception cleared CPython's tripped-signal state, so
1483: # hand the SAME exception back to the main thread; it surfaces at the
1484: # first bytecode after that native call returns, exactly where an
1485: # uncaught one would have. This covers every class a handler can raise
1486: # -- a SIGTERM handler's SystemExit and a SIGALRM deadline's
1487: # TimeoutError were discarded before -- and runs the user's handler
1488: # once. Re-arming SIGINT instead ran a custom handler again at each
1489: # later bytecode of this callback. The dispatcher schedules it on its
1490: # way out, once no more Python code of this callback remains to run;
1491: # on PyPy, which delivers no pending call, the native-return boundary
1492: # raises it, as it does for a token callback.
+1493: _oidc_park_main(exc)
__pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+1494: except BaseException:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0); goto __pyx_L4_exception_handled; } goto __pyx_L5_except_error;
1495: pass
1496:
1497:
+1498: cdef void _oidc_park_pending_signals() noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_pending_signals(void) {
CYTHON_UNUSED int __pyx_v_attempt;
PyObject *__pyx_v_exc = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_WriteUnraisable("questdb._client._oidc_park_pending_signals", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
}
1499: """Run every other Python signal handler that is pending right now and
1500: park what each raises, after a first one raised inside a diagnostic.
1501:
1502: CPython leaves the remaining handlers tripped when one raises, to run at
1503: the next bytecode boundary; left for later from inside this callback, the
1504: next one was observed never to run at all. Running them here, while the
1505: callback holds the GIL, runs each handler once and in signal order, and
1506: parks every exception for the caller. Bounded, in case a handler keeps
1507: re-raising its own signal.
1508: """
1509: cdef int attempt
+1510: for attempt in range(8):
for (__pyx_t_1 = 0; __pyx_t_1 < 8; __pyx_t_1+=1) {
__pyx_v_attempt = __pyx_t_1;
+1511: try:
{
/*try:*/ {
/* … */
}
__pyx_L5_error:;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L6_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
}
}
+1512: PyErr_CheckSignals()
__pyx_t_5 = PyErr_CheckSignals(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1512, __pyx_L5_error)
+1513: return
{
}
goto __pyx_L9_try_return;
+1514: except BaseException as exc:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_5) { __Pyx_AddTraceback("questdb._client._oidc_park_pending_signals", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(1, 1514, __pyx_L7_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_v_exc = __pyx_t_7; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L19; } __pyx_L19:; } __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_exception_handled; } goto __pyx_L7_except_error;
+1515: _oidc_park_foreground_interrupt(exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
}
1516:
1517:
+1518: cdef _oidc_report_unfinished_prompt(object renderer, object exc):
static PyObject *__pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(PyObject *__pyx_v_renderer, PyObject *__pyx_v_exc) {
PyObject *__pyx_v_errors = NULL;
PyObject *__pyx_v_message = NULL;
PyObject *__pyx_v_signal_codes = NULL;
PyObject *__pyx_v_renderer_exc = NULL;
PyObject *__pyx_v_log_exc = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_errors);
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_signal_codes);
__Pyx_XDECREF(__pyx_v_renderer_exc);
__Pyx_XDECREF(__pyx_v_log_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1519: """Tell a renderer whose prompt got no SUCCESS/FAILURE event that the
1520: sign-in ended.
1521:
1522: Native emits no terminal event when a device flow is cancelled, its
1523: provider is closed, or Ctrl-C interrupts it, so without this the renderer's
1524: output keeps showing the waiting status and a link that no client will
1525: redeem. Best-effort, like every renderer callback.
1526: """
+1527: if renderer is None:
__pyx_t_1 = (__pyx_v_renderer == Py_None);
if (__pyx_t_1) {
/* … */
}
+1528: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+1529: errors = _oidc_errors_module()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1529, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_errors = __pyx_t_2; __pyx_t_2 = 0;
+1530: if exc is None or (errors is not None
__pyx_t_3 = (__pyx_v_exc == Py_None);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
/* … */
__pyx_t_3 = (__pyx_v_errors != Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+1531: and isinstance(exc, errors.OidcCancelledError)):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcCancelledError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1531, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_3; __pyx_L5_bool_binop_done:;
+1532: message = 'Sign-in cancelled.'
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Sign_in_cancelled);
__pyx_v_message = __pyx_mstate_global->__pyx_kp_u_Sign_in_cancelled;
1533: else:
+1534: message = str(exc) or 'OIDC sign-in failed.'
/*else*/ {
__pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1534, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 1534, __pyx_L1_error)
if (!__pyx_t_1) {
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = __pyx_t_4;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_bool_binop_done;
}
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed);
__pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed;
__pyx_L8_bool_binop_done:;
__pyx_v_message = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
}
__pyx_L4:;
+1535: signal_codes = _oidc_signal_handler_codes()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1535, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_signal_codes = __pyx_t_2; __pyx_t_2 = 0;
+1536: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L15_try_end;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L12_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L11_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
__pyx_L15_try_end:;
}
+1537: renderer.on_failure(message)
__pyx_t_4 = __pyx_v_renderer;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_message};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_failure, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1537, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1538: except Exception as renderer_exc:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_10) < 0) __PYX_ERR(1, 1538, __pyx_L12_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_4); __pyx_v_renderer_exc = __pyx_t_4; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_renderer_exc); __pyx_v_renderer_exc = 0; goto __pyx_L22; } __pyx_L21_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_27); __Pyx_XGOTREF(__pyx_t_26); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_20 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_21 = __pyx_filename; { __Pyx_DECREF(__pyx_v_renderer_exc); __pyx_v_renderer_exc = 0; } __Pyx_XGIVEREF(__pyx_t_27); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_26, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11); __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_20; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_21; goto __pyx_L12_except_error; } __pyx_L22:; } __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L11_exception_handled; } goto __pyx_L12_except_error;
+1539: if _oidc_raised_in_signal_handler(renderer_exc, signal_codes):
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_renderer_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1539, __pyx_L21_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+1540: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_10); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_10 = 0; __PYX_ERR(1, 1540, __pyx_L21_error)
+1541: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L31_try_end;
__pyx_L24_error:;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
__pyx_L26_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L21_error;
__pyx_L25_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_L31_try_end:;
}
}
+1542: logging.getLogger('questdb').exception(
__pyx_t_17 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1542, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1542, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_19);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_19))) {
__pyx_t_17 = PyMethod_GET_SELF(__pyx_t_19);
assert(__pyx_t_17);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
__Pyx_INCREF(__pyx_t_17);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1542, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_16);
}
__pyx_t_15 = __pyx_t_16;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_OIDC_renderer_callback_failed};
__pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 1542, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_14);
}
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
1543: 'OIDC renderer callback failed')
+1544: except Exception as log_exc:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_16, &__pyx_t_15) < 0) __PYX_ERR(1, 1544, __pyx_L26_except_error) __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_15); __Pyx_INCREF(__pyx_t_16); __pyx_v_log_exc = __pyx_t_16; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0; goto __pyx_L38; } __pyx_L37_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27); if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_26); __Pyx_XGOTREF(__pyx_t_27); __pyx_t_9 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename; { __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0; } __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_XGIVEREF(__pyx_t_27); __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24); __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21; goto __pyx_L26_except_error; } __pyx_L38:; } __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; goto __pyx_L25_exception_handled; } goto __pyx_L26_except_error;
1545: # Ordinary diagnostics must not replace the saved sign-in error.
1546: # A freshly delivered signal (even one raising Exception rather
1547: # than BaseException) remains an interruption, not a logging bug.
+1548: if _oidc_raised_in_signal_handler(log_exc, signal_codes):
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_log_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1548, __pyx_L37_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
}
+1549: raise
__Pyx_GIVEREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_16, __pyx_t_15); __pyx_t_14 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __PYX_ERR(1, 1549, __pyx_L37_error)
1550:
1551:
+1552: cdef void _oidc_event_dispatch(
static void __pyx_f_7questdb_7_client__oidc_event_dispatch(void *__pyx_v_user_data, struct questdb_oidc_event const *__pyx_v_event) {
PyObject *__pyx_v_browser_target = 0;
PyObject *__pyx_v_signal_codes = 0;
uint64_t __pyx_v_interval_seconds;
PyObject *__pyx_v_provider = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_v_renderer = NULL;
int __pyx_v_interrupted;
PyObject *__pyx_v_check_exc = NULL;
PyObject *__pyx_v_log_exc = NULL;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_WriteUnraisable("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_browser_target);
__Pyx_XDECREF(__pyx_v_signal_codes);
__Pyx_XDECREF(__pyx_v_provider);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_renderer);
__Pyx_XDECREF(__pyx_v_check_exc);
__Pyx_XDECREF(__pyx_v_log_exc);
__Pyx_RefNannyFinishContext();
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
1553: void* user_data,
1554: const questdb_oidc_event* event) noexcept with gil:
+1555: cdef object browser_target = None
__Pyx_INCREF(Py_None);
__pyx_v_browser_target = Py_None;
+1556: cdef object signal_codes = ()
__Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
__pyx_v_signal_codes = __pyx_mstate_global->__pyx_empty_tuple;
+1557: cdef uint64_t interval_seconds = 0
__pyx_v_interval_seconds = 0;
+1558: provider = _oidc_provider_from_user_data(user_data)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_provider_from_user_data(__pyx_v_user_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_provider = __pyx_t_1; __pyx_t_1 = 0;
+1559: if provider is None:
__pyx_t_2 = (__pyx_v_provider == Py_None);
if (__pyx_t_2) {
/* … */
}
+1560: return
{
}
goto __pyx_L0;
+1561: if ((<OidcDeviceAuth>provider)._interrupt is not None
__pyx_t_3 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_interrupt != Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+1562: and event.kind in (
switch (__pyx_v_event->kind) {
case QUESTDB_OIDC_EVENT_PROMPT:
/* … */
__pyx_t_3 = 1;
break;
default:
__pyx_t_3 = 0;
break;
}
__pyx_t_4 = __pyx_t_3;
__pyx_t_2 = __pyx_t_4;
__pyx_L5_bool_binop_done:;
+1563: QUESTDB_OIDC_EVENT_PROMPT, QUESTDB_OIDC_EVENT_WAITING)):
case QUESTDB_OIDC_EVENT_WAITING:
1564: # An interrupt was parked before the device flow could be cancelled --
1565: # by a persistence diagnostic ahead of the prompt, or by an earlier
1566: # event racing the cancellation. Stop instead of painting a prompt
1567: # nobody should answer.
+1568: _oidc_cancel_sign_in_from_callback(<OidcDeviceAuth>provider)
__pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider));
+1569: return
{
}
goto __pyx_L0;
+1570: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L10_except_return:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L0;
__pyx_L12_try_end:;
}
1571: # sign_in() runs with the GIL released, so this callback is where
1572: # CPython runs Python signal handlers for the caller's thread. Run the
1573: # pending ones HERE, before any renderer code: whatever they raise --
1574: # KeyboardInterrupt, but equally a SIGALRM timeout or pytest-timeout's
1575: # BaseException -- is an interruption of sign_in(), not a renderer
1576: # failure. Letting the first renderer bytecode run them instead
1577: # attributed their exception to the renderer, which logged it and let
1578: # sign_in() poll on until the device code expired.
+1579: PyErr_CheckSignals()
__pyx_t_8 = PyErr_CheckSignals(); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 1579, __pyx_L7_error)
+1580: if CYTHON_COMPILING_IN_PYPY:
__pyx_t_2 = (CYTHON_COMPILING_IN_PYPY != 0);
if (__pyx_t_2) {
/* … */
}
1581: # PyPy's cpyext does NOT run pending handlers from
1582: # PyErr_CheckSignals(); it delivers a signal only while
1583: # interpreting bytecode, and every frame from the C signal
1584: # handler to here is compiled C. Without a boundary of our own
1585: # the first bytecode is renderer code, where an ordinary
1586: # `Exception` raised by a SIGALRM handler is indistinguishable
1587: # from a renderer bug -- logged, swallowed, and sign_in() polls
1588: # to the device-code deadline.
+1589: _oidc_signal_tick()
__pyx_t_9 = __pyx_f_7questdb_7_client__oidc_signal_tick(); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1589, __pyx_L7_error)
+1590: signal_codes = _oidc_signal_handler_codes()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1590, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_signal_codes, __pyx_t_1); __pyx_t_1 = 0;
+1591: except BaseException as exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(1, 1591, __pyx_L9_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_v_exc = __pyx_t_10; /*try:*/ { /* … */ /*finally:*/ { __pyx_L18_return: { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L10_except_return; } } } goto __pyx_L9_except_error;
+1592: _oidc_park_event_interrupt(<OidcDeviceAuth>provider, exc, event.kind)
__pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_exc, __pyx_v_event->kind);
+1593: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L18_return;
}
+1594: renderer = (<OidcDeviceAuth>provider)._renderer
__pyx_t_11 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_renderer;
__Pyx_INCREF(__pyx_t_11);
__pyx_v_renderer = __pyx_t_11;
__pyx_t_11 = 0;
+1595: if renderer is None:
__pyx_t_2 = (__pyx_v_renderer == Py_None);
if (__pyx_t_2) {
/* … */
}
+1596: return
{
}
goto __pyx_L0;
+1597: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L27_try_end;
__pyx_L22_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
__pyx_L24_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L25_except_return:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
goto __pyx_L0;
__pyx_L23_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
__pyx_L27_try_end:;
}
+1598: if event.kind == QUESTDB_OIDC_EVENT_PROMPT:
switch (__pyx_v_event->kind) {
case QUESTDB_OIDC_EVENT_PROMPT:
/* … */
break;
case QUESTDB_OIDC_EVENT_WAITING:
1599: # These fields were appended to the public C struct. Static linkage
1600: # makes this build use matching layouts today, but the callback ABI
1601: # explicitly supports an older shared library: never read beyond
1602: # the size that producer reported.
+1603: if _oidc_event_has_browser_target(event.struct_size):
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_event_has_browser_target(__pyx_v_event->struct_size); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1603, __pyx_L22_error) if (__pyx_t_2) { /* … */ }
+1604: browser_target = _oidc_text(
__pyx_t_11 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->browser_target, __pyx_v_event->browser_target_len); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1604, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF_SET(__pyx_v_browser_target, __pyx_t_11); __pyx_t_11 = 0;
1605: event.browser_target, event.browser_target_len)
+1606: if _oidc_event_has_interval(event.struct_size):
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_event_has_interval(__pyx_v_event->struct_size); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1606, __pyx_L22_error) if (__pyx_t_2) { /* … */ }
+1607: interval_seconds = event.interval_seconds
__pyx_t_12 = __pyx_v_event->interval_seconds;
__pyx_v_interval_seconds = __pyx_t_12;
+1608: (<OidcDeviceAuth>provider)._prompt_renderer = renderer
__Pyx_INCREF(__pyx_v_renderer); __Pyx_GIVEREF(__pyx_v_renderer); __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer); __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, __pyx_v_renderer);
+1609: renderer.on_prompt({
__pyx_t_10 = __pyx_v_renderer;
__Pyx_INCREF(__pyx_t_10);
+1610: 'user_code': _oidc_text(event.user_code, event.user_code_len),
__pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->user_code, __pyx_v_event->user_code_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_user_code, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1611: 'verification_uri': _oidc_text(
__pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->verification_uri, __pyx_v_event->verification_uri_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1611, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_verification_uri, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
1612: event.verification_uri, event.verification_uri_len),
+1613: 'verification_uri_complete': _oidc_text(
__pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->verification_uri_complete, __pyx_v_event->verification_uri_complete_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1613, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_verification_uri_complete, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
1614: event.verification_uri_complete,
1615: event.verification_uri_complete_len),
1616: # The bounded values the native polling loop actually uses,
1617: # matching Java's complete device challenge. Each is passed with
1618: # the C type the event declares -- `expires_in` a double (as
1619: # `on_waiting` and `on_success` also pass it), `interval` a
1620: # uint64 -- rather than narrowed here: a C double->unsigned cast
1621: # is in range only because native happens to clamp the lifetime.
+1622: 'expires_in': event.expires_in_seconds,
__pyx_t_13 = PyFloat_FromDouble(__pyx_v_event->expires_in_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1622, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_expires_in, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1623: 'interval': interval_seconds,
__pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_interval_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1623, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_interval, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
1624: # This is the only native-vetted actionable URL. Built-in
1625: # renderers prefer it for links and QR codes.
+1626: 'browser_target': browser_target,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_browser_target, __pyx_v_browser_target) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error) __pyx_t_14 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_1}; __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_prompt, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1609, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
1627: })
+1628: elif event.kind == QUESTDB_OIDC_EVENT_WAITING:
break;
case QUESTDB_OIDC_EVENT_SUCCESS:
+1629: renderer.on_waiting(event.seconds_left)
__pyx_t_1 = __pyx_v_renderer;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_10 = PyFloat_FromDouble(__pyx_v_event->seconds_left); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1629, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_10};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_waiting, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1629, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_11);
}
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1630: elif event.kind == QUESTDB_OIDC_EVENT_SUCCESS:
break;
case QUESTDB_OIDC_EVENT_FAILURE:
+1631: (<OidcDeviceAuth>provider)._prompt_renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer); __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, Py_None);
+1632: renderer.on_success(
__pyx_t_10 = __pyx_v_renderer;
__Pyx_INCREF(__pyx_t_10);
+1633: _oidc_text(event.identity, event.identity_len),
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->identity, __pyx_v_event->identity_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1633, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_1);
+1634: event.expires_in_seconds)
__pyx_t_13 = PyFloat_FromDouble(__pyx_v_event->expires_in_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1634, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_1, __pyx_t_13}; __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_success, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1632, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1635: elif event.kind == QUESTDB_OIDC_EVENT_FAILURE:
break;
default: break;
}
+1636: (<OidcDeviceAuth>provider)._prompt_renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer); __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, Py_None);
+1637: renderer.on_failure(
__pyx_t_13 = __pyx_v_renderer;
__Pyx_INCREF(__pyx_t_13);
+1638: _oidc_text(event.message, event.message_len) or
__pyx_t_10 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->message, __pyx_v_event->message_len); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1638, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1638, __pyx_L22_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { __Pyx_INCREF(__pyx_t_10); __pyx_t_1 = __pyx_t_10; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L30_bool_binop_done; }
+1639: 'OIDC sign-in failed.')
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed); __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed; __pyx_L30_bool_binop_done:; __pyx_t_14 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_1}; __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_failure, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1637, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1640: except BaseException as exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(1, 1640, __pyx_L24_except_error) __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_v_exc = __pyx_t_1; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L38; } __pyx_L37_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_ExceptionSwap(&__pyx_t_30, &__pyx_t_29, &__pyx_t_28); if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_30); __Pyx_XGOTREF(__pyx_t_29); __Pyx_XGOTREF(__pyx_t_28); __pyx_t_26 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_27 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_30); __Pyx_XGIVEREF(__pyx_t_29); __Pyx_XGIVEREF(__pyx_t_28); __Pyx_ExceptionReset(__pyx_t_30, __pyx_t_29, __pyx_t_28); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17); __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_lineno = __pyx_t_26; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_27; goto __pyx_L24_except_error; } __pyx_L36_return: { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L25_except_return; } __pyx_L38:; } __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L23_exception_handled; } goto __pyx_L24_except_error;
+1641: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
goto __pyx_L46_try_end;
__pyx_L39_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
__pyx_L41_except_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
goto __pyx_L37_error;
__pyx_L42_except_return:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
goto __pyx_L36_return;
__pyx_L46_try_end:;
}
+1642: interrupted = (not isinstance(exc, Exception)
__pyx_t_4 = __Pyx_PyExc_Exception_Check(__pyx_v_exc);
__pyx_t_3 = (!__pyx_t_4);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L47_bool_binop_done;
}
+1643: or _oidc_raised_in_signal_handler(exc, signal_codes))
__pyx_t_3 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1643, __pyx_L39_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L47_bool_binop_done:;
__pyx_v_interrupted = __pyx_t_2;
+1644: except BaseException as check_exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_18, &__pyx_t_19) < 0) __PYX_ERR(1, 1644, __pyx_L41_except_error) __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_t_19); __Pyx_INCREF(__pyx_t_18); __pyx_v_check_exc = __pyx_t_18; /*try:*/ { /* … */ /*finally:*/ { __pyx_L53_return: { __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0; goto __pyx_L42_except_return; } } } goto __pyx_L41_except_error;
1645: # A second signal can arrive while examining the first traceback.
+1646: _oidc_park_event_interrupt(
__pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_check_exc, __pyx_v_event->kind);
1647: <OidcDeviceAuth>provider, check_exc, event.kind)
+1648: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L53_return;
}
+1649: if interrupted:
if (__pyx_v_interrupted) {
/* … */
}
1650: # An arbitrary Python signal handler may raise an Exception, not
1651: # just KeyboardInterrupt/SystemExit. The signal handler's frame
1652: # distinguishes it from an ordinary best-effort renderer failure.
+1653: _oidc_park_event_interrupt(
__pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_exc, __pyx_v_event->kind);
1654: <OidcDeviceAuth>provider, exc, event.kind)
+1655: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L36_return;
+1656: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L64_try_end;
__pyx_L57_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
__pyx_L59_except_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
goto __pyx_L37_error;
__pyx_L60_except_return:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
goto __pyx_L36_return;
__pyx_L58_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
__pyx_L64_try_end:;
}
}
+1657: logging.getLogger('questdb').exception(
__pyx_t_20 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 1657, __pyx_L57_error)
__Pyx_GOTREF(__pyx_t_21);
__pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 1657, __pyx_L57_error)
__Pyx_GOTREF(__pyx_t_22);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
__pyx_t_14 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_22))) {
__pyx_t_20 = PyMethod_GET_SELF(__pyx_t_22);
assert(__pyx_t_20);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
__Pyx_INCREF(__pyx_t_20);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
__pyx_t_14 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1657, __pyx_L57_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_18 = __pyx_t_10;
__Pyx_INCREF(__pyx_t_18);
__pyx_t_14 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_mstate_global->__pyx_kp_u_OIDC_renderer_callback_failed};
__pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1657, __pyx_L57_error)
__Pyx_GOTREF(__pyx_t_19);
}
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
1658: 'OIDC renderer callback failed')
+1659: except BaseException as log_exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_19, &__pyx_t_10, &__pyx_t_18) < 0) __PYX_ERR(1, 1659, __pyx_L59_except_error) __Pyx_XGOTREF(__pyx_t_19); __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_18); __Pyx_INCREF(__pyx_t_10); __pyx_v_log_exc = __pyx_t_10; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0; goto __pyx_L71; } __pyx_L70_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30); if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_28); __Pyx_XGOTREF(__pyx_t_29); __Pyx_XGOTREF(__pyx_t_30); __pyx_t_8 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename; { __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0; } __Pyx_XGIVEREF(__pyx_t_28); __Pyx_XGIVEREF(__pyx_t_29); __Pyx_XGIVEREF(__pyx_t_30); __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23); __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27; goto __pyx_L59_except_error; } __pyx_L69_return: { __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0; goto __pyx_L60_except_return; } __pyx_L71:; } __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; goto __pyx_L58_exception_handled; } goto __pyx_L59_except_error;
1660: # Signals can also arrive *inside* the logger reporting a broken
1661: # renderer. Neither exception may unwind across the native ABI.
+1662: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
goto __pyx_L79_try_end;
__pyx_L72_error:;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
__pyx_L74_except_error:;
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
goto __pyx_L70_error;
__pyx_L75_except_return:;
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
goto __pyx_L69_return;
__pyx_L79_try_end:;
}
1663: interrupted = (
+1664: not isinstance(log_exc, Exception)
__pyx_t_3 = __Pyx_PyExc_Exception_Check(__pyx_v_log_exc);
__pyx_t_4 = (!__pyx_t_3);
if (!__pyx_t_4) {
} else {
__pyx_t_2 = __pyx_t_4;
goto __pyx_L80_bool_binop_done;
}
+1665: or _oidc_raised_in_signal_handler(log_exc, signal_codes))
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_log_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1665, __pyx_L72_error)
__pyx_t_2 = __pyx_t_4;
__pyx_L80_bool_binop_done:;
__pyx_v_interrupted = __pyx_t_2;
+1666: except BaseException as check_exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_22, &__pyx_t_20, &__pyx_t_21) < 0) __PYX_ERR(1, 1666, __pyx_L74_except_error) __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_INCREF(__pyx_t_20); __pyx_v_check_exc = __pyx_t_20; /*try:*/ { /* … */ /*finally:*/ { __pyx_L86_return: { __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0; goto __pyx_L75_except_return; } } } goto __pyx_L74_except_error;
+1667: _oidc_park_event_interrupt(
__pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_check_exc, __pyx_v_event->kind);
1668: <OidcDeviceAuth>provider, check_exc, event.kind)
+1669: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
goto __pyx_L86_return;
}
+1670: if interrupted:
if (__pyx_v_interrupted) {
/* … */
}
}
+1671: _oidc_park_event_interrupt(
__pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_log_exc, __pyx_v_event->kind);
1672: <OidcDeviceAuth>provider, log_exc, event.kind)
1673:
1674:
+1675: cdef void _oidc_park_event_interrupt(
static void __pyx_f_7questdb_7_client__oidc_park_event_interrupt(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider, PyObject *__pyx_v_exc, int __pyx_v_kind) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
1676: OidcDeviceAuth provider, object exc, int kind) noexcept:
1677: """Stash an interruption raised in a renderer event for sign_in() to
1678: re-raise, and cancel the device flow so it actually stops.
1679:
1680: sign_in() releases the GIL for the whole native flow, so the event callback
1681: -- and the persistence diagnostic, see `_OidcForegroundCall` -- is where
1682: Python bytecode, and therefore Python signal handling, runs on the caller's
1683: thread. Swallowing an interruption there made Ctrl-C print a traceback and
1684: change nothing, leaving sign_in() polling until the device code expired.
1685: Must not raise: it runs on the error path of a ``noexcept`` callback.
1686:
1687: A second interruption -- two signals arriving together, or one whose
1688: exception was queued for the main thread and is raised here by its pending
1689: call -- is queued for the main thread rather than dropped, as
1690: `_oidc_park_foreground_interrupt` does. Left unscheduled, it surfaces from
1691: sign_in()'s native-return boundary, chained to the first.
1692: """
+1693: try:
{
/*try:*/ {
/* … */
}
}
+1694: if provider._interrupt is None:
__pyx_t_4 = (__pyx_v_provider->_interrupt == Py_None);
if (__pyx_t_4) {
/* … */
goto __pyx_L9;
}
+1695: provider._interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_GIVEREF(__pyx_v_exc); __Pyx_GOTREF(__pyx_v_provider->_interrupt); __Pyx_DECREF_SET(__pyx_v_provider->_interrupt, __pyx_v_exc);
+1696: elif questdb_thread_ident() == _OIDC_MAIN_THREAD_IDENT:
__pyx_t_4 = (PyThread_get_thread_ident() == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
if (__pyx_t_4) {
/* … */
}
__pyx_L9:;
+1697: _oidc_park_main(exc)
__pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+1698: if kind in (QUESTDB_OIDC_EVENT_PROMPT, QUESTDB_OIDC_EVENT_WAITING):
switch (__pyx_v_kind) {
case QUESTDB_OIDC_EVENT_PROMPT:
case QUESTDB_OIDC_EVENT_WAITING:
/* … */
break;
default: break;
}
1699: # Only the waiting phase needs cancelling. On SUCCESS/FAILURE the
1700: # flow is already ending; in particular, SUCCESS has already
1701: # committed the token that the interrupt must not discard.
+1702: _oidc_cancel_sign_in_from_callback(provider)
__pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
1703: except BaseException:
1704: pass
1705:
1706:
+1707: cdef void _oidc_diagnostic_dispatch(
static void __pyx_f_7questdb_7_client__oidc_diagnostic_dispatch(void *__pyx_v_user_data, struct questdb_oidc_diagnostic const *__pyx_v_diagnostic) {
size_t __pyx_v_provider_id;
int __pyx_v_on_main;
int __pyx_v_registered;
PyObject *__pyx_v_signal_codes = 0;
PyObject *__pyx_v_thread_ids = 0;
PyObject *__pyx_v_lock = 0;
PyObject *__pyx_v_region = 0;
PyObject *__pyx_v_exc = NULL;
int __pyx_v_interrupted;
PyObject *__pyx_v_check_exc = NULL;
PyObject *__pyx_v_remaining = NULL;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_WriteUnraisable("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_signal_codes);
__Pyx_XDECREF(__pyx_v_thread_ids);
__Pyx_XDECREF(__pyx_v_lock);
__Pyx_XDECREF(__pyx_v_region);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_check_exc);
__Pyx_XDECREF(__pyx_v_remaining);
__Pyx_RefNannyFinishContext();
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
1708: void* user_data,
1709: const questdb_oidc_diagnostic* diagnostic) noexcept with gil:
+1710: cdef size_t provider_id = <size_t>user_data
__pyx_v_provider_id = ((size_t)__pyx_v_user_data);
+1711: cdef bint on_main = questdb_thread_ident() == _OIDC_MAIN_THREAD_IDENT
__pyx_v_on_main = (PyThread_get_thread_ident() == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
+1712: cdef bint registered = False
__pyx_v_registered = 0;
+1713: cdef object signal_codes = ()
__Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
__pyx_v_signal_codes = __pyx_mstate_global->__pyx_empty_tuple;
+1714: cdef object thread_ids = None
__Pyx_INCREF(Py_None);
__pyx_v_thread_ids = Py_None;
1715: cdef object lock
+1716: cdef object region = None
__Pyx_INCREF(Py_None);
__pyx_v_region = Py_None;
+1717: if on_main:
if (__pyx_v_on_main) {
/* … */
}
+1718: region = _oidc_main_region_enter(_OIDC_REGION_DIAGNOSTIC)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_main_region_enter(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_region, __pyx_t_1); __pyx_t_1 = 0;
+1719: try:
/*try:*/ {
+1720: lock = _oidc_registry_lock_acquire()
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1720, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_lock = __pyx_t_1; __pyx_t_1 = 0;
+1721: try:
/*try:*/ {
+1722: _OIDC_DIAGNOSTICS_ACTIVE[provider_id] = (
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(1, 1722, __pyx_L8_error)
}
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1722, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_2);
if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_t_1) < 0))) __PYX_ERR(1, 1722, __pyx_L8_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1723: _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0) + 1)
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 1723, __pyx_L8_error)
}
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1723, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_1, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1723, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1723, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1724: registered = True
__pyx_v_registered = 1;
}
1725: finally:
+1726: lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1726, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1726, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L5_error;
__pyx_L11_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L5_error;
}
__pyx_L9:;
}
+1727: thread_ids = getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1727, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF_SET(__pyx_v_thread_ids, __pyx_t_2);
__pyx_t_2 = 0;
+1728: if thread_ids is None:
__pyx_t_13 = (__pyx_v_thread_ids == Py_None);
if (__pyx_t_13) {
/* … */
}
+1729: thread_ids = _OIDC_DIAGNOSTIC_LOCAL.ids = []
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1729, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_thread_ids, __pyx_t_2); if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL, __pyx_mstate_global->__pyx_n_u_ids, __pyx_t_2) < (0)) __PYX_ERR(1, 1729, __pyx_L5_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1730: thread_ids.append(provider_id)
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1730, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_14 = __Pyx_PyObject_Append(__pyx_v_thread_ids, __pyx_t_2); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(1, 1730, __pyx_L5_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1731: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L18_try_end;
__pyx_L13_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_L15_except_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
goto __pyx_L5_error;
__pyx_L16_except_return:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
goto __pyx_L4_return;
__pyx_L18_try_end:;
}
1732: # On the thread running sign_in(), token(), clear() or an attached
1733: # transport's token pull, this callback is where CPython runs the
1734: # Python signal handlers that became pending while native ran with
1735: # the GIL released. Run them HERE, before any logging code, exactly
1736: # as the renderer event path does: whatever they raise -- Ctrl-C,
1737: # a SIGTERM handler's SystemExit, but equally a SIGALRM deadline's
1738: # ordinary TimeoutError -- interrupts the call this diagnostic runs
1739: # inside, and must not be mistaken for a logging-handler failure
1740: # and swallowed.
+1741: PyErr_CheckSignals()
__pyx_t_5 = PyErr_CheckSignals(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1741, __pyx_L13_error)
+1742: if CYTHON_COMPILING_IN_PYPY:
__pyx_t_13 = (CYTHON_COMPILING_IN_PYPY != 0);
if (__pyx_t_13) {
/* … */
}
1743: # See `_oidc_event_dispatch`: cpyext delivers signals only at
1744: # bytecode boundaries.
+1745: _oidc_signal_tick()
__pyx_t_15 = __pyx_f_7questdb_7_client__oidc_signal_tick(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1745, __pyx_L13_error)
+1746: signal_codes = _oidc_signal_handler_codes()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1746, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_signal_codes, __pyx_t_2); __pyx_t_2 = 0;
+1747: except BaseException as exc:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_5) { __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_16) < 0) __PYX_ERR(1, 1747, __pyx_L15_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_16); __Pyx_INCREF(__pyx_t_1); __pyx_v_exc = __pyx_t_1; /*try:*/ { /* … */ /*finally:*/ { __pyx_L24_return: { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L16_except_return; } } } goto __pyx_L15_except_error;
+1748: _oidc_park_foreground_interrupt(exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1749: _oidc_park_pending_signals()
__pyx_f_7questdb_7_client__oidc_park_pending_signals();
+1750: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
goto __pyx_L24_return;
}
+1751: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L32_try_end;
__pyx_L27_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_L29_except_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L5_error;
__pyx_L30_except_return:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L4_return;
__pyx_L28_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__pyx_L32_try_end:;
}
}
+1752: if diagnostic.kind == QUESTDB_OIDC_DIAGNOSTIC_PERSISTENCE_WARNING:
__pyx_t_13 = (__pyx_v_diagnostic->kind == QUESTDB_OIDC_DIAGNOSTIC_PERSISTENCE_WARNING);
if (__pyx_t_13) {
/* … */
}
+1753: logging.getLogger('questdb').warning(
__pyx_t_17 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1753, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1753, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_19);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_19))) {
__pyx_t_17 = PyMethod_GET_SELF(__pyx_t_19);
assert(__pyx_t_17);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
__Pyx_INCREF(__pyx_t_17);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1753, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __pyx_t_2;
__Pyx_INCREF(__pyx_t_1);
1754: 'OIDC %s',
+1755: _oidc_text(diagnostic.message, diagnostic.message_len) or
__pyx_t_17 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_diagnostic->message, __pyx_v_diagnostic->message_len); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1755, __pyx_L27_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1755, __pyx_L27_error) if (!__pyx_t_13) { __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } else { __Pyx_INCREF(__pyx_t_17); __pyx_t_19 = __pyx_t_17; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; goto __pyx_L34_bool_binop_done; }
+1756: 'token-store persistence operation failed')
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_token_store_persistence_operatio); __pyx_t_19 = __pyx_mstate_global->__pyx_kp_u_token_store_persistence_operatio; __pyx_L34_bool_binop_done:; __pyx_t_3 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_OIDC_s, __pyx_t_19}; __pyx_t_16 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1753, __pyx_L27_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+1757: except BaseException as exc:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_5) { __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_2, &__pyx_t_19) < 0) __PYX_ERR(1, 1757, __pyx_L29_except_error) __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_v_exc = __pyx_t_2; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L42; } __pyx_L41_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_9); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6; goto __pyx_L29_except_error; } __pyx_L40_return: { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L30_except_return; } __pyx_L42:; } __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; goto __pyx_L28_exception_handled; } goto __pyx_L29_except_error;
+1758: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L50_try_end;
__pyx_L43_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
__pyx_L45_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
goto __pyx_L41_error;
__pyx_L46_except_return:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
goto __pyx_L40_return;
__pyx_L50_try_end:;
}
+1759: interrupted = (not isinstance(exc, Exception)
__pyx_t_20 = __Pyx_PyExc_Exception_Check(__pyx_v_exc);
__pyx_t_21 = (!__pyx_t_20);
if (!__pyx_t_21) {
} else {
__pyx_t_13 = __pyx_t_21;
goto __pyx_L51_bool_binop_done;
}
+1760: or _oidc_raised_in_signal_handler(
__pyx_t_21 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(1, 1760, __pyx_L43_error)
__pyx_t_13 = __pyx_t_21;
__pyx_L51_bool_binop_done:;
__pyx_v_interrupted = __pyx_t_13;
1761: exc, signal_codes))
+1762: except BaseException as check_exc:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_5) { __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_17, &__pyx_t_18) < 0) __PYX_ERR(1, 1762, __pyx_L45_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_18); __Pyx_INCREF(__pyx_t_17); __pyx_v_check_exc = __pyx_t_17; /*try:*/ { /* … */ /*finally:*/ { __pyx_L57_return: { __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0; goto __pyx_L46_except_return; } } } goto __pyx_L45_except_error;
+1763: _oidc_park_foreground_interrupt(check_exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_check_exc);
+1764: return
{
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L57_return;
}
+1765: if interrupted:
if (__pyx_v_interrupted) {
/* … */
}
}
1766: # A signal delivered during logging is not an ordinary
1767: # best-effort handler failure, even when its handler raises
1768: # TimeoutError (an Exception). Do not lose the caller's timer.
+1769: _oidc_park_foreground_interrupt(exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1770: _oidc_park_pending_signals()
__pyx_f_7questdb_7_client__oidc_park_pending_signals();
1771: # Otherwise the diagnostic remains best-effort: a logging handler
1772: # failure must not turn a usable token into an auth failure.
1773: finally:
1774: # Apart from waiting for the registry lock and the notification,
1775: # everything here is C-level and runs no bytecode, so no pending signal
1776: # handler can interrupt it. A contended lock wait and `notify_all()`
1777: # both run pending handlers: one that raises there (Ctrl-C, a SIGALRM
1778: # deadline) must neither skip this bookkeeping -- leaving this thread
1779: # marked as inside the callback, which made every later pool close
1780: # fail, and the main-thread depth stuck above zero -- nor be lost in
1781: # this `noexcept` callback. Park it like any other interrupt delivered
1782: # here.
+1783: if thread_ids is not None and thread_ids:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_21 = (__pyx_v_thread_ids != Py_None);
if (__pyx_t_21) {
} else {
__pyx_t_13 = __pyx_t_21;
goto __pyx_L66_bool_binop_done;
}
__pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L1_error)
__pyx_t_13 = __pyx_t_21;
__pyx_L66_bool_binop_done:;
if (__pyx_t_13) {
/* … */
}
/* … */
__pyx_t_21 = (__pyx_v_thread_ids != Py_None);
if (__pyx_t_21) {
} else {
__pyx_t_13 = __pyx_t_21;
goto __pyx_L80_bool_binop_done;
}
__pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L78_error)
__pyx_t_13 = __pyx_t_21;
__pyx_L80_bool_binop_done:;
if (__pyx_t_13) {
/* … */
}
/* … */
__pyx_t_21 = (__pyx_v_thread_ids != Py_None);
if (__pyx_t_21) {
} else {
__pyx_t_13 = __pyx_t_21;
goto __pyx_L92_bool_binop_done;
}
__pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L1_error)
__pyx_t_13 = __pyx_t_21;
__pyx_L92_bool_binop_done:;
if (__pyx_t_13) {
/* … */
}
+1784: thread_ids.pop()
__pyx_t_19 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_2 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1784, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_19 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1784, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+1785: if registered:
if (__pyx_v_registered) {
/* … */
}
/* … */
if (__pyx_v_registered) {
/* … */
}
/* … */
if (__pyx_v_registered) {
/* … */
}
+1786: lock = _oidc_registry_lock_acquire()
__pyx_t_19 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF_SET(__pyx_v_lock, __pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1786, __pyx_L78_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_lock, __pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_19 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF_SET(__pyx_v_lock, __pyx_t_19); __pyx_t_19 = 0;
+1787: try:
/*try:*/ {
/* … */
/*try:*/ {
/* … */
/*try:*/ {
1788: # Fork inside a logging handler resets the child's active
1789: # callbacks; its inherited stack still runs this finally.
+1790: remaining = _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0)
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 1790, __pyx_L70_error)
}
__pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L70_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L70_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_v_remaining = __pyx_t_2;
__pyx_t_2 = 0;
/* … */
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 1790, __pyx_L84_error)
}
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L84_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L84_error)
__Pyx_GOTREF(__pyx_t_19);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_remaining = __pyx_t_19;
__pyx_t_19 = 0;
/* … */
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(1, 1790, __pyx_L96_error)
}
__pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L96_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L96_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_v_remaining = __pyx_t_2;
__pyx_t_2 = 0;
+1791: if remaining > 1:
__pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L70_error) if (__pyx_t_13) { /* … */ goto __pyx_L72; } /* … */ __pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L84_error) if (__pyx_t_13) { /* … */ goto __pyx_L86; } /* … */ __pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L96_error) if (__pyx_t_13) { /* … */ goto __pyx_L98; }
+1792: _OIDC_DIAGNOSTICS_ACTIVE[provider_id] = remaining - 1
__pyx_t_2 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L70_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) { PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable"); __PYX_ERR(1, 1792, __pyx_L70_error) } __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L70_error) __Pyx_GOTREF(__pyx_t_19); if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_t_2) < 0))) __PYX_ERR(1, 1792, __pyx_L70_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_19 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L84_error) __Pyx_GOTREF(__pyx_t_19); if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) { PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable"); __PYX_ERR(1, 1792, __pyx_L84_error) } __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L84_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_t_19) < 0))) __PYX_ERR(1, 1792, __pyx_L84_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_2 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L96_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) { PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable"); __PYX_ERR(1, 1792, __pyx_L96_error) } __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L96_error) __Pyx_GOTREF(__pyx_t_19); if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_t_2) < 0))) __PYX_ERR(1, 1792, __pyx_L96_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
1793: else:
+1794: _OIDC_DIAGNOSTICS_ACTIVE.pop(provider_id, None)
/*else*/ {
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 1794, __pyx_L70_error)
}
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1794, __pyx_L70_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, Py_None); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L70_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__pyx_L72:;
/* … */
/*else*/ {
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 1794, __pyx_L84_error)
}
__pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1794, __pyx_L84_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_25 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, Py_None); if (unlikely(__pyx_t_25 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L84_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
}
__pyx_L86:;
/* … */
/*else*/ {
if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
__PYX_ERR(1, 1794, __pyx_L96_error)
}
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1794, __pyx_L96_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, Py_None); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L96_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__pyx_L98:;
+1795: _oidc_notify_diagnostics_drained()
__pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
}
/* … */
__pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
}
/* … */
__pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
}
1796: finally:
+1797: lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_19 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_19);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L71;
}
__pyx_L70_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_22);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_19 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_19);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L74_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L74_error:;
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
goto __pyx_L1_error;
}
__pyx_L71:;
}
/* … */
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1797, __pyx_L78_error)
__Pyx_GOTREF(__pyx_t_19);
}
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L85;
}
__pyx_L84_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_28);
__Pyx_XGOTREF(__pyx_t_29);
__Pyx_XGOTREF(__pyx_t_30);
__pyx_t_25 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1797, __pyx_L88_error)
__Pyx_GOTREF(__pyx_t_19);
}
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
}
__Pyx_XGIVEREF(__pyx_t_28);
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
__pyx_lineno = __pyx_t_25; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27;
goto __pyx_L78_error;
__pyx_L88_error:;
__Pyx_XGIVEREF(__pyx_t_28);
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
goto __pyx_L78_error;
}
__pyx_L85:;
}
/* … */
/*finally:*/ {
/*normal exit:*/{
__pyx_t_19 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_19);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L97;
}
__pyx_L96_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_22);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_19 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_19);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L100_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L100_error:;
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
goto __pyx_L1_error;
}
__pyx_L97:;
}
+1798: if on_main:
if (__pyx_v_on_main) {
/* … */
}
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
/* … */
if (__pyx_v_on_main) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
__pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L78_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L4_return: {
/* … */
if (__pyx_v_on_main) {
/* … */
}
goto __pyx_L0;
}
__pyx_L6:;
}
+1799: _oidc_main_region_exit(_OIDC_REGION_DIAGNOSTIC, region)
__pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
/* … */
__pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
/* … */
__pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
+1800: if not _oidc_main_region_active(_OIDC_REGION_DIAGNOSTIC):
__pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));
if (__pyx_t_13) {
/* … */
}
/* … */
__pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));
if (__pyx_t_13) {
/* … */
}
/* … */
__pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));
if (__pyx_t_13) {
/* … */
}
+1801: _oidc_schedule_parked_main()
__pyx_f_7questdb_7_client__oidc_schedule_parked_main();
/* … */
__pyx_f_7questdb_7_client__oidc_schedule_parked_main();
/* … */
__pyx_f_7questdb_7_client__oidc_schedule_parked_main();
1802:
1803:
+1804: cdef object _oidc_registry_lock_acquire():
static PyObject *__pyx_f_7questdb_7_client__oidc_registry_lock_acquire(void) {
PyObject *__pyx_v_lock = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._oidc_registry_lock_acquire", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_lock);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
1805: """Acquire `_OIDC_REGISTRY_LOCK` from a diagnostic callback; return it.
1806:
1807: A contended acquire waits with the GIL released and runs pending signal
1808: handlers. Whatever one raises is parked for the call the diagnostic runs
1809: inside, and the wait resumes: the callback's bookkeeping must still run.
1810: Returns the lock acquired, so the caller releases that same object even if
1811: a fork in between replaced the module's lock.
1812: """
+1813: while True:
while (1) {
+1814: lock = _OIDC_REGISTRY_LOCK
__Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK); __Pyx_XDECREF_SET(__pyx_v_lock, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
+1815: try:
{
/*try:*/ {
/* … */
}
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L9_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
}
}
+1816: lock.acquire()
__pyx_t_5 = __pyx_v_lock;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1816, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1817: return lock
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_lock);
__pyx_r = __pyx_v_lock;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L9_try_return;
+1818: except BaseException as exc:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_7) { __Pyx_AddTraceback("questdb._client._oidc_registry_lock_acquire", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_8) < 0) __PYX_ERR(1, 1818, __pyx_L7_except_error) __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_v_exc = __pyx_t_5; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L19; } __pyx_L19:; } __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_exception_handled; } goto __pyx_L7_except_error;
+1819: _oidc_park_foreground_interrupt(exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1820: _oidc_park_pending_signals()
__pyx_f_7questdb_7_client__oidc_park_pending_signals();
}
1821:
1822:
+1823: cdef void _oidc_notify_diagnostics_drained() noexcept:
static void __pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained(void) {
CYTHON_UNUSED int __pyx_v_attempt;
PyObject *__pyx_v_exc = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_WriteUnraisable("questdb._client._oidc_notify_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
}
1824: """Wake pool closes waiting for a diagnostic, parking any interrupt.
1825:
1826: Caller holds `_OIDC_REGISTRY_LOCK`. An interrupt raised at the first
1827: bytecode of `notify_all()` may preempt the wake-up, so retry once after
1828: running and parking the remaining pending handlers; a waiter that still
1829: misses it re-checks the count when its bounded wait times out.
1830: """
1831: cdef int attempt
+1832: for attempt in range(2):
for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_attempt = __pyx_t_1;
+1833: try:
{
/*try:*/ {
/* … */
}
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L6_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
}
}
+1834: _OIDC_DIAGNOSTICS_DRAINED.notify_all()
__pyx_t_6 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1834, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1835: return
{
}
goto __pyx_L9_try_return;
+1836: except BaseException as exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._oidc_notify_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(1, 1836, __pyx_L7_except_error) __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L19; } __pyx_L19:; } __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L6_exception_handled; } goto __pyx_L7_except_error;
+1837: _oidc_park_foreground_interrupt(exc)
__pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1838: _oidc_park_pending_signals()
__pyx_f_7questdb_7_client__oidc_park_pending_signals();
}
1839:
1840:
+1841: cdef void _oidc_diagnostic_trampoline(
static void __pyx_f_7questdb_7_client__oidc_diagnostic_trampoline(void *__pyx_v_user_data, struct questdb_oidc_diagnostic const *__pyx_v_diagnostic) {
qdb_oidc_callback_gate *__pyx_v_gate;
/* … */
/* function exit code */
__pyx_L0:;
}
1842: void* user_data,
1843: const questdb_oidc_diagnostic* diagnostic) noexcept nogil:
+1844: cdef qdb_oidc_callback_gate* gate = qdb_oidc_callback_enter()
__pyx_v_gate = qdb_oidc_callback_enter();
+1845: if gate == NULL:
__pyx_t_1 = (__pyx_v_gate == NULL);
if (__pyx_t_1) {
/* … */
}
+1846: return
{
}
goto __pyx_L0;
+1847: try:
/*try:*/ {
+1848: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+1849: return
{
}
goto __pyx_L4_return;
+1850: qdb_oidc_callback_before_gil(gate)
qdb_oidc_callback_before_gil(__pyx_v_gate);
+1851: if not qdb_oidc_callback_stopped(gate):
__pyx_t_1 = (!qdb_oidc_callback_stopped(__pyx_v_gate));
if (__pyx_t_1) {
/* … */
}
}
+1852: _oidc_diagnostic_dispatch(user_data, diagnostic)
__pyx_f_7questdb_7_client__oidc_diagnostic_dispatch(__pyx_v_user_data, __pyx_v_diagnostic);
1853: finally:
+1854: qdb_oidc_callback_leave(gate)
/*finally:*/ {
/*normal exit:*/{
qdb_oidc_callback_leave(__pyx_v_gate);
goto __pyx_L6;
}
__pyx_L4_return: {
qdb_oidc_callback_leave(__pyx_v_gate);
goto __pyx_L0;
}
__pyx_L6:;
}
1855:
1856:
+1857: cdef void _oidc_event_trampoline(
static void __pyx_f_7questdb_7_client__oidc_event_trampoline(void *__pyx_v_user_data, struct questdb_oidc_event const *__pyx_v_event) {
qdb_oidc_callback_gate *__pyx_v_gate;
/* … */
/* function exit code */
__pyx_L0:;
}
1858: void* user_data,
1859: const questdb_oidc_event* event) noexcept nogil:
1860: # Admission precedes GIL acquisition; atexit drains this entire frame,
1861: # including a daemon sign-in's renderer, before finalization may begin.
+1862: cdef qdb_oidc_callback_gate* gate = qdb_oidc_callback_enter()
__pyx_v_gate = qdb_oidc_callback_enter();
+1863: if gate == NULL:
__pyx_t_1 = (__pyx_v_gate == NULL);
if (__pyx_t_1) {
/* … */
}
+1864: return
{
}
goto __pyx_L0;
+1865: try:
/*try:*/ {
+1866: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+1867: return
{
}
goto __pyx_L4_return;
+1868: qdb_oidc_callback_before_gil(gate)
qdb_oidc_callback_before_gil(__pyx_v_gate);
+1869: if not qdb_oidc_callback_stopped(gate):
__pyx_t_1 = (!qdb_oidc_callback_stopped(__pyx_v_gate));
if (__pyx_t_1) {
/* … */
}
}
+1870: _oidc_event_dispatch(user_data, event)
__pyx_f_7questdb_7_client__oidc_event_dispatch(__pyx_v_user_data, __pyx_v_event);
1871: finally:
+1872: qdb_oidc_callback_leave(gate)
/*finally:*/ {
/*normal exit:*/{
qdb_oidc_callback_leave(__pyx_v_gate);
goto __pyx_L6;
}
__pyx_L4_return: {
qdb_oidc_callback_leave(__pyx_v_gate);
goto __pyx_L0;
}
__pyx_L6:;
}
1873:
1874:
+1875: cdef void _oidc_user_data_release_trampoline(
static void __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline(CYTHON_UNUSED void *__pyx_v_user_data) {
/* function exit code */
}
1876: void* user_data) noexcept nogil:
1877: """Deliberately empty: the final release must never enter Python.
1878:
1879: ``user_data`` is an opaque integer key, not a Python object pointer, and
1880: nothing was allocated for it -- so there is nothing to free here and no
1881: reason to acquire the GIL.
1882:
1883: This has to hold because the release can run on a thread the interpreter
1884: does not manage and cannot join. A token provider's acquisition is isolated
1885: onto its own worker so shutdown can abandon it (``bearer_header_isolated_
1886: until``); that worker keeps the provider closure -- and therefore the
1887: callback state -- until its own HTTP call returns, which may be well after
1888: the owning handles are gone and the interpreter has begun finalizing.
1889: Dropping the last reference there used to run a ``Py_DECREF`` behind a
1890: ``Py_IsFinalizing`` check, and no such check can be made safe: finalization
1891: can begin between the test and ``PyGILState_Ensure``, which then hangs the
1892: thread or faults. Holding no Python reference at all removes the hazard
1893: rather than narrowing its window.
1894:
1895: The provider is instead reached through ``_OIDC_PROVIDERS`` under the GIL,
1896: and its weakref callback drops both registry entries and the native-handle
1897: owner on a managed thread.
1898: """
1899: pass
1900:
1901:
+1902: cdef void _oidc_builder_set_string(
static void __pyx_f_7questdb_7_client__oidc_builder_set_string(struct questdb_oidc_builder *__pyx_v_builder, PyObject *__pyx_v_value, PyObject *__pyx_v_name, int __pyx_v_setting) {
PyObject *__pyx_v_encoded = 0;
questdb_error *__pyx_v_err;
int __pyx_v_ok;
PyObject *__pyx_v_OidcConfigError = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._oidc_builder_set_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_encoded);
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_RefNannyFinishContext();
}
1903: questdb_oidc_builder* builder,
1904: object value,
1905: str name,
1906: int setting) except *:
+1907: cdef bytes encoded = _oidc_optional_utf8(value, name)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_optional_utf8(__pyx_v_value, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1907, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_encoded = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+1908: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
+1909: cdef bint ok = True
__pyx_v_ok = 1;
+1910: if encoded is None:
__pyx_t_2 = (__pyx_v_encoded == ((PyObject*)Py_None));
if (__pyx_t_2) {
/* … */
}
+1911: return
{
}
goto __pyx_L0;
1912: # All six, not just 0..3. `token_endpoint` (4) and
1913: # `device_authorization_endpoint` (5) were omitted, so
1914: # `from_questdb(url, token_endpoint='')` sailed past validation and only
1915: # failed later at parse time -- and an empty override still counts as
1916: # EXPLICIT on the native side, which suppresses the IdP-discovery fallback
1917: # for that endpoint. An endpoint is a URL; empty is never meaningful.
+1918: if PyBytes_GET_SIZE(encoded) == 0:
__pyx_t_2 = (PyBytes_GET_SIZE(__pyx_v_encoded) == 0);
if (__pyx_t_2) {
/* … */
}
+1919: from questdb.auth._errors import OidcConfigError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1919, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_4 = 0; {
__pyx_t_5 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_4]); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1919, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
switch (__pyx_t_4) {
case 0:
__Pyx_INCREF(__pyx_t_5);
__pyx_v_OidcConfigError = __pyx_t_5;
break;
default:;
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1920: raise OidcConfigError(
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_6 = __pyx_v_OidcConfigError;
+1921: f'{name} must be a non-empty string or None')
__pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1921, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_must_be_a_non_empty_string_or_N); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1921, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1920, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 1920, __pyx_L1_error)
+1922: if setting == 0:
switch (__pyx_v_setting) {
case 0:
/* … */
break;
case 1:
+1923: ok = questdb_oidc_builder_client_id(
__pyx_v_ok = questdb_oidc_builder_client_id(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1924: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1924, __pyx_L1_error)
+1925: elif setting == 1:
break;
case 2:
+1926: ok = questdb_oidc_builder_scope(
__pyx_v_ok = questdb_oidc_builder_scope(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1927: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1927, __pyx_L1_error)
+1928: elif setting == 2:
break;
case 3:
+1929: ok = questdb_oidc_builder_audience(
__pyx_v_ok = questdb_oidc_builder_audience(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1930: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1930, __pyx_L1_error)
+1931: elif setting == 3:
break;
case 4:
+1932: ok = questdb_oidc_builder_issuer(
__pyx_v_ok = questdb_oidc_builder_issuer(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1933: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1933, __pyx_L1_error)
+1934: elif setting == 4:
break;
case 5:
+1935: ok = questdb_oidc_builder_token_endpoint(
__pyx_v_ok = questdb_oidc_builder_token_endpoint(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1936: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1936, __pyx_L1_error)
+1937: elif setting == 5:
break;
default:
+1938: ok = questdb_oidc_builder_device_authorization_endpoint(
__pyx_v_ok = questdb_oidc_builder_device_authorization_endpoint(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));
+1939: builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
__pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1939, __pyx_L1_error)
1940: else:
+1941: raise AssertionError(
__pyx_t_6 = NULL;
+1942: f'_oidc_builder_set_string: unknown setting {setting!r}')
__pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_v_setting, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_builder_set_string_unknown, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 1941, __pyx_L1_error) break; }
+1943: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+1944: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 1944, __pyx_L1_error)
1945:
1946:
+1947: cdef class _OidcNativeHandle:
struct __pyx_obj_7questdb_7_client__OidcNativeHandle {
PyObject_HEAD
struct questdb_oidc_auth *raw;
size_t pid;
};
1948: """Registry-owned leaf that releases one native auth handle."""
1949:
1950: cdef questdb_oidc_auth* raw
1951: cdef size_t pid
1952:
+1953: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17_OidcNativeHandle_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_17_OidcNativeHandle_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_17_OidcNativeHandle___cinit__(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_17_OidcNativeHandle___cinit__(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._OidcNativeHandle.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+1954: self.raw = NULL
__pyx_v_self->raw = NULL;
+1955: self.pid = os.getpid()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_5 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1955, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->pid = __pyx_t_5;
1956:
+1957: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_17_OidcNativeHandle_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_17_OidcNativeHandle_3__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_17_OidcNativeHandle_2__dealloc__(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_17_OidcNativeHandle_2__dealloc__(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_self) {
struct questdb_oidc_auth *__pyx_v_raw;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_WriteUnraisable("questdb._client._OidcNativeHandle.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+1958: cdef questdb_oidc_auth* raw = self.raw
__pyx_t_1 = __pyx_v_self->raw; __pyx_v_raw = __pyx_t_1;
+1959: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+1960: if raw == NULL:
__pyx_t_2 = (__pyx_v_raw == NULL);
if (__pyx_t_2) {
/* … */
}
+1961: return
{
}
goto __pyx_L0;
+1962: self.raw = NULL
__pyx_v_self->raw = NULL;
1963: # The copy in a child may contain locks owned by vanished parent
1964: # threads. Discard this Python reference, never detach or free native.
+1965: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L8_try_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+1966: if self.pid != os.getpid():
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_self->pid); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_6, __pyx_t_7, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1966, __pyx_L4_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_2) { /* … */ }
+1967: return
{
}
goto __pyx_L8_try_return;
+1968: except BaseException:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0);
+1969: return
{
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
1970: # Reaching here means the provider that owned this handle has been
1971: # collected, so nothing in Python can close it any more -- but a
1972: # cancelled token-acquisition worker, which Rust starts detached and
1973: # never joins, can still hold a clone of the same shared state and
1974: # reach a token-store write. Detach while Python is alive so later
1975: # persistence warnings cannot target a collected provider. The atexit
1976: # registry snapshot cannot see this handle after the weakref callback
1977: # drops it, but the C gate still protects any admitted callback.
1978: #
1979: # Nowait detach suppresses future native admissions, but is not itself
1980: # a finalization fence. The process-wide C gate also counts callbacks
1981: # from collected providers and drains them in the atexit hook.
1982: #
1983: # The non-waiting form, because this runs wherever a collection fired
1984: # and so cannot know what this thread already holds. The waiting form
1985: # blocks on the callback gate, and the callback -- once it has the
1986: # gate -- logs through `logging`, which takes the handler's lock. A
1987: # collection triggered by an allocation inside that handler's `emit`
1988: # runs this finalizer on a thread already owning that lock, so waiting
1989: # parks both threads permanently: this one for the gate, the callback
1990: # for the handler lock. Releasing the GIL below does not prevent it,
1991: # because the GIL is not the lock in contention -- which is exactly
1992: # what the waiting form's own contract now warns about.
1993: #
1994: # The GIL is still released: a diagnostic already inside the gate is
1995: # blocked acquiring it, and even the bounded drain should let that
1996: # callback finish rather than spin against it.
1997: #
1998: # Once finalization begins the process-wide gate is closed and drained;
1999: # no admitted OIDC callback can still attempt GIL entry.
+2000: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2001: if not qdb_py_is_finalizing():
__pyx_t_2 = (!qdb_py_is_finalizing());
if (__pyx_t_2) {
/* … */
}
+2002: questdb_oidc_auth_detach_diagnostics_nowait(raw)
questdb_oidc_auth_detach_diagnostics_nowait(__pyx_v_raw);
+2003: questdb_oidc_auth_free(raw)
questdb_oidc_auth_free(__pyx_v_raw);
+2004: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
2005:
2006:
+2007: cdef class OidcDeviceAuth:
struct __pyx_obj_7questdb_7_client_OidcDeviceAuth {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *__pyx_vtab;
PyObject *__weakref__;
struct __pyx_obj_7questdb_7_client__OidcNativeHandle *_native;
struct questdb_oidc_auth *_raw;
size_t _provider_id;
size_t _pid;
PyObject *_renderer;
int _closed;
PyObject *_interrupt;
PyObject *_prompt_renderer;
PyObject *_sign_in_lock;
int _opens_browser;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth {
void (*_require_same_process)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *);
void (*_require_open)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *);
void (*_finish_builder)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *, struct questdb_oidc_builder *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
};
static struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *__pyx_vtabptr_7questdb_7_client_OidcDeviceAuth;
2008: """Native-backed OAuth 2.0 device-flow token provider for QuestDB.
2009:
2010: An instance inherited across ``fork()`` cannot be used or closed in the
2011: child: its native locks may belong to parent threads that no longer exist.
2012: Once the parent has constructed any ``OidcDeviceAuth`` -- constructing one
2013: is enough, it need not have been used -- creating a new provider in a
2014: forked child raises :class:`~questdb.auth.OidcConfigError` as well. Use
2015: ``fork()`` followed by ``exec()`` (for example the ``spawn`` or
2016: ``forkserver`` :mod:`multiprocessing` start methods) to start fresh, or
2017: construct the provider only in the child. See :ref:`auth-fork`.
2018:
2019: Connections attached with ``oidc_auth=`` take tokens from the native
2020: provider, never from a Python :meth:`token`, so a subclass that overrides
2021: :meth:`token` is refused there with :class:`TypeError`.
2022: """
2023:
2024: cdef object __weakref__
2025: # The owner of the native handle. Holding it here -- rather than letting
2026: # `_OIDC_NATIVE_HANDLES` be the sole owner -- is what makes `_raw` safe:
2027: # `_raw` cannot outlive `self`, because the handle is released only when
2028: # this reference goes. That matters for a provider caught in a cycle, which
2029: # is the documented shape (a renderer holding its own provider, or a
2030: # subclass instance): the cyclic collector runs weakref callbacks BEFORE
2031: # finalizers, so a registry-owned handle was freed by the callback and then
2032: # dereferenced by a `__del__` in the same cycle -- a use-after-free that
2033: # segfaulted the interpreter with no traceback.
2034: #
2035: # Cycle collection is unaffected. `_OidcNativeHandle` has no object fields,
2036: # so Cython gives it no `tp_traverse` and CPython does not track it: it can
2037: # be referenced by a cycle but never part of one, and it is released by this
2038: # class's `tp_clear`, which runs after every finalizer. `OidcDeviceAuth`
2039: # deliberately carries no `@cython.no_gc_clear` for the same reason.
2040: cdef _OidcNativeHandle _native
2041: # Cached from `_native.raw` so the hot calls need no attribute lookup; the
2042: # reference above is the ownership.
2043: cdef questdb_oidc_auth* _raw
2044: cdef size_t _provider_id
2045: cdef size_t _pid
2046: cdef object _renderer
2047: cdef bint _closed
2048: # A KeyboardInterrupt/SystemExit delivered inside a renderer callback,
2049: # parked for the sole active sign_in() to re-raise once native returns.
2050: cdef object _interrupt
2051: # The renderer that was shown a device-code prompt in the running
2052: # sign_in() and has not yet received its SUCCESS/FAILURE event. A sign-in
2053: # that ends without one (cancel, close, Ctrl-C) reports the end to it, so
2054: # its output does not stay on "waiting" with a live link.
2055: cdef object _prompt_renderer
2056: # Native serializes acquisition, but a second native call can regain the
2057: # GIL before the callback-owning call and steal `_interrupt`. Reject it
2058: # before releasing the GIL so callback exceptions remain invocation-owned.
2059: cdef object _sign_in_lock
2060: # The resolved `open_browser` setting handed to native: whether a sign-in
2061: # can still reach the user once interpreter shutdown detached the renderer.
2062: cdef bint _opens_browser
2063:
+2064: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth___cinit__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_14OidcDeviceAuth___cinit__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+2065: self._pid = os.getpid()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_5 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 2065, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->_pid = __pyx_t_5;
+2066: self._native = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_native); __Pyx_DECREF_SET(__pyx_v_self->_native, ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)Py_None));
+2067: self._raw = NULL
__pyx_v_self->_raw = NULL;
+2068: self._provider_id = 0
__pyx_v_self->_provider_id = 0;
+2069: self._renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_renderer); __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2070: self._closed = False
__pyx_v_self->_closed = 0;
+2071: self._interrupt = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_interrupt); __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2072: self._prompt_renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_prompt_renderer); __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
+2073: self._sign_in_lock = threading.Lock()
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Lock); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_sign_in_lock); __Pyx_DECREF_SET(__pyx_v_self->_sign_in_lock, __pyx_t_1); __pyx_t_1 = 0;
+2074: self._opens_browser = False
__pyx_v_self->_opens_browser = 0;
2075:
+2076: cdef void _require_same_process(self) except *:
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__require_same_process(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
PyObject *__pyx_v_message = NULL;
PyObject *__pyx_v_errors = NULL;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._require_same_process", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_errors);
__Pyx_RefNannyFinishContext();
}
+2077: if self._pid != os.getpid():
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_pid); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_1, __pyx_t_2, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 2077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_7) { /* … */ }
+2078: message = ('This OIDC provider was inherited across fork and '
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_This_OIDC_provider_was_inherited);
__pyx_v_message = __pyx_mstate_global->__pyx_kp_u_This_OIDC_provider_was_inherited;
2079: 'cannot be reused; exec a fresh process before '
2080: 'creating a new provider.')
2081: # Never import in a forked child: another parent thread may have
2082: # been importing this module while fork ran. Use the typed class
2083: # when already available, and the same ConfigError code otherwise.
+2084: errors = _oidc_errors_module_if_ready()
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_errors = __pyx_t_2; __pyx_t_2 = 0;
+2085: if errors is not None:
__pyx_t_7 = (__pyx_v_errors != Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+2086: raise errors.OidcConfigError(message)
__pyx_t_1 = __pyx_v_errors;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_message};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcConfigError, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2086, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 2086, __pyx_L1_error)
+2087: raise QuestDBError(QuestDBErrorCode.ConfigError, message)
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2087, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2087, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2087, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_4, __pyx_v_message};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2087, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 2087, __pyx_L1_error)
2088:
+2089: cdef void _require_open(self) except *:
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__require_open(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._require_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+2090: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2090, __pyx_L1_error)
+2091: if self._raw == NULL:
__pyx_t_1 = (__pyx_v_self->_raw == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
2092: # Never __init__'d (e.g. cls.__new__ without construction) -- not
2093: # the same state as closed, which is reported below.
+2094: raise RuntimeError('OidcDeviceAuth is not initialized')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_not_initialize};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2094, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(1, 2094, __pyx_L1_error)
+2095: if self._closed:
if (__pyx_v_self->_closed) {
/* … */
}
+2096: _raise_oidc_auth_closed()
__pyx_t_5 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 2096, __pyx_L1_error)
2097:
+2098: def __init__(
/* Python wrapper */ static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_3__init__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL_TPNEW PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_2__init__, "Configure a provider from explicit IdP endpoints.\n\n ``client_id``, ``device_authorization_endpoint`` and ``token_endpoint``\n are required. The two endpoints are keyword-only so their order cannot\n be accidentally reversed. Use :meth:`from_questdb` to discover them\n from a QuestDB server instead.\n\n ``groups_in_token`` selects the token kind: ``False`` (the default)\n returns the access token; ``True`` selects the ID token.\n It does not modify ``scope``; include ``openid`` explicitly when the\n identity provider requires it to issue an ID token. Unlike\n :meth:`from_questdb` there is no server-advertised default to inherit\n here, so the kind is always chosen explicitly and defaults to ``False``.\n\n Because this is an extension type, ``help()`` and the rendered API\n reference cannot introspect the signature, so every parameter is\n documented here:\n\n * ``scope`` \342\200\224 the non-empty OAuth scope string sent verbatim on the\n initial request. Refresh requests omit it so the identity provider\n preserves the scope originally granted, as required by RFC 6749\n section 6.\n * ``audience`` / ``issuer`` \342\200\224 optional, but must be non-empty when\n provided. ``issuer`` additionally pins the credential endpoints:\n here both explicit endpoints must be on the issuer\047s origin (scheme,\n host and port). Some providers host their endpoints on a different\n origin from their issuer (Google: issuer\n ``https://accounts.google.com``, endpoints on\n ``https://oauth2.googleapis.com``); configure those without\n ``issuer``.\n * ``device_authorization_endpoint`` and ``token_endpoint`` must share\n one origin; construction raises\n :class:`~questdb.auth.OidcConfigError` otherwise.\n * ``insecure`` \342\200\224 permits plaintext HTTP for t""he **QuestDB discovery\n request only**. The identity provider is always held to HTTPS (or\n loopback); this flag never relaxes that.\n * ``ca_bundle`` \342\200\224 path (``str``, ``bytes`` or any ``os.PathLike``;\n ``~`` is expanded and the path made absolute, as for\n :class:`~questdb.auth.FileTokenStore`) to a PEM bundle used when\n contacting QuestDB and the IdP, instead of the default roots: the Mozilla root bundle\n compiled into the client together with the operating system\047s trust\n store. An OS trust store that reports a load error (for example\n ``SSL_CERT_DIR`` naming a missing directory) fails construction;\n setting ``ca_bundle`` avoids consulting it.\n * ``open_browser`` \342\200\224 whether :meth:`sign_in` launches a browser at the\n verification URL. ``None`` (the default) opens one, except inside a\n Jupyter kernel, where the kernel may be on a different machine from\n the person reading the notebook and the browser would open where\n nobody is looking. Pass ``True`` to open one anyway \342\200\224 correct for a\n *local* ``jupyter lab``, where that guess is wrong \342\200\224 or ``False`` to\n never open one.\n * ``interactive`` \342\200\224 whether :meth:`sign_in` may prompt at all.\n ``False`` makes it fail immediately with\n :class:`~questdb.auth.OidcInteractionRequired` rather than print a\n device code nobody will read and poll until it expires, which is what\n a headless service or a CI job wants. ``None`` (the default) prompts,\n except in a notebook executed headlessly (papermill / ``nbclient`` /\n ``nbconvert --execute``), whose kernel reports that no human can\n answer. There is no terminal detection: a missing TTY is not evidence\n of a missing human.\n * ``qr`` \342\200\224 also render the verification ""URL as a QR code, for signing in\n from a phone. The terminal QR needs ``qrcode``; the notebook PNG QR\n additionally needs Pillow (install ``qrcode[pil]``). Ignored when a\n custom ``renderer`` is supplied.\n * ``renderer`` \342\200\224 a :class:`~questdb.auth.Renderer` presenting the prompt.\n Its callbacks receive native display-normalised but still untrusted\n identity-provider text; see that class for sink-encoding, actionable-\n URL and re-entrancy rules.\n * ``default_interval`` \342\200\224 seconds between device-code polls when the\n identity provider does not specify one (default 5, minimum 5,\n maximum 1800, the longest a device code may live). Native clamps the\n value to that range, so a smaller number would be accepted here and\n silently become 5; it is rejected instead. A server-supplied\n interval, and any ``Retry-After``, take precedence.\n * ``timeout`` \342\200\224 the per-HTTP-request timeout, in seconds or as a\n :class:`datetime.timedelta` (default 30, maximum 120 seconds). This\n is **not** a deadline for the sign-in as a whole, which is bounded\n by the device code\047s own lifetime. It also bounds\n how long an attached transport waits for a credential: a flush or\n connect that needs a fresh token resolves it before its first\n request, and that can take one refresh (up to ``timeout``) or wait\n behind a refresh already running on another thread for up to six\n times ``timeout``. The sender\047s ``request_timeout``,\n ``retry_timeout`` and reconnect budget do not cap that wait.\n Call :meth:`sign_in` before starting the sender to avoid the first,\n longest acquisition.\n * ``token_store`` \342\200\224 a :class:`~questdb.auth.FileTokenStore` enabling\n plaintext on-disk persistence. Credentials stay in memory ""when this is\n ``None``.\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_14OidcDeviceAuth_2__init__; #endif static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_3__init__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL_TPNEW PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_client_id = 0; PyObject *__pyx_v_device_authorization_endpoint = 0; PyObject *__pyx_v_token_endpoint = 0; PyObject *__pyx_v_scope = 0; PyObject *__pyx_v_groups_in_token = 0; PyObject *__pyx_v_audience = 0; PyObject *__pyx_v_issuer = 0; PyObject *__pyx_v_insecure = 0; PyObject *__pyx_v_ca_bundle = 0; PyObject *__pyx_v_open_browser = 0; PyObject *__pyx_v_interactive = 0; PyObject *__pyx_v_qr = 0; PyObject *__pyx_v_renderer = 0; PyObject *__pyx_v_default_interval = 0; PyObject *__pyx_v_timeout = 0; PyObject *__pyx_v_token_store = 0; #if !CYTHON_VECTORCALL_TPNEW CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); #if !CYTHON_VECTORCALL_TPNEW #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_client_id,&__pyx_mstate_global->__pyx_n_u_device_authorization_endpoint,&__pyx_mstate_global->__pyx_n_u_token_endpoint,&__pyx_mstate_global->__pyx_n_u_scope,&__pyx_mstate_global->__pyx_n_u_groups_in_token,&__pyx_mstate_global->__pyx_n_u_audience,&__pyx_mstate_global->__pyx_n_u_issuer,&__pyx_mstate_global->__pyx_n_u_insecure,&__pyx_mstate_global->__pyx_n_u_ca_bundle,&__pyx_mstate_global->__pyx_n_u_open_browser,&__pyx_mstate_global->__pyx_n_u_interactive,&__pyx_mstate_global->__pyx_n_u_qr,&__pyx_mstate_global->__pyx_n_u_renderer,&__pyx_mstate_global->__pyx_n_u_default_interval,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_token_store,0}; PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2098, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2098, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(1, 2098, __pyx_L3_error) if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_openid)); /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_7questdb_7_client_14OidcDeviceAuth_2__init__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, PyObject *__pyx_v_client_id, PyObject *__pyx_v_device_authorization_endpoint, PyObject *__pyx_v_token_endpoint, PyObject *__pyx_v_scope, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_audience, PyObject *__pyx_v_issuer, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) { struct questdb_oidc_builder *__pyx_v_builder; int __pyx_r; /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
2099: self,
2100: client_id,
2101: *,
2102: device_authorization_endpoint,
2103: token_endpoint,
2104: scope='openid',
+2105: groups_in_token=False,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_False));
+2106: audience=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
+2107: issuer=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
+2108: insecure=False,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_False));
+2109: ca_bundle=None,
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
+2110: open_browser=None,
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
+2111: interactive=None,
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
+2112: qr=False,
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_False));
+2113: renderer=None,
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5)); if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30));
2114: default_interval=5,
2115: timeout=30,
+2116: token_store=None):
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, i); __PYX_ERR(1, 2098, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("__init__", *(__pyx_pyargnames[i - 0])); __PYX_ERR(1, 2098, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("__init__", __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint); __PYX_ERR(1, 2098, __pyx_L3_error) } __pyx_v_client_id = values[0]; __pyx_v_device_authorization_endpoint = values[1]; __pyx_v_token_endpoint = values[2]; __pyx_v_scope = values[3]; __pyx_v_groups_in_token = values[4]; __pyx_v_audience = values[5]; __pyx_v_issuer = values[6]; __pyx_v_insecure = values[7]; __pyx_v_ca_bundle = values[8]; __pyx_v_open_browser = values[9]; __pyx_v_interactive = values[10]; __pyx_v_qr = values[11]; __pyx_v_renderer = values[12]; __pyx_v_default_interval = values[13]; __pyx_v_timeout = values[14]; __pyx_v_token_store = values[15]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2098, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_2__init__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self), __pyx_v_client_id, __pyx_v_device_authorization_endpoint, __pyx_v_token_endpoint, __pyx_v_scope, __pyx_v_groups_in_token, __pyx_v_audience, __pyx_v_issuer, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store);
2117: """Configure a provider from explicit IdP endpoints.
2118:
2119: ``client_id``, ``device_authorization_endpoint`` and ``token_endpoint``
2120: are required. The two endpoints are keyword-only so their order cannot
2121: be accidentally reversed. Use :meth:`from_questdb` to discover them
2122: from a QuestDB server instead.
2123:
2124: ``groups_in_token`` selects the token kind: ``False`` (the default)
2125: returns the access token; ``True`` selects the ID token.
2126: It does not modify ``scope``; include ``openid`` explicitly when the
2127: identity provider requires it to issue an ID token. Unlike
2128: :meth:`from_questdb` there is no server-advertised default to inherit
2129: here, so the kind is always chosen explicitly and defaults to ``False``.
2130:
2131: Because this is an extension type, ``help()`` and the rendered API
2132: reference cannot introspect the signature, so every parameter is
2133: documented here:
2134:
2135: * ``scope`` — the non-empty OAuth scope string sent verbatim on the
2136: initial request. Refresh requests omit it so the identity provider
2137: preserves the scope originally granted, as required by RFC 6749
2138: section 6.
2139: * ``audience`` / ``issuer`` — optional, but must be non-empty when
2140: provided. ``issuer`` additionally pins the credential endpoints:
2141: here both explicit endpoints must be on the issuer's origin (scheme,
2142: host and port). Some providers host their endpoints on a different
2143: origin from their issuer (Google: issuer
2144: ``https://accounts.google.com``, endpoints on
2145: ``https://oauth2.googleapis.com``); configure those without
2146: ``issuer``.
2147: * ``device_authorization_endpoint`` and ``token_endpoint`` must share
2148: one origin; construction raises
2149: :class:`~questdb.auth.OidcConfigError` otherwise.
2150: * ``insecure`` — permits plaintext HTTP for the **QuestDB discovery
2151: request only**. The identity provider is always held to HTTPS (or
2152: loopback); this flag never relaxes that.
2153: * ``ca_bundle`` — path (``str``, ``bytes`` or any ``os.PathLike``;
2154: ``~`` is expanded and the path made absolute, as for
2155: :class:`~questdb.auth.FileTokenStore`) to a PEM bundle used when
2156: contacting QuestDB and the IdP, instead of the default roots: the Mozilla root bundle
2157: compiled into the client together with the operating system's trust
2158: store. An OS trust store that reports a load error (for example
2159: ``SSL_CERT_DIR`` naming a missing directory) fails construction;
2160: setting ``ca_bundle`` avoids consulting it.
2161: * ``open_browser`` — whether :meth:`sign_in` launches a browser at the
2162: verification URL. ``None`` (the default) opens one, except inside a
2163: Jupyter kernel, where the kernel may be on a different machine from
2164: the person reading the notebook and the browser would open where
2165: nobody is looking. Pass ``True`` to open one anyway — correct for a
2166: *local* ``jupyter lab``, where that guess is wrong — or ``False`` to
2167: never open one.
2168: * ``interactive`` — whether :meth:`sign_in` may prompt at all.
2169: ``False`` makes it fail immediately with
2170: :class:`~questdb.auth.OidcInteractionRequired` rather than print a
2171: device code nobody will read and poll until it expires, which is what
2172: a headless service or a CI job wants. ``None`` (the default) prompts,
2173: except in a notebook executed headlessly (papermill / ``nbclient`` /
2174: ``nbconvert --execute``), whose kernel reports that no human can
2175: answer. There is no terminal detection: a missing TTY is not evidence
2176: of a missing human.
2177: * ``qr`` — also render the verification URL as a QR code, for signing in
2178: from a phone. The terminal QR needs ``qrcode``; the notebook PNG QR
2179: additionally needs Pillow (install ``qrcode[pil]``). Ignored when a
2180: custom ``renderer`` is supplied.
2181: * ``renderer`` — a :class:`~questdb.auth.Renderer` presenting the prompt.
2182: Its callbacks receive native display-normalised but still untrusted
2183: identity-provider text; see that class for sink-encoding, actionable-
2184: URL and re-entrancy rules.
2185: * ``default_interval`` — seconds between device-code polls when the
2186: identity provider does not specify one (default 5, minimum 5,
2187: maximum 1800, the longest a device code may live). Native clamps the
2188: value to that range, so a smaller number would be accepted here and
2189: silently become 5; it is rejected instead. A server-supplied
2190: interval, and any ``Retry-After``, take precedence.
2191: * ``timeout`` — the per-HTTP-request timeout, in seconds or as a
2192: :class:`datetime.timedelta` (default 30, maximum 120 seconds). This
2193: is **not** a deadline for the sign-in as a whole, which is bounded
2194: by the device code's own lifetime. It also bounds
2195: how long an attached transport waits for a credential: a flush or
2196: connect that needs a fresh token resolves it before its first
2197: request, and that can take one refresh (up to ``timeout``) or wait
2198: behind a refresh already running on another thread for up to six
2199: times ``timeout``. The sender's ``request_timeout``,
2200: ``retry_timeout`` and reconnect budget do not cap that wait.
2201: Call :meth:`sign_in` before starting the sender to avoid the first,
2202: longest acquisition.
2203: * ``token_store`` — a :class:`~questdb.auth.FileTokenStore` enabling
2204: plaintext on-disk persistence. Credentials stay in memory when this is
2205: ``None``.
2206: """
2207: cdef questdb_oidc_builder* builder
+2208: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2208, __pyx_L1_error)
+2209: _oidc_validate_bool(groups_in_token, 'groups_in_token', False)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_groups_in_token, __pyx_mstate_global->__pyx_n_u_groups_in_token, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2209, __pyx_L1_error)
+2210: _oidc_validate_bool(insecure, 'insecure', False)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_insecure, __pyx_mstate_global->__pyx_n_u_insecure, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2210, __pyx_L1_error)
+2211: _oidc_validate_bool(open_browser, 'open_browser', True)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_open_browser, __pyx_mstate_global->__pyx_n_u_open_browser, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2211, __pyx_L1_error)
+2212: _oidc_validate_bool(interactive, 'interactive', True)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_interactive, __pyx_mstate_global->__pyx_n_u_interactive, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2212, __pyx_L1_error)
+2213: _oidc_validate_bool(qr, 'qr', False)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_qr, __pyx_mstate_global->__pyx_n_u_qr, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2213, __pyx_L1_error)
+2214: builder = questdb_oidc_builder_new()
__pyx_v_builder = questdb_oidc_builder_new();
+2215: if builder == NULL:
__pyx_t_1 = (__pyx_v_builder == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+2216: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(1, 2216, __pyx_L1_error)
+2217: try:
/*try:*/ {
2218: # These three are required positionals, so validate them as such
2219: # here rather than letting the optional-string path drop a None and
2220: # leave the field unset. Native then reports the field as missing
2221: # from QuestDB's /settings and tells the caller to pass it
2222: # explicitly -- advice that makes no sense for a constructor that
2223: # never contacts /settings, and names a builder method this API does
2224: # not have. `from_questdb` keeps the optional path, where they are
2225: # genuine overrides.
+2226: _oidc_required_utf8(client_id, 'client_id')
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2226, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2227: _oidc_required_utf8(token_endpoint, 'token_endpoint')
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2227, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2228: _oidc_required_utf8(
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2228, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
2229: device_authorization_endpoint, 'device_authorization_endpoint')
+2230: _oidc_builder_set_string(builder, client_id, 'client_id', 0)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2230, __pyx_L5_error)
+2231: _oidc_builder_set_string(builder, scope, 'scope', 1)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_scope, __pyx_mstate_global->__pyx_n_u_scope, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2231, __pyx_L5_error)
+2232: _oidc_builder_set_string(builder, audience, 'audience', 2)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_audience, __pyx_mstate_global->__pyx_n_u_audience, 2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2232, __pyx_L5_error)
+2233: _oidc_builder_set_string(builder, issuer, 'issuer', 3)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_issuer, __pyx_mstate_global->__pyx_n_u_issuer, 3); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2233, __pyx_L5_error)
+2234: _oidc_builder_set_string(builder, token_endpoint, 'token_endpoint', 4)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint, 4); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2234, __pyx_L5_error)
+2235: _oidc_builder_set_string(
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, 5); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2235, __pyx_L5_error)
2236: builder, device_authorization_endpoint,
2237: 'device_authorization_endpoint', 5)
+2238: self._finish_builder(
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_finish_builder(__pyx_v_self, __pyx_v_builder, __pyx_v_groups_in_token, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2238, __pyx_L5_error)
}
2239: builder,
2240: groups_in_token=groups_in_token,
2241: insecure=insecure,
2242: ca_bundle=ca_bundle,
2243: open_browser=open_browser,
2244: interactive=interactive,
2245: qr=qr,
2246: renderer=renderer,
2247: default_interval=default_interval,
2248: timeout=timeout,
2249: token_store=token_store)
2250: finally:
+2251: questdb_oidc_builder_free(builder)
/*finally:*/ {
/*normal exit:*/{
questdb_oidc_builder_free(__pyx_v_builder);
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
questdb_oidc_builder_free(__pyx_v_builder);
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
}
__pyx_L6:;
}
2252:
+2253: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_4from_questdb, "Discover OIDC configuration from a QuestDB server\047s ``/settings``.\n\n Explicit keyword arguments override discovery. ``groups_in_token``\n defaults to ``None``, meaning \"inherit whatever the server advertises\"\n (``acl.oidc.groups.encoded.in.token``); pass ``True`` or ``False`` to\n force the ID-token or access-token kind regardless of the server. This\n differs from the direct constructor, whose ``groups_in_token`` defaults\n to ``False``.\n\n ``url`` is the QuestDB server to discover from; ``client_id``,\n ``scope``, ``audience``, ``token_endpoint`` and\n ``device_authorization_endpoint`` default to ``None``, meaning \"take\n the server\047s value\", and any you pass override it. ``issuer`` is an\n optional, explicit out-of-band trust pin, never inherited from the\n server; supply it when either endpoint must be discovered from the\n identity provider. ``client_id``,\n ``scope``, ``audience``, ``issuer``, ``token_endpoint`` and\n ``device_authorization_endpoint`` must be non-empty when provided.\n The remaining parameters \342\200\224 ``insecure``, ``ca_bundle``, ``open_browser``,\n ``interactive``, ``qr``, ``renderer``, ``default_interval``,\n ``timeout`` and ``token_store`` \342\200\224 are not discovered at all and behave\n exactly as documented on :meth:`__init__`; see there for each.\n\n Note this call performs blocking network I/O: it fetches\n ``/settings``, and may follow up with the identity provider\047s own\n discovery document to confirm the advertised endpoints. Each request\n is bounded by ``timeout``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_5from_questdb = {"from_questdb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_4from_questdb}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_url = 0; PyObject *__pyx_v_client_id = 0; PyObject *__pyx_v_scope = 0; PyObject *__pyx_v_audience = 0; PyObject *__pyx_v_groups_in_token = 0; PyObject *__pyx_v_issuer = 0; PyObject *__pyx_v_token_endpoint = 0; PyObject *__pyx_v_device_authorization_endpoint = 0; PyObject *__pyx_v_insecure = 0; PyObject *__pyx_v_ca_bundle = 0; PyObject *__pyx_v_open_browser = 0; PyObject *__pyx_v_interactive = 0; PyObject *__pyx_v_qr = 0; PyObject *__pyx_v_renderer = 0; PyObject *__pyx_v_default_interval = 0; PyObject *__pyx_v_timeout = 0; PyObject *__pyx_v_token_store = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_questdb (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_url,&__pyx_mstate_global->__pyx_n_u_client_id,&__pyx_mstate_global->__pyx_n_u_scope,&__pyx_mstate_global->__pyx_n_u_audience,&__pyx_mstate_global->__pyx_n_u_groups_in_token,&__pyx_mstate_global->__pyx_n_u_issuer,&__pyx_mstate_global->__pyx_n_u_token_endpoint,&__pyx_mstate_global->__pyx_n_u_device_authorization_endpoint,&__pyx_mstate_global->__pyx_n_u_insecure,&__pyx_mstate_global->__pyx_n_u_ca_bundle,&__pyx_mstate_global->__pyx_n_u_open_browser,&__pyx_mstate_global->__pyx_n_u_interactive,&__pyx_mstate_global->__pyx_n_u_qr,&__pyx_mstate_global->__pyx_n_u_renderer,&__pyx_mstate_global->__pyx_n_u_default_interval,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_token_store,0}; PyObject* values[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2253, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2253, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_questdb", 0) < (0)) __PYX_ERR(1, 2253, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_4from_questdb(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_url, PyObject *__pyx_v_client_id, PyObject *__pyx_v_scope, PyObject *__pyx_v_audience, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_issuer, PyObject *__pyx_v_token_endpoint, PyObject *__pyx_v_device_authorization_endpoint, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) { PyObject *__pyx_v_encoded_url = 0; questdb_error *__pyx_v_err; struct questdb_oidc_builder *__pyx_v_builder; struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_auth = 0; PyThreadState *__pyx_v_gs; char const *__pyx_v_encoded_url_ptr; size_t __pyx_v_encoded_url_len; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.from_questdb", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_encoded_url); __Pyx_XDECREF((PyObject *)__pyx_v_auth); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(16); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_5from_questdb, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_from_questdb, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb, __pyx_t_17) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb, __pyx_t_18) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2254: def from_questdb(
2255: cls,
2256: url,
2257: *,
+2258: client_id=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_client_id, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2259: scope=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_scope, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2260: audience=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_audience, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2261: groups_in_token=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_groups_in_token, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2262: issuer=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_issuer, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2263: token_endpoint=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_endpoint, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2264: device_authorization_endpoint=None,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2265: insecure=False,
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_False)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_False)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_insecure, Py_False) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2266: ca_bundle=None,
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ca_bundle, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2267: open_browser=None,
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_open_browser, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2268: interactive=None,
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_interactive, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2269: qr=False,
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_qr, Py_False) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2270: renderer=None,
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5)); if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5)); if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30)); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_renderer, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_default_interval, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_timeout, __pyx_mstate_global->__pyx_int_30) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
2271: default_interval=5,
2272: timeout=30,
+2273: token_store=None):
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_questdb", 1, 1, 1, i); __PYX_ERR(1, 2253, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2253, __pyx_L3_error) /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_url = values[0]; __pyx_v_client_id = values[1]; __pyx_v_scope = values[2]; __pyx_v_audience = values[3]; __pyx_v_groups_in_token = values[4]; __pyx_v_issuer = values[5]; __pyx_v_token_endpoint = values[6]; __pyx_v_device_authorization_endpoint = values[7]; __pyx_v_insecure = values[8]; __pyx_v_ca_bundle = values[9]; __pyx_v_open_browser = values[10]; __pyx_v_interactive = values[11]; __pyx_v_qr = values[12]; __pyx_v_renderer = values[13]; __pyx_v_default_interval = values[14]; __pyx_v_timeout = values[15]; __pyx_v_token_store = values[16]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_questdb", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2253, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.from_questdb", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_4from_questdb(((PyTypeObject*)__pyx_v_cls), __pyx_v_url, __pyx_v_client_id, __pyx_v_scope, __pyx_v_audience, __pyx_v_groups_in_token, __pyx_v_issuer, __pyx_v_token_endpoint, __pyx_v_device_authorization_endpoint, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store); /* … */ if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_store, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
2274: """Discover OIDC configuration from a QuestDB server's ``/settings``.
2275:
2276: Explicit keyword arguments override discovery. ``groups_in_token``
2277: defaults to ``None``, meaning "inherit whatever the server advertises"
2278: (``acl.oidc.groups.encoded.in.token``); pass ``True`` or ``False`` to
2279: force the ID-token or access-token kind regardless of the server. This
2280: differs from the direct constructor, whose ``groups_in_token`` defaults
2281: to ``False``.
2282:
2283: ``url`` is the QuestDB server to discover from; ``client_id``,
2284: ``scope``, ``audience``, ``token_endpoint`` and
2285: ``device_authorization_endpoint`` default to ``None``, meaning "take
2286: the server's value", and any you pass override it. ``issuer`` is an
2287: optional, explicit out-of-band trust pin, never inherited from the
2288: server; supply it when either endpoint must be discovered from the
2289: identity provider. ``client_id``,
2290: ``scope``, ``audience``, ``issuer``, ``token_endpoint`` and
2291: ``device_authorization_endpoint`` must be non-empty when provided.
2292: The remaining parameters — ``insecure``, ``ca_bundle``, ``open_browser``,
2293: ``interactive``, ``qr``, ``renderer``, ``default_interval``,
2294: ``timeout`` and ``token_store`` — are not discovered at all and behave
2295: exactly as documented on :meth:`__init__`; see there for each.
2296:
2297: Note this call performs blocking network I/O: it fetches
2298: ``/settings``, and may follow up with the identity provider's own
2299: discovery document to confirm the advertised endpoints. Each request
2300: is bounded by ``timeout``.
2301: """
2302: cdef bytes encoded_url
+2303: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2304: cdef questdb_oidc_builder* builder
2305: cdef OidcDeviceAuth auth
+2306: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
2307: cdef const char* encoded_url_ptr
2308: cdef size_t encoded_url_len
2309:
+2310: _oidc_validate_bool(groups_in_token, 'groups_in_token', True)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_groups_in_token, __pyx_mstate_global->__pyx_n_u_groups_in_token, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2310, __pyx_L1_error)
+2311: _oidc_validate_bool(insecure, 'insecure', False)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_insecure, __pyx_mstate_global->__pyx_n_u_insecure, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2311, __pyx_L1_error)
+2312: _oidc_validate_bool(open_browser, 'open_browser', True)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_open_browser, __pyx_mstate_global->__pyx_n_u_open_browser, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2312, __pyx_L1_error)
+2313: _oidc_validate_bool(interactive, 'interactive', True)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_interactive, __pyx_mstate_global->__pyx_n_u_interactive, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2313, __pyx_L1_error)
+2314: _oidc_validate_bool(qr, 'qr', False)
__pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_qr, __pyx_mstate_global->__pyx_n_u_qr, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2314, __pyx_L1_error)
+2315: encoded_url = _oidc_required_utf8(url, 'url')
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_url, __pyx_mstate_global->__pyx_n_u_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_encoded_url = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+2316: auth = cls.__new__(cls)
if (unlikely(((PyObject *)__pyx_v_cls) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
__PYX_ERR(1, 2316, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth)))) __PYX_ERR(1, 2316, __pyx_L1_error)
__pyx_v_auth = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_t_1);
__pyx_t_1 = 0;
+2317: encoded_url_ptr = PyBytes_AsString(encoded_url)
__pyx_t_2 = PyBytes_AsString(__pyx_v_encoded_url); if (unlikely(__pyx_t_2 == ((void *)NULL))) __PYX_ERR(1, 2317, __pyx_L1_error) __pyx_v_encoded_url_ptr = __pyx_t_2;
+2318: encoded_url_len = PyBytes_GET_SIZE(encoded_url)
__pyx_v_encoded_url_len = PyBytes_GET_SIZE(__pyx_v_encoded_url);
2319:
+2320: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2321: builder = questdb_oidc_builder_from_questdb(
__pyx_v_builder = questdb_oidc_builder_from_questdb(__pyx_v_encoded_url_ptr, __pyx_v_encoded_url_len, (&__pyx_v_err));
2322: encoded_url_ptr, encoded_url_len, &err)
+2323: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2324: if builder == NULL:
__pyx_t_3 = (__pyx_v_builder == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+2325: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2325, __pyx_L1_error)
+2326: try:
/*try:*/ {
+2327: _oidc_builder_set_string(builder, client_id, 'client_id', 0)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2327, __pyx_L5_error)
+2328: _oidc_builder_set_string(builder, scope, 'scope', 1)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_scope, __pyx_mstate_global->__pyx_n_u_scope, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2328, __pyx_L5_error)
+2329: _oidc_builder_set_string(builder, audience, 'audience', 2)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_audience, __pyx_mstate_global->__pyx_n_u_audience, 2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2329, __pyx_L5_error)
+2330: _oidc_builder_set_string(builder, issuer, 'issuer', 3)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_issuer, __pyx_mstate_global->__pyx_n_u_issuer, 3); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2330, __pyx_L5_error)
+2331: _oidc_builder_set_string(builder, token_endpoint, 'token_endpoint', 4)
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint, 4); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2331, __pyx_L5_error)
+2332: _oidc_builder_set_string(
__pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, 5); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2332, __pyx_L5_error)
2333: builder, device_authorization_endpoint,
2334: 'device_authorization_endpoint', 5)
+2335: auth._finish_builder(
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_auth->__pyx_vtab)->_finish_builder(__pyx_v_auth, __pyx_v_builder, __pyx_v_groups_in_token, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2335, __pyx_L5_error)
2336: builder,
2337: groups_in_token=groups_in_token,
2338: insecure=insecure,
2339: ca_bundle=ca_bundle,
2340: open_browser=open_browser,
2341: interactive=interactive,
2342: qr=qr,
2343: renderer=renderer,
2344: default_interval=default_interval,
2345: timeout=timeout,
2346: token_store=token_store)
+2347: return auth
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_auth);
__pyx_r = ((PyObject *)__pyx_v_auth);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L4_return;
}
2348: finally:
+2349: questdb_oidc_builder_free(builder)
/*finally:*/ {
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
questdb_oidc_builder_free(__pyx_v_builder);
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
}
__pyx_L4_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
questdb_oidc_builder_free(__pyx_v_builder);
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
}
2350:
+2351: cdef void _finish_builder(
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__finish_builder(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, struct questdb_oidc_builder *__pyx_v_builder, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) {
questdb_error *__pyx_v_err;
PyObject *__pyx_v_encoded = 0;
uint64_t __pyx_v_timeout_ms;
PyThreadState *__pyx_v_gs;
struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_native = 0;
struct questdb_oidc_auth *__pyx_v_built_raw;
size_t __pyx_v_provider_id;
int __pyx_v_detach_callbacks_after_build;
PyObject *__pyx_v_selected_renderer = 0;
PyObject *__pyx_v_OidcConfigError = NULL;
PyObject *__pyx_v_detect_interactive = NULL;
PyObject *__pyx_v_in_ipython_kernel = NULL;
PyObject *__pyx_v_make_renderer = NULL;
PyObject *__pyx_v_FileTokenStore = NULL;
PyObject *__pyx_v__expand_path_argument = NULL;
PyObject *__pyx_v_callback_name = NULL;
PyObject *__pyx_v_partial = NULL;
PyObject *__pyx_v_provider_ref = NULL;
__Pyx_INCREF(__pyx_v_ca_bundle);
__Pyx_INCREF(__pyx_v_open_browser);
__Pyx_INCREF(__pyx_v_interactive);
__Pyx_INCREF(__pyx_v_timeout);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_27);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_encoded);
__Pyx_XDECREF((PyObject *)__pyx_v_native);
__Pyx_XDECREF(__pyx_v_selected_renderer);
__Pyx_XDECREF(__pyx_v_OidcConfigError);
__Pyx_XDECREF(__pyx_v_detect_interactive);
__Pyx_XDECREF(__pyx_v_in_ipython_kernel);
__Pyx_XDECREF(__pyx_v_make_renderer);
__Pyx_XDECREF(__pyx_v_FileTokenStore);
__Pyx_XDECREF(__pyx_v__expand_path_argument);
__Pyx_XDECREF(__pyx_v_callback_name);
__Pyx_XDECREF(__pyx_v_partial);
__Pyx_XDECREF(__pyx_v_provider_ref);
__Pyx_XDECREF(__pyx_v_ca_bundle);
__Pyx_XDECREF(__pyx_v_open_browser);
__Pyx_XDECREF(__pyx_v_interactive);
__Pyx_XDECREF(__pyx_v_timeout);
__Pyx_RefNannyFinishContext();
}
2352: self,
2353: questdb_oidc_builder* builder,
2354: object groups_in_token,
2355: object insecure,
2356: object ca_bundle,
2357: object open_browser,
2358: object interactive,
2359: object qr,
2360: object renderer,
2361: object default_interval,
2362: object timeout,
2363: object token_store) except *:
+2364: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2365: cdef bytes encoded
2366: cdef uint64_t timeout_ms
+2367: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
2368: cdef _OidcNativeHandle native
+2369: cdef questdb_oidc_auth* built_raw = NULL
__pyx_v_built_raw = NULL;
2370: cdef size_t provider_id
2371: cdef bint detach_callbacks_after_build
2372: cdef object selected_renderer
+2373: from questdb.auth._errors import OidcConfigError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2373, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2373, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcConfigError = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2374: from questdb.auth._render import (
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_detect_interactive,__pyx_mstate_global->__pyx_n_u_in_ipython_kernel,__pyx_mstate_global->__pyx_n_u_make_renderer};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__render, __pyx_imported_names, 3, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2374, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_detect_interactive,__pyx_mstate_global->__pyx_n_u_in_ipython_kernel,__pyx_mstate_global->__pyx_n_u_make_renderer};
for (__pyx_t_3=0; __pyx_t_3 < 3; __pyx_t_3++) {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2374, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_detect_interactive = __pyx_t_4;
break;
case 1:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_in_ipython_kernel = __pyx_t_4;
break;
case 2:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_make_renderer = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2375: detect_interactive, in_ipython_kernel, make_renderer)
+2376: from questdb.auth._store import FileTokenStore
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_FileTokenStore};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__store, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2376, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_FileTokenStore};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2376, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_FileTokenStore = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2377:
+2378: if self._raw != NULL:
__pyx_t_5 = (__pyx_v_self->_raw != NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+2379: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2379, __pyx_L1_error)
+2380: raise OidcConfigError('OidcDeviceAuth is already initialized')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_6 = __pyx_v_OidcConfigError;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_already_initia};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2380, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2380, __pyx_L1_error)
+2381: if groups_in_token is not None and not questdb_oidc_builder_groups_in_token(
__pyx_t_8 = (__pyx_v_groups_in_token != Py_None);
if (__pyx_t_8) {
} else {
__pyx_t_5 = __pyx_t_8;
goto __pyx_L5_bool_binop_done;
}
/* … */
__pyx_t_9 = (!questdb_oidc_builder_groups_in_token(__pyx_v_builder, __pyx_t_8, (&__pyx_v_err)));
__pyx_t_5 = __pyx_t_9;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+2382: builder, groups_in_token is True, &err):
__pyx_t_8 = (__pyx_v_groups_in_token == Py_True);
+2383: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2383, __pyx_L1_error)
+2384: if not questdb_oidc_builder_allow_insecure_transport(
__pyx_t_9 = (!questdb_oidc_builder_allow_insecure_transport(__pyx_v_builder, __pyx_t_5, (&__pyx_v_err)));
if (unlikely(__pyx_t_9)) {
/* … */
}
+2385: builder, insecure is True, &err):
__pyx_t_5 = (__pyx_v_insecure == Py_True);
+2386: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2386, __pyx_L1_error)
+2387: if open_browser is None:
__pyx_t_9 = (__pyx_v_open_browser == Py_None);
if (__pyx_t_9) {
/* … */
}
2388: # Auto: suppress inside a Jupyter/ZMQ kernel, where the kernel may
2389: # well be on a different machine from the person reading the
2390: # notebook, so the browser would open where nobody is looking.
2391: # That guess is wrong for a LOCAL `jupyter lab`, which is why an
2392: # explicit True now overrides it instead of being silently dropped
2393: # -- previously `open_browser=True` was a no-op in every kernel,
2394: # with no way to ask for the browser at all.
+2395: open_browser = not in_ipython_kernel()
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_in_ipython_kernel);
__pyx_t_4 = __pyx_v_in_ipython_kernel;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2395, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(1, 2395, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2395, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF_SET(__pyx_v_open_browser, __pyx_t_1);
__pyx_t_1 = 0;
+2396: if not questdb_oidc_builder_open_browser(
__pyx_t_5 = (!questdb_oidc_builder_open_browser(__pyx_v_builder, __pyx_t_9, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
2397: builder,
+2398: open_browser is True,
__pyx_t_9 = (__pyx_v_open_browser == Py_True);
2399: &err):
+2400: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2400, __pyx_L1_error)
+2401: self._opens_browser = open_browser is True
__pyx_t_5 = (__pyx_v_open_browser == Py_True); __pyx_v_self->_opens_browser = __pyx_t_5;
+2402: if interactive is None:
__pyx_t_5 = (__pyx_v_interactive == Py_None);
if (__pyx_t_5) {
/* … */
}
+2403: interactive = detect_interactive()
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_v_detect_interactive);
__pyx_t_6 = __pyx_v_detect_interactive;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2403, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_interactive, __pyx_t_1);
__pyx_t_1 = 0;
+2404: if not questdb_oidc_builder_interactive(
__pyx_t_9 = (!questdb_oidc_builder_interactive(__pyx_v_builder, __pyx_t_5, (&__pyx_v_err)));
if (unlikely(__pyx_t_9)) {
/* … */
}
+2405: builder, interactive is True, &err):
__pyx_t_5 = (__pyx_v_interactive == Py_True);
+2406: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2406, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2406, __pyx_L1_error)
2407:
2408: # Bounded at the device code's own maximum lifetime, which is the
2409: # ceiling native clamps the interval to anyway. The old bound was the
2410: # full uint64 range, and native casts the value to i64 before clamping
2411: # -- so anything at or above 2**63 wrapped negative, floored to 0, and
2412: # came back out as the 5s MINIMUM. The largest value the validator
2413: # accepted therefore produced the fastest possible polling, which is
2414: # the opposite of what it asked for.
+2415: if (not isinstance(default_interval, int)
__pyx_t_5 = PyLong_Check(__pyx_v_default_interval);
__pyx_t_8 = (!__pyx_t_5);
if (!__pyx_t_8) {
} else {
__pyx_t_9 = __pyx_t_8;
goto __pyx_L13_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_9)) {
/* … */
}
+2416: or isinstance(default_interval, bool)
__pyx_t_8 = __Pyx_TypeCheck(__pyx_v_default_interval, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool);
if (!__pyx_t_8) {
} else {
__pyx_t_9 = __pyx_t_8;
goto __pyx_L13_bool_binop_done;
}
+2417: or default_interval < 5
__pyx_t_8 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_default_interval, __pyx_mstate_global->__pyx_int_5, Py_LT); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 2417, __pyx_L1_error) if (!__pyx_t_8) { } else { __pyx_t_9 = __pyx_t_8; goto __pyx_L13_bool_binop_done; }
+2418: or default_interval > 1800):
__pyx_t_8 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_default_interval, __pyx_mstate_global->__pyx_int_1800, Py_GT); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 2418, __pyx_L1_error) __pyx_t_9 = __pyx_t_8; __pyx_L13_bool_binop_done:;
+2419: raise OidcConfigError(
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_4 = __pyx_v_OidcConfigError;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_default_interval_must_be_an_inte};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2419, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2419, __pyx_L1_error)
2420: 'default_interval must be an integer number of seconds '
2421: 'between 5 and 1800 (the maximum device-code lifetime)')
+2422: if not questdb_oidc_builder_default_interval_seconds(
__pyx_t_9 = (!questdb_oidc_builder_default_interval_seconds(__pyx_v_builder, ((uint64_t)__pyx_t_10), (&__pyx_v_err)));
if (unlikely(__pyx_t_9)) {
/* … */
}
+2423: builder, <uint64_t>default_interval, &err):
__pyx_t_10 = __Pyx_PyLong_As_uint64_t(__pyx_v_default_interval); if (unlikely((__pyx_t_10 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 2423, __pyx_L1_error)
+2424: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2424, __pyx_L1_error)
2425:
+2426: if isinstance(timeout, datetime.timedelta):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_4); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 2426, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_9) { /* … */ goto __pyx_L18; }
+2427: timeout = timeout.total_seconds()
__pyx_t_1 = __pyx_v_timeout;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_total_seconds, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2427, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF_SET(__pyx_v_timeout, __pyx_t_4);
__pyx_t_4 = 0;
+2428: elif (not isinstance(timeout, (int, float))
__pyx_t_5 = PyLong_Check(__pyx_v_timeout); if (!__pyx_t_5) { } else { __pyx_t_8 = __pyx_t_5; goto __pyx_L21_bool_binop_done; } __pyx_t_5 = PyFloat_Check(__pyx_v_timeout); __pyx_t_8 = __pyx_t_5; __pyx_L21_bool_binop_done:; __pyx_t_5 = (!__pyx_t_8); if (!__pyx_t_5) { } else { __pyx_t_9 = __pyx_t_5; goto __pyx_L19_bool_binop_done; } /* … */ if (unlikely(__pyx_t_9)) { /* … */ } __pyx_L18:;
+2429: or isinstance(timeout, bool)):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool);
__pyx_t_9 = __pyx_t_5;
__pyx_L19_bool_binop_done:;
+2430: raise OidcConfigError(
__pyx_t_1 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_6 = __pyx_v_OidcConfigError;
+2431: 'timeout must be a number of seconds or a datetime.timedelta, '
__pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_timeout_must_be_a_number_of_seco, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 2430, __pyx_L1_error)
+2432: f'not {_fqn(type(timeout))}')
__pyx_t_11 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+2433: if (timeout <= 0
__pyx_t_5 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 2433, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_9 = __pyx_t_5; goto __pyx_L24_bool_binop_done; } /* … */ if (unlikely(__pyx_t_9)) { /* … */ }
+2434: or timeout > 120
__pyx_t_5 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_120, Py_GT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 2434, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_9 = __pyx_t_5; goto __pyx_L24_bool_binop_done; }
+2435: or (isinstance(timeout, float) and isnan(timeout))):
__pyx_t_5 = PyFloat_Check(__pyx_v_timeout); if (__pyx_t_5) { } else { __pyx_t_9 = __pyx_t_5; goto __pyx_L24_bool_binop_done; } __pyx_t_13 = __Pyx_PyFloat_AsDouble(__pyx_v_timeout); if (unlikely((__pyx_t_13 == (long double)-1) && PyErr_Occurred())) __PYX_ERR(1, 2435, __pyx_L1_error) __pyx_t_5 = isnan(__pyx_t_13); __pyx_t_9 = __pyx_t_5; __pyx_L24_bool_binop_done:;
+2436: raise OidcConfigError(
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_11 = __pyx_v_OidcConfigError;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_must_be_a_positive_finit};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2436, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(1, 2436, __pyx_L1_error)
2437: 'timeout must be a positive, finite number no greater than 120 seconds')
+2438: timeout_ms = <uint64_t>round(timeout * 1000)
__pyx_t_11 = NULL; __pyx_t_6 = __Pyx_PyLong_MultiplyObjC(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_10 = __Pyx_PyLong_As_uint64_t(__pyx_t_4); if (unlikely((__pyx_t_10 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 2438, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_timeout_ms = ((uint64_t)__pyx_t_10);
+2439: if timeout_ms == 0 or not questdb_oidc_builder_timeout_ms(
__pyx_t_5 = (__pyx_v_timeout_ms == 0);
if (!__pyx_t_5) {
} else {
__pyx_t_9 = __pyx_t_5;
goto __pyx_L29_bool_binop_done;
}
/* … */
__pyx_t_5 = (!questdb_oidc_builder_timeout_ms(__pyx_v_builder, __pyx_v_timeout_ms, (&__pyx_v_err)));
__pyx_t_9 = __pyx_t_5;
__pyx_L29_bool_binop_done:;
/* … */
if (__pyx_t_9) {
/* … */
}
2440: builder, timeout_ms, &err):
+2441: if err != NULL:
__pyx_t_9 = (__pyx_v_err != NULL);
if (unlikely(__pyx_t_9)) {
/* … */
}
+2442: raise _oidc_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 2442, __pyx_L1_error)
+2443: raise OidcConfigError('timeout is too small')
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_11 = __pyx_v_OidcConfigError;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_is_too_small};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2443, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(1, 2443, __pyx_L1_error)
2444:
+2445: if ca_bundle is not None:
__pyx_t_9 = (__pyx_v_ca_bundle != Py_None);
if (__pyx_t_9) {
/* … */
}
2446: # Accept the same path forms as FileTokenStore: str, bytes or any
2447: # os.PathLike, with `~` expanded and the result made absolute.
+2448: from questdb.auth._store import _expand_path_argument
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_expand_path_argument};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__store, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2448, __pyx_L1_error)
}
__pyx_t_4 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_4);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_expand_path_argument};
__pyx_t_3 = 0; {
__pyx_t_11 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2448, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_11);
__pyx_v__expand_path_argument = __pyx_t_11;
break;
default:;
}
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2449: ca_bundle = _expand_path_argument(
__pyx_t_11 = NULL;
__Pyx_INCREF(__pyx_v__expand_path_argument);
__pyx_t_6 = __pyx_v__expand_path_argument;
+2450: ca_bundle, 'ca_bundle', 'the OIDC CA bundle')
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_11);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_11);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_v_ca_bundle, __pyx_mstate_global->__pyx_n_u_ca_bundle, __pyx_mstate_global->__pyx_kp_u_the_OIDC_CA_bundle};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2449, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF_SET(__pyx_v_ca_bundle, __pyx_t_4);
__pyx_t_4 = 0;
+2451: encoded = _oidc_optional_utf8(ca_bundle, 'ca_bundle')
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_optional_utf8(__pyx_v_ca_bundle, __pyx_mstate_global->__pyx_n_u_ca_bundle); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_encoded = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+2452: if encoded is not None and not questdb_oidc_builder_ca_bundle(
__pyx_t_5 = (__pyx_v_encoded != ((PyObject*)Py_None));
if (__pyx_t_5) {
} else {
__pyx_t_9 = __pyx_t_5;
goto __pyx_L34_bool_binop_done;
}
/* … */
__pyx_t_5 = (!questdb_oidc_builder_ca_bundle(__pyx_v_builder, __pyx_t_14, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err)));
__pyx_t_9 = __pyx_t_5;
__pyx_L34_bool_binop_done:;
if (unlikely(__pyx_t_9)) {
/* … */
}
2453: builder,
+2454: PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err):
__pyx_t_14 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_14 == ((void *)NULL))) __PYX_ERR(1, 2454, __pyx_L1_error)
+2455: raise _oidc_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 2455, __pyx_L1_error)
2456:
+2457: if token_store is not None:
__pyx_t_9 = (__pyx_v_token_store != Py_None);
if (__pyx_t_9) {
/* … */
}
+2458: if not isinstance(token_store, FileTokenStore):
__pyx_t_9 = PyObject_IsInstance(__pyx_v_token_store, __pyx_v_FileTokenStore); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 2458, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_9); if (unlikely(__pyx_t_5)) { /* … */ }
+2459: raise OidcConfigError(
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_11 = __pyx_v_OidcConfigError;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_native_OIDC_supports_FileTokenSt};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2459, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(1, 2459, __pyx_L1_error)
2460: 'native OIDC supports FileTokenStore persistence only')
2461: # The native ABI accepts UTF-8 text, not arbitrary POSIX path
2462: # bytes. FileTokenStore uses os.fsdecode(), which intentionally
2463: # preserves undecodable bytes as surrogate characters; translate
2464: # that unsupported case into the public configuration error type.
+2465: encoded = _oidc_required_utf8(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_token_store_directory); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_encoded, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+2466: os.fspath(token_store.directory), 'token_store directory')
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2466, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_fspath); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2466, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_token_store, __pyx_mstate_global->__pyx_n_u_directory); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2466, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_11);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_11);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2466, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
+2467: if not questdb_oidc_builder_file_token_store(
__pyx_t_5 = (!questdb_oidc_builder_file_token_store(__pyx_v_builder, __pyx_t_14, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
2468: builder,
+2469: PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err):
__pyx_t_14 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_14 == ((void *)NULL))) __PYX_ERR(1, 2469, __pyx_L1_error)
+2470: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2470, __pyx_L1_error)
2471:
2472: # Validate a local before publishing it on `self`. A renderer is allowed
2473: # to hold its provider, so assigning first made a validation failure a
2474: # provider <-> renderer cycle that PyPy cpyext cannot reclaim.
2475: selected_renderer = (
+2476: renderer if renderer is not None else make_renderer(qr=qr is True))
__pyx_t_5 = (__pyx_v_renderer != Py_None);
if (__pyx_t_5) {
__Pyx_INCREF(__pyx_v_renderer);
__pyx_t_1 = __pyx_v_renderer;
} else {
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_v_make_renderer);
__pyx_t_11 = __pyx_v_make_renderer;
__pyx_t_9 = (__pyx_v_qr == Py_True);
__pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2476, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
#if CYTHON_VECTORCALL
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_12};
#if CYTHON_VECTORCALL
__pyx_t_15 = __pyx_mstate_global->__pyx_tuple[11];
if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2476, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_15);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_qr};
__pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2476, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
}
#endif
__pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2476, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_1 = __pyx_t_4;
__pyx_t_4 = 0;
}
__pyx_v_selected_renderer = __pyx_t_1;
__pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_qr};
__pyx_mstate_global->__pyx_tuple[11] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[11])) __PYX_ERR(1, 2476, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[11]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[11]);
+2477: for callback_name in (
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[12]; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; for (;;) { if (__pyx_t_3 >= 4) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3); #endif ++__pyx_t_3; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(1, 2477, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_callback_name, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2478: 'on_prompt', 'on_waiting', 'on_success', 'on_failure'):
{
PyObject* __pyx_temp[4] = {__pyx_mstate_global->__pyx_n_u_on_prompt, __pyx_mstate_global->__pyx_n_u_on_waiting, __pyx_mstate_global->__pyx_n_u_on_success, __pyx_mstate_global->__pyx_n_u_on_failure};
__pyx_mstate_global->__pyx_tuple[12] = __Pyx_PyTuple_FromArray(__pyx_temp, 4); if (unlikely(!__pyx_mstate_global->__pyx_tuple[12])) __PYX_ERR(1, 2478, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[12]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[12]);
+2479: if not callable(getattr(selected_renderer, callback_name, None)):
__pyx_t_4 = __Pyx_GetAttr3(__pyx_v_selected_renderer, __pyx_v_callback_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyCallable_Check(__pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 2479, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = (!__pyx_t_5); if (unlikely(__pyx_t_9)) { /* … */ }
+2480: raise OidcConfigError(
__pyx_t_11 = NULL;
__Pyx_INCREF(__pyx_v_OidcConfigError);
__pyx_t_15 = __pyx_v_OidcConfigError;
+2481: f'renderer callback {callback_name} must be callable')
__pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_callback_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_renderer_callback; __pyx_t_16[1] = __pyx_t_12; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_must_be_callable; __pyx_t_17 = 35; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]); #endif __pyx_t_18 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_18 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]); #endif __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_17, __pyx_t_18); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 2480, __pyx_L1_error)
2482: # Hand native an opaque integer key, not a `PyObject*`. Native callback
2483: # state then owns no Python reference, so its release callback -- which
2484: # can run on an abandoned acquisition worker after the interpreter has
2485: # begun finalizing -- never needs the GIL. See
2486: # `_oidc_user_data_release_trampoline`.
2487: global _oidc_last_provider_id
+2488: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2488, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = NULL;
__pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2488, __pyx_L43_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_15))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2488, __pyx_L43_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_2) {
__pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2488, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
}
goto __pyx_L46;
}
__pyx_L46:;
}
goto __pyx_L53;
__pyx_L43_error:;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L1_error;
__pyx_L53:;
}
+2489: _oidc_last_provider_id += 1
__pyx_v_7questdb_7_client__oidc_last_provider_id = (__pyx_v_7questdb_7_client__oidc_last_provider_id + 1);
+2490: provider_id = _oidc_last_provider_id
__pyx_v_provider_id = __pyx_v_7questdb_7_client__oidc_last_provider_id;
+2491: self._provider_id = provider_id
__pyx_v_self->_provider_id = __pyx_v_provider_id;
+2492: native = _OidcNativeHandle()
__pyx_t_15 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcNativeHandle, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2492, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_v_native = ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_t_1);
__pyx_t_1 = 0;
2493: # The provider owns the handle; take that reference before anything can
2494: # fail, so no path can build a handle the provider does not hold.
+2495: self._native = native
__Pyx_INCREF((PyObject *)__pyx_v_native); __Pyx_GIVEREF((PyObject *)__pyx_v_native); __Pyx_GOTREF((PyObject *)__pyx_v_self->_native); __Pyx_DECREF_SET(__pyx_v_self->_native, __pyx_v_native);
2496: # The registry keeps only a weakref, so it never keeps a provider alive
2497: # and a `with` block's exit still collects one. The provider owns the
2498: # renderer. Cython exposes that edge to CPython's cyclic GC; PyPy's
2499: # cpyext cannot reclaim a cycle crossing the extension-object boundary
2500: # (PyPy issue #3848), so callers there should explicitly close or use a
2501: # weak renderer back-reference. Attached transports retain the provider
2502: # separately, and native holds its own cloned handle on top of that.
+2503: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
goto __pyx_L59_try_end;
__pyx_L54_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L56_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_21, __pyx_t_20);
goto __pyx_L1_error;
__pyx_L59_try_end:;
}
+2504: self._renderer = selected_renderer
__Pyx_INCREF(__pyx_v_selected_renderer); __Pyx_GIVEREF(__pyx_v_selected_renderer); __Pyx_GOTREF(__pyx_v_self->_renderer); __Pyx_DECREF_SET(__pyx_v_self->_renderer, __pyx_v_selected_renderer);
+2505: from functools import partial
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_partial};
__pyx_t_19 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2505, __pyx_L54_error)
}
__pyx_t_1 = __pyx_t_19;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_partial};
__pyx_t_3 = 0; {
__pyx_t_15 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2505, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_15);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_15);
__pyx_v_partial = __pyx_t_15;
break;
default:;
}
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2506: provider_ref = PyWeakref_NewRef(
__pyx_t_4 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2506, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_provider_ref = __pyx_t_4; __pyx_t_4 = 0;
+2507: self, partial(_oidc_provider_collected, provider_id))
__pyx_t_15 = NULL;
__Pyx_INCREF(__pyx_v_partial);
__pyx_t_4 = __pyx_v_partial;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2507, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2507, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_6, __pyx_t_11};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2507, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_1);
}
2508: # The lock is released before the blocking native build below: it
2509: # guards the registry, not the construction.
+2510: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2510, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_1 = NULL;
__pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2510, __pyx_L60_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2510, __pyx_L60_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
goto __pyx_L69_try_end;
__pyx_L64_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(1, 2510, __pyx_L66_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_1);
{
PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_11, __pyx_t_1};
__pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_6, NULL);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
__Pyx_GOTREF(__pyx_t_25);
__pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_25);
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
if (__pyx_t_9 < (0)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
__pyx_t_5 = (!__pyx_t_9);
if (unlikely(__pyx_t_5)) {
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_1);
__pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_1 = 0;
__PYX_ERR(1, 2510, __pyx_L66_except_error)
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L65_exception_handled;
}
__pyx_L66_except_error:;
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
goto __pyx_L54_error;
__pyx_L65_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
__pyx_L69_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_19) {
__pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2510, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_24);
__Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
}
goto __pyx_L63;
}
__pyx_L63:;
}
goto __pyx_L73;
__pyx_L60_error:;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L54_error;
__pyx_L73:;
}
+2511: _OIDC_PROVIDERS[provider_id] = provider_ref
if (unlikely((__Pyx_SetItemInt(__pyx_v_7questdb_7_client__OIDC_PROVIDERS, __pyx_v_provider_id, __pyx_v_provider_ref, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 2511, __pyx_L64_error)
+2512: _OIDC_NATIVE_HANDLES[provider_id] = native
if (unlikely((__Pyx_SetItemInt(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES, __pyx_v_provider_id, ((PyObject *)__pyx_v_native), size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 2512, __pyx_L64_error)
2513: # Registered <=> built. Every failure after registration must drop
2514: # both entries immediately, rather than waiting for the half-built
2515: # provider to be collected. That also lets a subclass retry
2516: # `__init__` without stranding a dead weakref or a registry entry.
+2517: if not questdb_oidc_builder_event_handler(
__pyx_t_5 = (!questdb_oidc_builder_event_handler(__pyx_v_builder, __pyx_f_7questdb_7_client__oidc_event_trampoline, ((void *)__pyx_v_provider_id), __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
2518: builder,
2519: _oidc_event_trampoline,
2520: <void*>provider_id,
2521: _oidc_user_data_release_trampoline,
2522: &err):
+2523: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2523, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2523, __pyx_L54_error)
2524: # Persistence warnings use a separate callback because they can
2525: # originate on background provider threads. Its user_data carries
2526: # only the provider id; it never retains a Python object or enters
2527: # the user renderer.
2528: #
2529: # Installed only alongside a token store. Every native
2530: # `warn_persistence` site sits behind a store gate, so a provider
2531: # without one emits no diagnostic and the handler would be nothing
2532: # but added interpreter-shutdown surface. The process-wide gate
2533: # synchronizes any callbacks installed here. Native's default
2534: # stderr handler stays registered otherwise and is equally
2535: # unreachable, so nothing escapes the `questdb` logger.
+2536: if token_store is not None:
__pyx_t_5 = (__pyx_v_token_store != Py_None);
if (__pyx_t_5) {
/* … */
}
+2537: if not questdb_oidc_builder_diagnostic_handler(
__pyx_t_5 = (!questdb_oidc_builder_diagnostic_handler(__pyx_v_builder, __pyx_f_7questdb_7_client__oidc_diagnostic_trampoline, ((void *)__pyx_v_provider_id), __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
2538: builder,
2539: _oidc_diagnostic_trampoline,
2540: <void*>provider_id,
2541: _oidc_user_data_release_trampoline,
2542: &err):
+2543: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2543, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2543, __pyx_L54_error)
2544: # Build into a thread-local C pointer while the GIL is released.
2545: # Publishing directly into `native.raw` here races the atexit hook:
2546: # it can acquire the GIL, snapshot this registered handle, and read
2547: # that field while native is writing it. Reacquiring the GIL before
2548: # publication makes the field obey the same synchronization as every
2549: # reader; the marker check below then self-detaches a build that the
2550: # shutdown snapshot observed while its raw field was still NULL.
+2551: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2552: built_raw = questdb_oidc_builder_build(builder, &err)
__pyx_v_built_raw = questdb_oidc_builder_build(__pyx_v_builder, (&__pyx_v_err));
+2553: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2554: if built_raw == NULL:
__pyx_t_5 = (__pyx_v_built_raw == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+2555: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2555, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2555, __pyx_L54_error)
+2556: native.raw = built_raw
__pyx_v_native->raw = __pyx_v_built_raw;
+2557: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2557, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_11 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2557, __pyx_L78_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_11);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_11);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2557, __pyx_L78_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_19) {
__pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2557, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_22);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
}
goto __pyx_L81;
}
__pyx_L81:;
}
goto __pyx_L88;
__pyx_L78_error:;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L54_error;
__pyx_L88:;
}
+2558: detach_callbacks_after_build = _oidc_callbacks_shutting_down
__pyx_v_detach_callbacks_after_build = __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down;
+2559: if detach_callbacks_after_build:
if (__pyx_v_detach_callbacks_after_build) {
/* … */
}
2560: # This provider finished after the atexit snapshot while an
2561: # older callback drain had released the GIL. No Python caller
2562: # can use it before __init__ returns, so detach both callback
2563: # targets now, before exposing the completed provider.
+2564: _oidc_detach_handle_callbacks(native, True)
__pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(__pyx_v_native, 1);
+2565: self._raw = native.raw
__pyx_t_26 = __pyx_v_native->raw;
__pyx_v_self->_raw = __pyx_t_26;
2566: # A failed build leaves `_raw` NULL and this function supports
2567: # re-initialisation from that state, but `close()` latches
2568: # `_closed` even on a NULL handle -- and `__cinit__`, the only
2569: # other place the flag is cleared, does not re-run. Without this a
2570: # retried `__init__` would build a perfectly usable provider that
2571: # every entry point then refused as "closed", with no way back.
+2572: self._closed = False
__pyx_v_self->_closed = 0;
+2573: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_11) < 0) __PYX_ERR(1, 2573, __pyx_L56_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_11);
2574: # Dropping `_native` releases the handle if the build got that far;
2575: # `_OidcNativeHandle.__dealloc__` is NULL-safe when it did not.
+2576: self._raw = NULL
__pyx_v_self->_raw = NULL;
+2577: self._native = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_native); __Pyx_DECREF_SET(__pyx_v_self->_native, ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)Py_None));
+2578: self._provider_id = 0
__pyx_v_self->_provider_id = 0;
2579: # Match close(): break the supported renderer -> provider back-edge
2580: # on every failed native build. Validation failures never publish
2581: # the renderer at all.
+2582: self._renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_renderer); __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2583: with _OIDC_REGISTRY_LOCK:
/*with:*/ {
__pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2583, __pyx_L56_except_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_15 = NULL;
__pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2583, __pyx_L92_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_12))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2583, __pyx_L92_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
goto __pyx_L105_try_end;
__pyx_L98_error:;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_15) < 0) __PYX_ERR(1, 2583, __pyx_L100_except_error)
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_15);
{
PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_12, __pyx_t_15};
__pyx_t_27 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
__Pyx_GOTREF(__pyx_t_27);
}
__pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_27, NULL);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
__Pyx_GOTREF(__pyx_t_25);
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_25);
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
if (__pyx_t_5 < (0)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
__pyx_t_9 = (!__pyx_t_5);
if (unlikely(__pyx_t_9)) {
__Pyx_GIVEREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_12, __pyx_t_15);
__pyx_t_6 = 0; __pyx_t_12 = 0; __pyx_t_15 = 0;
__PYX_ERR(1, 2583, __pyx_L100_except_error)
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L99_exception_handled;
}
__pyx_L100_except_error:;
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
goto __pyx_L56_except_error;
__pyx_L99_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
__pyx_L105_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_19) {
__pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2583, __pyx_L56_except_error)
__Pyx_GOTREF(__pyx_t_24);
__Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
}
goto __pyx_L97;
}
__pyx_L97:;
}
goto __pyx_L109;
__pyx_L92_error:;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L56_except_error;
__pyx_L109:;
}
+2584: _OIDC_PROVIDERS.pop(provider_id, None)
__pyx_t_12 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_15 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2584, __pyx_L98_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_15, Py_None};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2584, __pyx_L98_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2585: _OIDC_NATIVE_HANDLES.pop(provider_id, None)
__pyx_t_15 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_12 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2585, __pyx_L98_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_12, Py_None};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2585, __pyx_L98_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2586: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_11); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_11 = 0; __PYX_ERR(1, 2586, __pyx_L56_except_error) }
2587:
+2588: def sign_in(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_6sign_in, "Run interactive sign-in if no cached or refreshable token exists.\n\n ``Ctrl-C`` during the wait cancels only this sign-in attempt and raises\n ``KeyboardInterrupt``. The provider remains open, attached transports\n remain usable, and a later ``sign_in()`` on the same provider can retry.\n\n Only one ``sign_in()`` call may run on a provider at a time. A concurrent\n call raises :class:`~questdb.auth.OidcError` with code\n ``InvalidApiCall`` instead of waiting behind the interactive flow; the\n provider and the running sign-in are unaffected.\n\n Once interpreter shutdown has begun (from an ``atexit`` handler that\n runs after this module\047s own), renderer callbacks are detached. A\n sign-in that would need to prompt then raises\n :class:`~questdb.auth.OidcInteractionRequired` at once unless the\n provider opens a browser, rather than waiting for a device code nobody\n can see.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_7sign_in = {"sign_in", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_6sign_in}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sign_in (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sign_in", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sign_in", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_6sign_in(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_6sign_in(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { questdb_error *__pyx_v_err; int __pyx_v_ok; PyThreadState *__pyx_v_gs; struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0; PyObject *__pyx_v_OidcError = NULL; PyObject *__pyx_v_interrupt = NULL; PyObject *__pyx_v_prompted = NULL; PyObject *__pyx_v_exc = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.sign_in", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_call); __Pyx_XDECREF(__pyx_v_OidcError); __Pyx_XDECREF(__pyx_v_interrupt); __Pyx_XDECREF(__pyx_v_prompted); __Pyx_XDECREF(__pyx_v_exc); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_7sign_in, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_sign_in, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[54])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_sign_in, __pyx_t_18) < (0)) __PYX_ERR(1, 2588, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2589: """Run interactive sign-in if no cached or refreshable token exists.
2590:
2591: ``Ctrl-C`` during the wait cancels only this sign-in attempt and raises
2592: ``KeyboardInterrupt``. The provider remains open, attached transports
2593: remain usable, and a later ``sign_in()`` on the same provider can retry.
2594:
2595: Only one ``sign_in()`` call may run on a provider at a time. A concurrent
2596: call raises :class:`~questdb.auth.OidcError` with code
2597: ``InvalidApiCall`` instead of waiting behind the interactive flow; the
2598: provider and the running sign-in are unaffected.
2599:
2600: Once interpreter shutdown has begun (from an ``atexit`` handler that
2601: runs after this module's own), renderer callbacks are detached. A
2602: sign-in that would need to prompt then raises
2603: :class:`~questdb.auth.OidcInteractionRequired` at once unless the
2604: provider opens a browser, rather than waiting for a device code nobody
2605: can see.
2606: """
+2607: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2608: cdef bint ok
+2609: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
2610: cdef _OidcForegroundCall call
+2611: self._require_open()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2611, __pyx_L1_error)
+2612: if not self._sign_in_lock.acquire(False):
__pyx_t_2 = __pyx_v_self->_sign_in_lock; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_False}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 2612, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (!__pyx_t_4); if (__pyx_t_5) { /* … */ }
+2613: from questdb.auth._errors import OidcError
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcError};
__pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2613, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_6;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcError};
__pyx_t_7 = 0; {
__pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_7]); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2613, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
switch (__pyx_t_7) {
case 0:
__Pyx_INCREF(__pyx_t_2);
__pyx_v_OidcError = __pyx_t_2;
break;
default:;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2614: # InvalidApiCall, as native reports every other refusal to enter
2615: # a busy provider (a clear() behind a sign-in, or a call made from
2616: # a callback). The class default, AuthError, is documented as a
2617: # terminal auth failure, and this is neither: the provider stays
2618: # open and the running sign-in continues.
+2619: raise OidcError(
__pyx_t_2 = NULL;
__Pyx_INCREF(__pyx_v_OidcError);
__pyx_t_8 = __pyx_v_OidcError;
/* … */
#endif
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_is_already_in_progr, __pyx_t_10};
#if CYTHON_VECTORCALL
__pyx_t_9 = __pyx_mstate_global->__pyx_tuple[13];
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2619, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_9);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
__pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2619, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2619, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2619, __pyx_L1_error)
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
__pyx_mstate_global->__pyx_tuple[13] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[13])) __PYX_ERR(1, 2619, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[13]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[13]);
2620: 'OIDC sign_in() is already in progress on this provider.',
+2621: code=QuestDBErrorCode.InvalidApiCall)
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; #if CYTHON_VECTORCALL
+2622: try:
/*try:*/ {
+2623: if _oidc_callbacks_shutting_down and not self._opens_browser:
if (__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down) {
} else {
__pyx_t_5 = __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_4 = (!__pyx_v_self->_opens_browser);
__pyx_t_5 = __pyx_t_4;
__pyx_L8_bool_binop_done:;
if (__pyx_t_5) {
/* … */
}
+2624: self._sign_in_without_renderer()
__pyx_t_8 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_8);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sign_in_without_renderer, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2624, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2625: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L4_return;
2626: # A callback may park an interrupt only for this invocation: the
2627: # non-blocking lock above prevents another sign_in() from entering
2628: # native and winning the race to consume the provider field.
+2629: self._interrupt = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_interrupt); __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2630: self._prompt_renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_prompt_renderer); __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
2631: # Lets a persistence diagnostic on this thread find this provider:
2632: # its callback carries no user_data.
+2633: call = _oidc_foreground_enter(self)
__pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2633, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1); __pyx_t_1 = 0;
+2634: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2635: ok = questdb_oidc_auth_sign_in(self._raw, &err)
__pyx_v_ok = questdb_oidc_auth_sign_in(__pyx_v_self->_raw, (&__pyx_v_err));
+2636: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2637: _oidc_foreground_exit(call)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2637, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2638: interrupt = self._interrupt
__pyx_t_1 = __pyx_v_self->_interrupt;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_interrupt = __pyx_t_1;
__pyx_t_1 = 0;
+2639: self._interrupt = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_interrupt); __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2640: prompted = self._prompt_renderer
__pyx_t_1 = __pyx_v_self->_prompt_renderer;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_prompted = __pyx_t_1;
__pyx_t_1 = 0;
+2641: self._prompt_renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_prompt_renderer); __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
+2642: if interrupt is not None:
__pyx_t_5 = (__pyx_v_interrupt != Py_None);
if (__pyx_t_5) {
/* … */
}
2643: # The interrupt is what the user asked for; the native error is
2644: # just the cancellation it caused.
+2645: if err != NULL:
__pyx_t_5 = (__pyx_v_err != NULL);
if (__pyx_t_5) {
/* … */
}
+2646: _oidc_release_error(err)
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2647: _oidc_report_unfinished_prompt(prompted, None)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(__pyx_v_prompted, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2647, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2648: raise interrupt
__Pyx_Raise(__pyx_v_interrupt, 0, 0, 0); __PYX_ERR(1, 2648, __pyx_L5_error)
+2649: if not ok:
__pyx_t_5 = (!__pyx_v_ok);
if (unlikely(__pyx_t_5)) {
/* … */
}
}
+2650: exc = _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2650, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_exc = __pyx_t_1; __pyx_t_1 = 0;
+2651: _oidc_report_unfinished_prompt(prompted, exc)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(__pyx_v_prompted, __pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2651, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2652: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(1, 2652, __pyx_L5_error)
2653: finally:
+2654: self._sign_in_lock.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_8 = __pyx_v_self->_sign_in_lock;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_t_8 = __pyx_v_self->_sign_in_lock;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_t_8 = __pyx_v_self->_sign_in_lock;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2655: _oidc_raise_unscheduled_main()
__pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L1_error) goto __pyx_L6; } __pyx_L5_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_6 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_15, &__pyx_t_16); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_t_19); __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; { /* … */ __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L14_error) } __Pyx_XGIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_18); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestore(__pyx_t_6, __pyx_t_15, __pyx_t_16); __pyx_t_6 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; goto __pyx_L1_error; __pyx_L14_error:; __Pyx_XGIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_18); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; goto __pyx_L1_error; } __pyx_L4_return: { __pyx_t_19 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L1_error) __pyx_r = __pyx_t_19; __pyx_t_19 = 0; goto __pyx_L0; } __pyx_L6:; }
2656:
+2657: def _sign_in_without_renderer(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer, "``sign_in()`` once interpreter shutdown has detached the renderer.\n\n The atexit hook suppresses every callback into Python, so a device-code\n prompt can no longer be shown, and this provider opens no browser: an\n interactive flow would poll silently until the code expired. A cached\n or silently refreshable credential still satisfies ``sign_in()``;\n anything that needs the user fails fast instead.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer = {"_sign_in_without_renderer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_sign_in_without_renderer (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_sign_in_without_renderer", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_sign_in_without_renderer", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { PyObject *__pyx_v_OidcInteractionRequired = NULL; PyObject *__pyx_v_exc = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_without_renderer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_OidcInteractionRequired); __Pyx_XDECREF(__pyx_v_exc); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth__sign_in_without, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[55])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_sign_in_without_renderer, __pyx_t_18) < (0)) __PYX_ERR(1, 2657, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2658: """``sign_in()`` once interpreter shutdown has detached the renderer.
2659:
2660: The atexit hook suppresses every callback into Python, so a device-code
2661: prompt can no longer be shown, and this provider opens no browser: an
2662: interactive flow would poll silently until the code expired. A cached
2663: or silently refreshable credential still satisfies ``sign_in()``;
2664: anything that needs the user fails fast instead.
2665: """
+2666: from questdb.auth._errors import OidcInteractionRequired
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcInteractionRequired};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2666, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcInteractionRequired};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2666, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcInteractionRequired = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2667: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L8_try_end:;
}
+2668: self.token()
__pyx_t_4 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_4);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2668, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2669: except OidcInteractionRequired as exc:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_v_OidcInteractionRequired); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_without_renderer", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_9) < 0) __PYX_ERR(1, 2669, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_v_exc = __pyx_t_4; /*try:*/ { /* … */ /*finally:*/ { __pyx_L14_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); __Pyx_XGOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_t_19); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __pyx_t_8 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); __Pyx_XGIVEREF(__pyx_t_18); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; goto __pyx_L5_except_error; } } } goto __pyx_L5_except_error;
+2670: if getattr(exc, '_acquisition_busy', False):
__pyx_t_10 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2670, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(1, 2670, __pyx_L14_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(__pyx_t_11)) { /* … */ }
+2671: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_9); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_9 = 0; __PYX_ERR(1, 2671, __pyx_L14_error)
+2672: raise OidcInteractionRequired(
__pyx_t_12 = NULL;
__Pyx_INCREF(__pyx_v_OidcInteractionRequired);
__pyx_t_13 = __pyx_v_OidcInteractionRequired;
/* … */
#endif
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_13))) {
__pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
assert(__pyx_t_12);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
__Pyx_INCREF(__pyx_t_12);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_cannot_prompt_durin, __pyx_t_14};
#if CYTHON_VECTORCALL
__pyx_t_15 = __pyx_mstate_global->__pyx_tuple[13];
if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2672, __pyx_L14_error)
__Pyx_INCREF(__pyx_t_15);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
__pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2672, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_15);
}
#endif
__pyx_t_10 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
#if CYTHON_VECTORCALL
#endif
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2672, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_10);
}
2673: 'OIDC sign_in() cannot prompt during interpreter shutdown: '
2674: 'renderer callbacks are detached and this provider does not '
2675: 'open a browser, so nobody could see the device code. Sign '
2676: 'in before the interpreter starts exiting.',
+2677: code=exc.code) from exc
__pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 2677, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_14); #if CYTHON_VECTORCALL /* … */ __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(1, 2672, __pyx_L14_error) }
2678:
+2679: def cancel_sign_in(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in, "Cancel the current interactive sign-in without closing the provider.\n\n The active :meth:`sign_in` raises\n :class:`~questdb.auth.OidcCancelledError`. Cached credentials are not\n discarded, attached senders, pools and readers remain usable, and a\n later ``sign_in()`` on this provider can succeed. If no device flow is\n running, this is an idempotent no-op that does not affect the next one.\n It is also a no-op once the identity provider has issued tokens for the\n running flow: that sign-in is committed and completes normally, and the\n renderer receives its ``on_success`` or ``on_failure`` call. A terminal\n failure is also committed before ``on_failure`` runs: cancelling from\n that callback is a no-op and preserves the original failure.\n\n Safe from any thread, including a renderer callback. Use :meth:`close`\n instead only when the provider and every attached transport should be\n disabled permanently.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in = {"cancel_sign_in", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cancel_sign_in (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("cancel_sign_in", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("cancel_sign_in", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { questdb_error *__pyx_v_err; int __pyx_v_ok; PyThreadState *__pyx_v_gs; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.cancel_sign_in", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_cancel_sign_in, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[56])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_cancel_sign_in, __pyx_t_18) < (0)) __PYX_ERR(1, 2679, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2680: """Cancel the current interactive sign-in without closing the provider.
2681:
2682: The active :meth:`sign_in` raises
2683: :class:`~questdb.auth.OidcCancelledError`. Cached credentials are not
2684: discarded, attached senders, pools and readers remain usable, and a
2685: later ``sign_in()`` on this provider can succeed. If no device flow is
2686: running, this is an idempotent no-op that does not affect the next one.
2687: It is also a no-op once the identity provider has issued tokens for the
2688: running flow: that sign-in is committed and completes normally, and the
2689: renderer receives its ``on_success`` or ``on_failure`` call. A terminal
2690: failure is also committed before ``on_failure`` runs: cancelling from
2691: that callback is a no-op and preserves the original failure.
2692:
2693: Safe from any thread, including a renderer callback. Use :meth:`close`
2694: instead only when the provider and every attached transport should be
2695: disabled permanently.
2696: """
+2697: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2698: cdef bint ok
+2699: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+2700: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2700, __pyx_L1_error)
+2701: if self._raw == NULL:
__pyx_t_1 = (__pyx_v_self->_raw == NULL);
if (__pyx_t_1) {
/* … */
}
+2702: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+2703: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2704: ok = questdb_oidc_auth_cancel_sign_in(self._raw, &err)
__pyx_v_ok = questdb_oidc_auth_cancel_sign_in(__pyx_v_self->_raw, (&__pyx_v_err));
+2705: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2706: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+2707: raise _oidc_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(1, 2707, __pyx_L1_error)
2708:
+2709: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress___get__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress___get__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_in_progress.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
2710: def _sign_in_in_progress(self):
2711: """Whether this wrapper's local :meth:`sign_in` lock is held.
2712:
2713: Internal diagnostic/test property. Transport retry classification does
2714: not consult this mutable state; it uses the immutable
2715: ``_acquisition_busy`` bit captured in the native error instead.
2716: """
+2717: return self._sign_in_lock.locked()
__pyx_t_2 = __pyx_v_self->_sign_in_lock; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_locked, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
2718:
+2719: def token(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_12token, "Return a cached or silently refreshed token; never prompt.\n\n Raises :class:`~questdb.auth.OidcInteractionRequired` when no cached or\n silently refreshable credential is available -- notably before the first\n :meth:`sign_in`, and once a refresh token has expired. This method never\n displays a prompt, so that condition can only be cleared by calling\n :meth:`sign_in` on a thread that may interact with the user.\n\n A cached token returns at once. Otherwise this call refreshes the\n token (up to the provider\047s ``timeout``), or waits for a refresh\n already running on another thread for up to six times ``timeout``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_13token = {"token", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_12token}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("token (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("token", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("token", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_12token(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_12token(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { questdb_error *__pyx_v_err; struct questdb_oidc_token *__pyx_v_token; char const *__pyx_v_data; size_t __pyx_v_length; PyThreadState *__pyx_v_gs; struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0; PyObject *__pyx_v_interrupt = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.token", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_call); __Pyx_XDECREF(__pyx_v_interrupt); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_13token, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_token, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[57])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_token, __pyx_t_18) < (0)) __PYX_ERR(1, 2719, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2720: """Return a cached or silently refreshed token; never prompt.
2721:
2722: Raises :class:`~questdb.auth.OidcInteractionRequired` when no cached or
2723: silently refreshable credential is available -- notably before the first
2724: :meth:`sign_in`, and once a refresh token has expired. This method never
2725: displays a prompt, so that condition can only be cleared by calling
2726: :meth:`sign_in` on a thread that may interact with the user.
2727:
2728: A cached token returns at once. Otherwise this call refreshes the
2729: token (up to the provider's ``timeout``), or waits for a refresh
2730: already running on another thread for up to six times ``timeout``.
2731: """
+2732: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
+2733: cdef questdb_oidc_token* token = NULL
__pyx_v_token = NULL;
+2734: cdef const char* data = NULL
__pyx_v_data = NULL;
+2735: cdef size_t length = 0
__pyx_v_length = 0;
+2736: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
2737: cdef _OidcForegroundCall call
+2738: self._require_open()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2738, __pyx_L1_error)
+2739: call = _oidc_foreground_enter(None)
__pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(Py_None)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1); __pyx_t_1 = 0;
+2740: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2741: token = questdb_oidc_auth_token(self._raw, &err)
__pyx_v_token = questdb_oidc_auth_token(__pyx_v_self->_raw, (&__pyx_v_err));
+2742: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2743: interrupt = _oidc_foreground_exit(call)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_interrupt = __pyx_t_1; __pyx_t_1 = 0;
+2744: if interrupt is not None:
__pyx_t_2 = (__pyx_v_interrupt != Py_None);
if (__pyx_t_2) {
/* … */
}
2745: # Ctrl-C landed in a persistence diagnostic during a refresh. The
2746: # user asked to stop; the outcome of the call is moot.
+2747: if token != NULL:
__pyx_t_2 = (__pyx_v_token != NULL);
if (__pyx_t_2) {
/* … */
}
+2748: _oidc_release_token(token)
__pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
+2749: if err != NULL:
__pyx_t_2 = (__pyx_v_err != NULL);
if (__pyx_t_2) {
/* … */
}
+2750: _oidc_release_error(err)
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2751: try:
/*try:*/ {
+2752: raise interrupt
__Pyx_Raise(__pyx_v_interrupt, 0, 0, 0); __PYX_ERR(1, 2752, __pyx_L7_error) }
2753: finally:
+2754: _oidc_raise_unscheduled_main()
/*finally:*/ {
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2754, __pyx_L10_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
}
+2755: if token == NULL:
__pyx_t_2 = (__pyx_v_token == NULL);
if (__pyx_t_2) {
/* … */
}
+2756: try:
/*try:*/ {
+2757: raise _oidc_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2757, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(1, 2757, __pyx_L13_error) }
2758: finally:
+2759: _oidc_raise_unscheduled_main()
/*finally:*/ {
__pyx_L13_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_6);
__pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2759, __pyx_L16_error)
}
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
goto __pyx_L1_error;
}
}
+2760: try:
/*try:*/ {
+2761: data = questdb_oidc_token_data(token)
__pyx_v_data = questdb_oidc_token_data(__pyx_v_token);
+2762: length = questdb_oidc_token_len(token)
__pyx_v_length = questdb_oidc_token_len(__pyx_v_token);
2763: # Guard NULL like every other native span in this file does, via
2764: # _oidc_text. The header promises non-NULL for a non-NULL token and
2765: # native returns a Rust String's pointer, so this is unreachable
2766: # today -- but PyUnicode_FromStringAndSize(NULL, n) returns an
2767: # *uninitialized* str on CPython 3.10/3.11 rather than raising, and
2768: # this is the one function that returns a credential.
+2769: return _oidc_text(data, length) or ''
__pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_data, __pyx_v_length); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 2769, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 2769, __pyx_L18_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } else { __Pyx_INCREF(__pyx_t_13); __pyx_t_1 = __pyx_t_13; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L20_bool_binop_done; } __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6); __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u__6; __pyx_L20_bool_binop_done:; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L17_return; }
2770: finally:
+2771: _oidc_release_token(token)
/*finally:*/ {
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
/* … */
__pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
+2772: _oidc_raise_unscheduled_main()
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2772, __pyx_L23_error) } __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8); __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5; goto __pyx_L1_error; __pyx_L23_error:; __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; goto __pyx_L1_error; } __pyx_L17_return: { __pyx_t_11 = __pyx_r; __pyx_r = 0; /* … */ __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2772, __pyx_L1_error) __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; } }
2773:
+2774: def _foreground_token(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_14_foreground_token, "The native provider\047s token, as the fail-fast probe of\n `QuestDB.dataframe()` reads it (`_direct_dataframe_run`).\n\n The native-backed `token()`, which is what connections get. Private\n so that tests can intercept the probe.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_15_foreground_token = {"_foreground_token", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_14_foreground_token}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_foreground_token (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_foreground_token", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_foreground_token", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_14_foreground_token(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_14_foreground_token(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._foreground_token", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_15_foreground_token, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth__foreground_token, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[58])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_foreground_token, __pyx_t_18) < (0)) __PYX_ERR(1, 2774, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2775: """The native provider's token, as the fail-fast probe of
2776: `QuestDB.dataframe()` reads it (`_direct_dataframe_run`).
2777:
2778: The native-backed `token()`, which is what connections get. Private
2779: so that tests can intercept the probe.
2780: """
+2781: return OidcDeviceAuth.token(self)
__pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
2782:
+2783: def headers(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_16headers, "Return an HTTP Authorization header containing the current token.\n\n A fresh ``{\"Authorization\": \"Bearer ...\"}`` dict on each call. Raises\n whatever :meth:`token` raises, including\n :class:`~questdb.auth.OidcInteractionRequired` before sign-in.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_17headers = {"headers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_16headers}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("headers (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("headers", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("headers", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_16headers(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_16headers(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.headers", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_17headers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_headers, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[59])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2783, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_headers, __pyx_t_18) < (0)) __PYX_ERR(1, 2783, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2784: """Return an HTTP Authorization header containing the current token.
2785:
2786: A fresh ``{"Authorization": "Bearer ..."}`` dict on each call. Raises
2787: whatever :meth:`token` raises, including
2788: :class:`~questdb.auth.OidcInteractionRequired` before sign-in.
2789: """
+2790: return {'Authorization': 'Bearer ' + self.token()}
__pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_3 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_Bearer, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Authorization, __pyx_t_3) < (0)) __PYX_ERR(1, 2790, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
2791:
+2792: def clear(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_18clear, "Clear memory and persisted credentials without revoking at the IdP.\n\n Works after :meth:`close`. ``close`` drops the in-memory credential but\n deliberately leaves the persisted entry, so clearing has to stay\n available afterwards -- otherwise the ``with`` form, whose exit closes\n the provider, would leave a long-lived plaintext refresh token on disk\n with no supported way to remove it.\n\n Never waits behind an interactive :meth:`sign_in` running on another\n thread, which can hold the provider for the device code\047s whole\n lifetime (the GIL is released for the call, so it would not even see\n ``Ctrl-C``). It raises :class:`~questdb.QuestDBError` with code\n ``InvalidApiCall`` instead and clears **nothing**: call\n :meth:`cancel_sign_in` first, or retry once the sign-in completes.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_19clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_18clear}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clear (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_18clear(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_18clear(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { questdb_error *__pyx_v_err; int __pyx_v_ok; PyThreadState *__pyx_v_gs; struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0; PyObject *__pyx_v_interrupt = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.clear", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_call); __Pyx_XDECREF(__pyx_v_interrupt); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_19clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_clear, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[60])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2792, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_18) < (0)) __PYX_ERR(1, 2792, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2793: """Clear memory and persisted credentials without revoking at the IdP.
2794:
2795: Works after :meth:`close`. ``close`` drops the in-memory credential but
2796: deliberately leaves the persisted entry, so clearing has to stay
2797: available afterwards -- otherwise the ``with`` form, whose exit closes
2798: the provider, would leave a long-lived plaintext refresh token on disk
2799: with no supported way to remove it.
2800:
2801: Never waits behind an interactive :meth:`sign_in` running on another
2802: thread, which can hold the provider for the device code's whole
2803: lifetime (the GIL is released for the call, so it would not even see
2804: ``Ctrl-C``). It raises :class:`~questdb.QuestDBError` with code
2805: ``InvalidApiCall`` instead and clears **nothing**: call
2806: :meth:`cancel_sign_in` first, or retry once the sign-in completes.
2807: """
+2808: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2809: cdef bint ok
+2810: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
2811: cdef _OidcForegroundCall call
+2812: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2812, __pyx_L1_error)
+2813: if self._raw == NULL:
__pyx_t_1 = (__pyx_v_self->_raw == NULL);
if (__pyx_t_1) {
/* … */
}
+2814: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+2815: call = _oidc_foreground_enter(None)
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(Py_None)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2815, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_2); __pyx_t_2 = 0;
+2816: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2817: ok = questdb_oidc_auth_clear(self._raw, &err)
__pyx_v_ok = questdb_oidc_auth_clear(__pyx_v_self->_raw, (&__pyx_v_err));
+2818: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2819: interrupt = _oidc_foreground_exit(call)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_interrupt = __pyx_t_2; __pyx_t_2 = 0;
+2820: if interrupt is not None:
__pyx_t_1 = (__pyx_v_interrupt != Py_None);
if (__pyx_t_1) {
/* … */
}
+2821: if err != NULL:
__pyx_t_1 = (__pyx_v_err != NULL);
if (__pyx_t_1) {
/* … */
}
+2822: _oidc_release_error(err)
__pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2823: try:
/*try:*/ {
+2824: raise interrupt
__Pyx_Raise(__pyx_v_interrupt, 0, 0, 0); __PYX_ERR(1, 2824, __pyx_L7_error) }
2825: finally:
+2826: _oidc_raise_unscheduled_main()
/*finally:*/ {
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2826, __pyx_L10_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
}
+2827: try:
/*try:*/ {
+2828: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
}
+2829: raise _oidc_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2829, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(1, 2829, __pyx_L12_error)
2830: finally:
+2831: _oidc_raise_unscheduled_main()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2831, __pyx_L1_error)
goto __pyx_L13;
}
__pyx_L12_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_6);
__pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2831, __pyx_L16_error)
}
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
goto __pyx_L1_error;
}
__pyx_L13:;
}
2832:
+2833: def close(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_20close, "Permanently close this provider and cancel interruptible waits.\n\n A sign-in, silent-refresh coordination, or bundled file-store lock wait\n running on another thread is asked to stop, and the in-memory credential\n is dropped. Cloned native handles retained by attached transports share\n the closed state. Idempotent.\n\n The call ordinarily waits for the running operation to leave the native\n authentication critical section. While this provider\047s renderer callback\n is active, however, it publishes the close, drops the in-memory credential,\n and returns without waiting, regardless of which thread called it. A\n callback may delegate ``close()`` to another thread and join that thread,\n so waiting there could deadlock just as it would on the callback thread\n itself. A later ``close()`` after the callback returns performs the wait.\n\n The persisted entry is deliberately left behind so :meth:`clear` can\n still remove it after closing.\n\n .. warning::\n\n Closing is **terminal for every attached transport**, not merely a\n state they observe. Closing is monotonic, so every\n :class:`~questdb.Sender`, :func:`questdb.connect` pool and reader\n built from this provider fails its next token pull non-retryably:\n reconnect loops stop, a QWP/WebSocket publication store is\n terminalized with accepted frames still queued, and there is no way\n to attach a replacement provider to an existing handle. Disk-backed\n store-and-forward slots are not deleted and stay drainable by a\n later process, but this one will not send them.\n\n To recover, build a new provider **and** rebuild each sender, pool\n and reader that used the old one. Where that matters, sign in on a\n provider before attaching it and keep re-authentication on a\n separate, unattac""hed provider.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_21close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_20close}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("close (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_20close(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_20close(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { questdb_error *__pyx_v_err; int __pyx_v_ok; PyThreadState *__pyx_v_gs; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_21close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[61])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2833, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_18) < (0)) __PYX_ERR(1, 2833, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2834: """Permanently close this provider and cancel interruptible waits.
2835:
2836: A sign-in, silent-refresh coordination, or bundled file-store lock wait
2837: running on another thread is asked to stop, and the in-memory credential
2838: is dropped. Cloned native handles retained by attached transports share
2839: the closed state. Idempotent.
2840:
2841: The call ordinarily waits for the running operation to leave the native
2842: authentication critical section. While this provider's renderer callback
2843: is active, however, it publishes the close, drops the in-memory credential,
2844: and returns without waiting, regardless of which thread called it. A
2845: callback may delegate ``close()`` to another thread and join that thread,
2846: so waiting there could deadlock just as it would on the callback thread
2847: itself. A later ``close()`` after the callback returns performs the wait.
2848:
2849: The persisted entry is deliberately left behind so :meth:`clear` can
2850: still remove it after closing.
2851:
2852: .. warning::
2853:
2854: Closing is **terminal for every attached transport**, not merely a
2855: state they observe. Closing is monotonic, so every
2856: :class:`~questdb.Sender`, :func:`questdb.connect` pool and reader
2857: built from this provider fails its next token pull non-retryably:
2858: reconnect loops stop, a QWP/WebSocket publication store is
2859: terminalized with accepted frames still queued, and there is no way
2860: to attach a replacement provider to an existing handle. Disk-backed
2861: store-and-forward slots are not deleted and stay drainable by a
2862: later process, but this one will not send them.
2863:
2864: To recover, build a new provider **and** rebuild each sender, pool
2865: and reader that used the old one. Where that matters, sign in on a
2866: provider before attaching it and keep re-authentication on a
2867: separate, unattached provider.
2868: """
+2869: cdef questdb_error* err = NULL
__pyx_v_err = NULL;
2870: cdef bint ok
+2871: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+2872: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2872, __pyx_L1_error)
+2873: if self._raw == NULL:
__pyx_t_1 = (__pyx_v_self->_raw == NULL);
if (__pyx_t_1) {
/* … */
}
+2874: self._closed = True
__pyx_v_self->_closed = 1;
+2875: self._renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_renderer); __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2876: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
2877: # Deliberately NOT short-circuited on ``self._closed``. A close
2878: # published while a renderer callback is active marks the provider
2879: # closed without draining, because the callback runs inside the very
2880: # critical section the drain waits on.
2881: # Skipping the native call here on that flag left the drain permanently
2882: # unperformed: the later ``close()`` (or ``__exit__``) that could safely
2883: # drain became a no-op. Native close is idempotent and cheap on an
2884: # already-closed provider, so calling through unconditionally restores
2885: # the documented behaviour at no meaningful cost.
+2886: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2887: ok = questdb_oidc_auth_close(self._raw, &err)
__pyx_v_ok = questdb_oidc_auth_close(__pyx_v_self->_raw, (&__pyx_v_err));
+2888: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2889: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+2890: raise _oidc_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(1, 2890, __pyx_L1_error)
+2891: self._closed = True
__pyx_v_self->_closed = 1;
2892: # Detach presentation state eagerly. Besides releasing resources owned
2893: # by a renderer, this breaks a renderer -> provider back-reference on
2894: # explicit close without waiting for cyclic GC.
+2895: self._renderer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_renderer); __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
2896:
+2897: def __enter__(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_22__enter__, "Return this open provider for use as a context manager."); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_23__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_22__enter__}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_22__enter__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_22__enter__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_23__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[62])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_18) < (0)) __PYX_ERR(1, 2897, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2898: """Return this open provider for use as a context manager."""
+2899: self._require_open()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2899, __pyx_L1_error)
+2900: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
2901:
+2902: def __exit__(self, exc_type, exc_value, traceback):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_24__exit__, "Close the provider permanently when leaving a ``with`` block."); static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_25__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_24__exit__}; static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { CYTHON_UNUSED PyObject *__pyx_v_exc_type = 0; CYTHON_UNUSED PyObject *__pyx_v_exc_value = 0; CYTHON_UNUSED PyObject *__pyx_v_traceback = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_value,&__pyx_mstate_global->__pyx_n_u_traceback_2,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2902, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 2902, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 2902, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2902, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(1, 2902, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(1, 2902, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2902, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 2902, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 2902, __pyx_L3_error) } __pyx_v_exc_type = values[0]; __pyx_v_exc_value = values[1]; __pyx_v_traceback = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 2902, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_24__exit__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_value, __pyx_v_traceback); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_24__exit__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_value, CYTHON_UNUSED PyObject *__pyx_v_traceback) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_25__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[63])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_18) < (0)) __PYX_ERR(1, 2902, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2903: """Close the provider permanently when leaving a ``with`` block."""
+2904: self.close()
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2905: return False
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_False);
__pyx_r = Py_False;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
2906:
+2907: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_6config_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_6config_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_6config___get__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_6config___get__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
struct questdb_oidc_config_view __pyx_v_view;
PyObject *__pyx_v_OidcConfig = NULL;
PyObject *__pyx_v_client_id = NULL;
PyObject *__pyx_v_token_endpoint = NULL;
PyObject *__pyx_v_device_authorization_endpoint = NULL;
PyObject *__pyx_v_scope = NULL;
PyObject *__pyx_v_audience = NULL;
PyObject *__pyx_v_issuer = NULL;
PyObject *__pyx_v__strip_control = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_AddTraceback("questdb._client.OidcDeviceAuth.config.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_OidcConfig);
__Pyx_XDECREF(__pyx_v_client_id);
__Pyx_XDECREF(__pyx_v_token_endpoint);
__Pyx_XDECREF(__pyx_v_device_authorization_endpoint);
__Pyx_XDECREF(__pyx_v_scope);
__Pyx_XDECREF(__pyx_v_audience);
__Pyx_XDECREF(__pyx_v_issuer);
__Pyx_XDECREF(__pyx_v__strip_control);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
2908: def config(self):
2909: """The resolved OIDC configuration as an :class:`OidcConfig`.
2910:
2911: Reports the client id, the token and device-authorization endpoints, the
2912: scope, the selected token kind (``groups_in_token``), and the optional
2913: audience / issuer.
2914:
2915: Readable after :meth:`close`: the resolved configuration is immutable
2916: native state that closing does not invalidate. Raises ``RuntimeError``
2917: only on a provider that was never initialized.
2918: """
2919: cdef questdb_oidc_config_view view
+2920: self._require_same_process()
((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2920, __pyx_L1_error)
+2921: from questdb.auth._config import OidcConfig
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfig};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__config, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2921, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfig};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2921, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v_OidcConfig = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2922: if self._raw == NULL:
__pyx_t_5 = (__pyx_v_self->_raw == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+2923: raise RuntimeError('OidcDeviceAuth is not initialized')
__pyx_t_4 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_not_initialize};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2923, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2923, __pyx_L1_error)
+2924: memset(&view, 0, sizeof(questdb_oidc_config_view))
(void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_config_view))));
+2925: view.struct_size = sizeof(questdb_oidc_config_view)
__pyx_v_view.struct_size = (sizeof(struct questdb_oidc_config_view));
+2926: if not questdb_oidc_auth_get_config(self._raw, &view):
__pyx_t_5 = (!questdb_oidc_auth_get_config(__pyx_v_self->_raw, (&__pyx_v_view)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+2927: raise RuntimeError('native OIDC config view is unavailable')
__pyx_t_4 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_unava};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2927, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2927, __pyx_L1_error)
2928: # The callee replaces struct_size with the prefix it wrote. Static
2929: # linkage supplies the full v1 view today; checking still prevents an
2930: # out-of-prefix read if packaging ever loads an older shared library.
+2931: if not _oidc_config_view_is_full(view.struct_size):
__pyx_t_5 = __pyx_f_7questdb_7_client__oidc_config_view_is_full(__pyx_v_view.struct_size); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2931, __pyx_L1_error) __pyx_t_7 = (!__pyx_t_5); if (unlikely(__pyx_t_7)) { /* … */ }
+2932: raise RuntimeError('native OIDC config view is shorter than v1')
__pyx_t_4 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_short};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2932, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2932, __pyx_L1_error)
+2933: client_id = _oidc_text(view.client_id, view.client_id_len)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.client_id, __pyx_v_view.client_id_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_client_id = __pyx_t_1; __pyx_t_1 = 0;
+2934: token_endpoint = _oidc_text(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.token_endpoint, __pyx_v_view.token_endpoint_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_token_endpoint = __pyx_t_1; __pyx_t_1 = 0;
2935: view.token_endpoint, view.token_endpoint_len)
+2936: device_authorization_endpoint = _oidc_text(
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.device_authorization_endpoint, __pyx_v_view.device_authorization_endpoint_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_device_authorization_endpoint = __pyx_t_1; __pyx_t_1 = 0;
2937: view.device_authorization_endpoint,
2938: view.device_authorization_endpoint_len)
+2939: scope = _oidc_text(view.scope, view.scope_len)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.scope, __pyx_v_view.scope_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_scope = __pyx_t_1; __pyx_t_1 = 0;
+2940: audience = _oidc_text(view.audience, view.audience_len)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.audience, __pyx_v_view.audience_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_audience = __pyx_t_1; __pyx_t_1 = 0;
+2941: issuer = _oidc_text(view.issuer, view.issuer_len)
__pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.issuer, __pyx_v_view.issuer_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_issuer = __pyx_t_1; __pyx_t_1 = 0;
2942: # A built provider always resolves these; guard anyway so a weakened
2943: # native invariant surfaces clearly instead of seating None into
2944: # OidcConfig's non-optional str fields. audience / issuer stay optional.
+2945: if (client_id is None or token_endpoint is None
__pyx_t_5 = (__pyx_v_client_id == Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_7 = __pyx_t_5;
goto __pyx_L7_bool_binop_done;
}
/* … */
__pyx_t_5 = (__pyx_v_token_endpoint == Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_7 = __pyx_t_5;
goto __pyx_L7_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_7)) {
/* … */
}
+2946: or device_authorization_endpoint is None or scope is None):
__pyx_t_5 = (__pyx_v_device_authorization_endpoint == Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_7 = __pyx_t_5;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_scope == Py_None);
__pyx_t_7 = __pyx_t_5;
__pyx_L7_bool_binop_done:;
+2947: raise RuntimeError(
__pyx_t_4 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_missi};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2947, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(1, 2947, __pyx_L1_error)
2948: 'native OIDC config view is missing a required field')
2949: # Native config-view strings are not guaranteed display-sanitized (only
2950: # the device-flow event text is), yet OidcConfig's repr can reach a
2951: # terminal / notebook or a logged traceback. Strip control/bidi/zero-
2952: # width chars from every field so a MITM'd or hostile /settings response
2953: # cannot inject ANSI/bidi through this sink -- matching the sanitize-
2954: # every-sink posture of the renderers and OidcError. _render is stdlib-
2955: # only, so this lazy import introduces no cycle. Optional fields keep
2956: # None (absent) distinct from '' (present-but-empty).
2957: #
2958: # OidcConfig.__post_init__ enforces the same strip for every instance,
2959: # so this is belt-and-braces: it keeps the sanitization visible at the
2960: # native boundary, where the untrusted input actually enters, and
2961: # _strip_control is idempotent.
+2962: from questdb.auth._render import _strip_control
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_strip_control};
__pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__render, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2962, __pyx_L1_error)
}
__pyx_t_1 = __pyx_t_2;
__Pyx_GOTREF(__pyx_t_1);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_strip_control};
__pyx_t_3 = 0; {
__pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2962, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
switch (__pyx_t_3) {
case 0:
__Pyx_INCREF(__pyx_t_4);
__pyx_v__strip_control = __pyx_t_4;
break;
default:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2963: return OidcConfig(
__pyx_t_4 = NULL; __Pyx_INCREF(__pyx_v_OidcConfig); __pyx_t_8 = __pyx_v_OidcConfig; /* … */ #endif __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[8] = {__pyx_t_4, __pyx_t_9, __pyx_t_11, __pyx_t_12, __pyx_t_13, ((PyObject *)__pyx_t_14), __pyx_t_15, __pyx_t_10}; #if CYTHON_VECTORCALL __pyx_t_17 = __pyx_mstate_global->__pyx_tuple[14]; if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2963, __pyx_L1_error) __Pyx_INCREF(__pyx_t_17); #else { PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_client_id, __pyx_mstate_global->__pyx_n_u_token_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_scope, __pyx_mstate_global->__pyx_n_u_groups_in_token, __pyx_mstate_global->__pyx_n_u_audience, __pyx_mstate_global->__pyx_n_u_issuer}; __pyx_t_17 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 7); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } #endif __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_17); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; #if CYTHON_VECTORCALL #endif __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF((PyObject *)__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0; /* … */ { PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_client_id, __pyx_mstate_global->__pyx_n_u_token_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_scope, __pyx_mstate_global->__pyx_n_u_groups_in_token, __pyx_mstate_global->__pyx_n_u_audience, __pyx_mstate_global->__pyx_n_u_issuer}; __pyx_mstate_global->__pyx_tuple[14] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[14])) __PYX_ERR(1, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[14]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[14]);
+2964: client_id=_strip_control(client_id),
__pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v__strip_control); __pyx_t_11 = __pyx_v__strip_control; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_client_id}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); }
+2965: token_endpoint=_strip_control(token_endpoint),
__pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v__strip_control); __pyx_t_12 = __pyx_v__strip_control; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_token_endpoint}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); }
+2966: device_authorization_endpoint=_strip_control(
__pyx_t_10 = NULL;
__Pyx_INCREF(__pyx_v__strip_control);
__pyx_t_13 = __pyx_v__strip_control;
+2967: device_authorization_endpoint),
__pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_13))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_13, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_device_authorization_endpoint}; __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); }
+2968: scope=_strip_control(scope),
__pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v__strip_control); __pyx_t_14 = __pyx_v__strip_control; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_14); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_14, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_scope}; __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 2968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); }
+2969: groups_in_token=bool(view.groups_in_token),
__pyx_t_10 = NULL; __pyx_t_15 = __Pyx_PyLong_From_bool(__pyx_v_view.groups_in_token); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_15}; __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 2969, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_14); }
+2970: audience=(_strip_control(audience)
__pyx_t_16 = NULL;
__Pyx_INCREF(__pyx_v__strip_control);
__pyx_t_17 = __pyx_v__strip_control;
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_16);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_16);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_audience};
__pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_15 = __pyx_t_10;
__pyx_t_10 = 0;
} else {
+2971: if audience is not None else None),
__pyx_t_7 = (__pyx_v_audience != Py_None);
if (__pyx_t_7) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_15 = Py_None;
}
+2972: issuer=_strip_control(issuer) if issuer is not None else None)
__pyx_t_7 = (__pyx_v_issuer != Py_None);
if (__pyx_t_7) {
__pyx_t_16 = NULL;
__Pyx_INCREF(__pyx_v__strip_control);
__pyx_t_18 = __pyx_v__strip_control;
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_18))) {
__pyx_t_16 = PyMethod_GET_SELF(__pyx_t_18);
assert(__pyx_t_16);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
__Pyx_INCREF(__pyx_t_16);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_issuer};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2972, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__pyx_t_10 = __pyx_t_17;
__pyx_t_17 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_10 = Py_None;
}
#if CYTHON_VECTORCALL
2973:
2974:
+2975: def _debug_oidc_renderer_attached(OidcDeviceAuth provider not None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_56_debug_oidc_renderer_attached, "Internal test seam: whether construction published a renderer edge."); static PyMethodDef __pyx_mdef_7questdb_7_client_57_debug_oidc_renderer_attached = {"_debug_oidc_renderer_attached", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_56_debug_oidc_renderer_attached}; static PyObject *__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_oidc_renderer_attached (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_provider,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2975, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2975, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_renderer_attached", 0) < (0)) __PYX_ERR(1, 2975, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_renderer_attached", 1, 1, 1, i); __PYX_ERR(1, 2975, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2975, __pyx_L3_error) } __pyx_v_provider = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_oidc_renderer_attached", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2975, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_oidc_renderer_attached", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_provider), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, 0, "provider", 0))) __PYX_ERR(1, 2975, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_56_debug_oidc_renderer_attached(__pyx_self, __pyx_v_provider); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_56_debug_oidc_renderer_attached(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client._debug_oidc_renderer_attached", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_57_debug_oidc_renderer_attached, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_renderer_attached, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[66])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_renderer_attached, __pyx_t_18) < (0)) __PYX_ERR(1, 2975, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
2976: """Internal test seam: whether construction published a renderer edge."""
+2977: return provider._renderer is not None
__pyx_t_1 = (__pyx_v_provider->_renderer != Py_None); __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
2978:
2979:
+2980: cdef object _oidc_provider_from_user_data(void* user_data):
static PyObject *__pyx_f_7questdb_7_client__oidc_provider_from_user_data(void *__pyx_v_user_data) {
PyObject *__pyx_v_ref = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._oidc_provider_from_user_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_ref);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
2981: """Resolve the provider a native event belongs to. Requires the GIL.
2982:
2983: ``user_data`` is the integer key handed to native at registration, never a
2984: Python object pointer -- see ``_oidc_user_data_release_trampoline``. A
2985: missing key or a dead weakref both mean the provider is gone, which is not
2986: an error: the flow is simply no longer observed.
2987: """
+2988: ref = _OIDC_PROVIDERS.get(<size_t>user_data)
__pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_FromSize_t(((size_t)__pyx_v_user_data)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_ref = __pyx_t_1; __pyx_t_1 = 0;
+2989: if ref is None:
__pyx_t_5 = (__pyx_v_ref == Py_None);
if (__pyx_t_5) {
/* … */
}
+2990: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+2991: return ref()
__pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v_ref); __pyx_t_2 = __pyx_v_ref; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;