Skip to content

Commit 90d7ad2

Browse files
WillAydjreback
authored andcommitted
JSON Code Cleanup (#30671)
1 parent 63f332a commit 90d7ad2

File tree

1 file changed

+17
-43
lines changed

1 file changed

+17
-43
lines changed

pandas/_libs/src/ujson/python/objToJSON.c

Lines changed: 17 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -241,65 +241,39 @@ static int scaleNanosecToUnit(npy_int64 *value, NPY_DATETIMEUNIT unit) {
241241
static PyObject *get_values(PyObject *obj) {
242242
PyObject *values = NULL;
243243

244-
values = PyObject_GetAttrString(obj, "values");
245244
PRINTMARK();
246245

247-
if (values && !PyArray_CheckExact(values)) {
248-
249-
if (PyObject_HasAttrString(values, "to_numpy")) {
250-
values = PyObject_CallMethod(values, "to_numpy", NULL);
251-
}
252-
253-
if (PyObject_HasAttrString(values, "values")) {
254-
PyObject *subvals = get_values(values);
255-
PyErr_Clear();
256-
PRINTMARK();
257-
// subvals are sometimes missing a dimension
258-
if (subvals) {
259-
PyArrayObject *reshape = (PyArrayObject *)subvals;
260-
PyObject *shape = PyObject_GetAttrString(obj, "shape");
261-
PyArray_Dims dims;
262-
PRINTMARK();
263-
264-
if (!shape || !PyArray_IntpConverter(shape, &dims)) {
265-
subvals = NULL;
266-
} else {
267-
subvals = PyArray_Newshape(reshape, &dims, NPY_ANYORDER);
268-
PyDimMem_FREE(dims.ptr);
269-
}
270-
Py_DECREF(reshape);
271-
Py_XDECREF(shape);
272-
}
273-
Py_DECREF(values);
274-
values = subvals;
275-
} else {
276-
PRINTMARK();
277-
Py_DECREF(values);
278-
values = NULL;
279-
}
280-
}
281-
282-
if (!values && PyObject_HasAttrString(obj, "_internal_get_values")) {
246+
if (PyObject_HasAttrString(obj, "_internal_get_values")) {
283247
PRINTMARK();
284248
values = PyObject_CallMethod(obj, "_internal_get_values", NULL);
285-
if (values && !PyArray_CheckExact(values)) {
249+
250+
if (values == NULL) {
251+
// Clear so we can subsequently try another method
252+
PyErr_Clear();
253+
} else if (!PyArray_CheckExact(values)) {
254+
// Didn't get a numpy array, so keep trying
286255
PRINTMARK();
287256
Py_DECREF(values);
288257
values = NULL;
289258
}
290259
}
291260

292-
if (!values && PyObject_HasAttrString(obj, "get_block_values")) {
261+
if ((values == NULL) && PyObject_HasAttrString(obj, "get_block_values")) {
293262
PRINTMARK();
294263
values = PyObject_CallMethod(obj, "get_block_values", NULL);
295-
if (values && !PyArray_CheckExact(values)) {
264+
265+
if (values == NULL) {
266+
// Clear so we can subsequently try another method
267+
PyErr_Clear();
268+
} else if (!PyArray_CheckExact(values)) {
269+
// Didn't get a numpy array, so keep trying
296270
PRINTMARK();
297271
Py_DECREF(values);
298272
values = NULL;
299273
}
300274
}
301275

302-
if (!values) {
276+
if (values == NULL) {
303277
PyObject *typeRepr = PyObject_Repr((PyObject *)Py_TYPE(obj));
304278
PyObject *repr;
305279
PRINTMARK();
@@ -435,8 +409,8 @@ static char *int64ToIso(int64_t value, NPY_DATETIMEUNIT base, size_t *len) {
435409
}
436410

437411
/* JSON callback. returns a char* and mutates the pointer to *len */
438-
static char *NpyDateTimeToIsoCallback(JSOBJ Py_UNUSED(unused), JSONTypeContext *tc,
439-
size_t *len) {
412+
static char *NpyDateTimeToIsoCallback(JSOBJ Py_UNUSED(unused),
413+
JSONTypeContext *tc, size_t *len) {
440414
NPY_DATETIMEUNIT base = ((PyObjectEncoder *)tc->encoder)->datetimeUnit;
441415
return int64ToIso(GET_TC(tc)->longValue, base, len);
442416
}

0 commit comments

Comments
 (0)