@@ -405,108 +405,107 @@ static void *PyBytesToUTF8(JSOBJ _obj, JSONTypeContext *tc, void *outValue,
405
405
406
406
static void * PyUnicodeToUTF8 (JSOBJ _obj , JSONTypeContext * tc , void * outValue ,
407
407
size_t * _outLen ) {
408
- return PyUnicode_AsUTF8AndSize (_obj , _outLen );
408
+ return PyUnicode_AsUTF8AndSize (_obj , _outLen );
409
409
}
410
410
411
-
412
411
/* returns a char* and mutates the pointer to *len */
413
412
static char * NpyDateTimeToIso (JSOBJ unused , JSONTypeContext * tc , void * _unused ,
414
- size_t * len ) {
415
- npy_datetimestruct dts ;
416
- int ret_code ;
417
- int64_t longVal = GET_TC (tc )-> longValue ;
418
-
419
- pandas_datetime_to_datetimestruct (longVal , NPY_FR_ns , & dts );
420
-
421
- NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
422
- * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
423
- char * result = PyObject_Malloc (* len );
424
-
425
- if (result == NULL ) {
426
- PyErr_NoMemory ();
427
- ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
428
- return NULL ;
429
- }
413
+ size_t * len ) {
414
+ npy_datetimestruct dts ;
415
+ int ret_code ;
416
+ int64_t longVal = GET_TC (tc )-> longValue ;
417
+
418
+ pandas_datetime_to_datetimestruct (longVal , NPY_FR_ns , & dts );
419
+
420
+ NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
421
+ * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
422
+ char * result = PyObject_Malloc (* len );
423
+
424
+ if (result == NULL ) {
425
+ PyErr_NoMemory ();
426
+ ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
427
+ return NULL ;
428
+ }
430
429
431
- ret_code = make_iso_8601_datetime (& dts , result , * len , base );
432
- if (ret_code != 0 ) {
433
- PyErr_SetString (PyExc_ValueError ,
434
- "Could not convert datetime value to string" );
435
- ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
436
- PyObject_Free (result );
437
- }
430
+ ret_code = make_iso_8601_datetime (& dts , result , * len , base );
431
+ if (ret_code != 0 ) {
432
+ PyErr_SetString (PyExc_ValueError ,
433
+ "Could not convert datetime value to string" );
434
+ ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
435
+ PyObject_Free (result );
436
+ }
438
437
439
- // Note that get_datetime_iso_8601_strlen just gives a generic size
440
- // for ISO string conversion, not the actual size used
441
- * len = strlen (result );
442
- return result ;
438
+ // Note that get_datetime_iso_8601_strlen just gives a generic size
439
+ // for ISO string conversion, not the actual size used
440
+ * len = strlen (result );
441
+ return result ;
443
442
}
444
443
445
444
static npy_datetime NpyDateTimeToEpoch (npy_datetime dt , NPY_DATETIMEUNIT base ) {
446
445
scaleNanosecToUnit (& dt , base );
447
446
return dt ;
448
- }
447
+ }
449
448
450
449
static char * PyDateTimeToIso (PyObject * obj , JSONTypeContext * tc , void * unused ,
451
- size_t * len ) {
452
- npy_datetimestruct dts ;
453
- int ret ;
454
-
455
- if (!PyDateTime_Check (obj )) {
456
- // TODO: raise TypeError
457
- }
458
-
459
- ret = convert_pydatetime_to_datetimestruct (obj , & dts );
460
- if (ret != 0 ) {
461
- if (!PyErr_Occurred ()) {
462
- PyErr_SetString (PyExc_ValueError ,
463
- "Could not convert PyDateTime to numpy datetime" );
450
+ size_t * len ) {
451
+ npy_datetimestruct dts ;
452
+ int ret ;
453
+
454
+ if (!PyDateTime_Check (obj )) {
455
+ // TODO: raise TypeError
464
456
}
465
- ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
466
- return NULL ;
467
- }
468
457
469
- NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
470
- * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
471
- char * result = PyObject_Malloc (* len );
472
- ret = make_iso_8601_datetime (& dts , result , * len , base );
458
+ ret = convert_pydatetime_to_datetimestruct (obj , & dts );
459
+ if (ret != 0 ) {
460
+ if (!PyErr_Occurred ()) {
461
+ PyErr_SetString (PyExc_ValueError ,
462
+ "Could not convert PyDateTime to numpy datetime" );
463
+ }
464
+ ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
465
+ return NULL ;
466
+ }
473
467
474
- if (ret != 0 ) {
475
- PRINTMARK ();
476
- PyErr_SetString (PyExc_ValueError ,
477
- "Could not convert datetime value to string" );
478
- ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
479
- PyObject_Free (result );
480
- return NULL ;
481
- }
468
+ NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
469
+ * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
470
+ char * result = PyObject_Malloc (* len );
471
+ ret = make_iso_8601_datetime (& dts , result , * len , base );
482
472
483
- // Note that get_datetime_iso_8601_strlen just gives a generic size
484
- // for ISO string conversion, not the actual size used
485
- * len = strlen (result );
486
- return result ;
473
+ if (ret != 0 ) {
474
+ PRINTMARK ();
475
+ PyErr_SetString (PyExc_ValueError ,
476
+ "Could not convert datetime value to string" );
477
+ ((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
478
+ PyObject_Free (result );
479
+ return NULL ;
480
+ }
481
+
482
+ // Note that get_datetime_iso_8601_strlen just gives a generic size
483
+ // for ISO string conversion, not the actual size used
484
+ * len = strlen (result );
485
+ return result ;
487
486
}
488
487
489
488
static npy_datetime PyDateTimeToEpoch (PyObject * obj , NPY_DATETIMEUNIT base ) {
490
- npy_datetimestruct dts ;
491
- int ret ;
492
-
493
- if (!PyDateTime_Check (obj )) {
494
- // TODO: raise TypeError
495
- }
496
-
497
- ret = convert_pydatetime_to_datetimestruct (obj , & dts );
498
- if (ret != 0 ) {
499
- if (!PyErr_Occurred ()) {
500
- PyErr_SetString (PyExc_ValueError ,
501
- "Could not convert PyDateTime to numpy datetime" );
489
+ npy_datetimestruct dts ;
490
+ int ret ;
491
+
492
+ if (!PyDateTime_Check (obj )) {
493
+ // TODO: raise TypeError
502
494
}
503
- // TODO: is setting errMsg required?
504
- //((JSONObjectEncoder *)tc->encoder)->errorMsg = "";
505
- // return NULL;
506
- }
507
495
508
- npy_datetime npy_dt = npy_datetimestruct_to_datetime (NPY_FR_ns , & dts );
509
- return NpyDateTimeToEpoch (npy_dt , base );
496
+ ret = convert_pydatetime_to_datetimestruct (obj , & dts );
497
+ if (ret != 0 ) {
498
+ if (!PyErr_Occurred ()) {
499
+ PyErr_SetString (PyExc_ValueError ,
500
+ "Could not convert PyDateTime to numpy datetime" );
501
+ }
502
+ // TODO: is setting errMsg required?
503
+ //((JSONObjectEncoder *)tc->encoder)->errorMsg = "";
504
+ // return NULL;
505
+ }
506
+
507
+ npy_datetime npy_dt = npy_datetimestruct_to_datetime (NPY_FR_ns , & dts );
508
+ return NpyDateTimeToEpoch (npy_dt , base );
510
509
}
511
510
512
511
static void * PyTimeToJSON (JSOBJ _obj , JSONTypeContext * tc , void * outValue ,
@@ -1710,38 +1709,41 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1710
1709
1711
1710
if (PyTypeNum_ISDATETIME (enc -> npyType )) {
1712
1711
PRINTMARK ();
1713
- int64_t longVal ;
1714
- PyArray_VectorUnaryFunc * castfunc =
1715
- PyArray_GetCastFunc (PyArray_DescrFromType (enc -> npyType ), NPY_INT64 );
1716
- if (!castfunc ) {
1717
- PyErr_Format (PyExc_ValueError , "Cannot cast numpy dtype %d to long" ,
1718
- enc -> npyType );
1719
- }
1720
- castfunc (enc -> npyValue , & longVal , 1 , NULL , NULL );
1721
- if (longVal == get_nat ()) {
1722
- PRINTMARK ();
1723
- tc -> type = JT_NULL ;
1724
- } else {
1725
-
1726
- if (enc -> datetimeIso ) {
1727
- PRINTMARK ();
1728
- pc -> PyTypeToJSON = NpyDateTimeToIso ;
1729
- // Currently no way to pass longVal to iso function, so use state management
1730
- GET_TC (tc )-> longValue = longVal ;
1731
- tc -> type = JT_UTF8 ;
1732
- } else {
1712
+ int64_t longVal ;
1713
+ PyArray_VectorUnaryFunc * castfunc =
1714
+ PyArray_GetCastFunc (PyArray_DescrFromType (enc -> npyType ), NPY_INT64 );
1715
+ if (!castfunc ) {
1716
+ PyErr_Format (PyExc_ValueError , "Cannot cast numpy dtype %d to long" ,
1717
+ enc -> npyType );
1718
+ }
1719
+ castfunc (enc -> npyValue , & longVal , 1 , NULL , NULL );
1720
+ if (longVal == get_nat ()) {
1733
1721
PRINTMARK ();
1734
- NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1735
- GET_TC (tc )-> longValue = NpyDateTimeToEpoch (longVal , base );
1736
- tc -> type = JT_LONG ;
1737
- }
1722
+ tc -> type = JT_NULL ;
1723
+ } else {
1724
+
1725
+ if (enc -> datetimeIso ) {
1726
+ PRINTMARK ();
1727
+ pc -> PyTypeToJSON = NpyDateTimeToIso ;
1728
+ // Currently no way to pass longVal to iso function, so use
1729
+ // state management
1730
+ GET_TC (tc )-> longValue = longVal ;
1731
+ tc -> type = JT_UTF8 ;
1732
+ } else {
1733
+ PRINTMARK ();
1734
+ NPY_DATETIMEUNIT base =
1735
+ ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1736
+ GET_TC (tc )-> longValue = NpyDateTimeToEpoch (longVal , base );
1737
+ tc -> type = JT_LONG ;
1738
+ }
1738
1739
}
1739
1740
1740
- // TODO: this prevents infinite loop with mixed-type DataFrames; refactor
1741
- enc -> npyCtxtPassthru = NULL ;
1742
- enc -> npyType = -1 ;
1741
+ // TODO: this prevents infinite loop with mixed-type DataFrames;
1742
+ // refactor
1743
+ enc -> npyCtxtPassthru = NULL ;
1744
+ enc -> npyType = -1 ;
1743
1745
return ;
1744
- }
1746
+ }
1745
1747
1746
1748
if (PyIter_Check (obj ) ||
1747
1749
(PyArray_Check (obj ) && !PyArray_CheckScalar (obj ))) {
@@ -1801,8 +1803,9 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1801
1803
tc -> type = JT_UTF8 ;
1802
1804
} else {
1803
1805
PRINTMARK ();
1804
- NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1805
- GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1806
+ NPY_DATETIMEUNIT base =
1807
+ ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1808
+ GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1806
1809
tc -> type = JT_LONG ;
1807
1810
}
1808
1811
return ;
@@ -1826,12 +1829,13 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1826
1829
tc -> type = JT_UTF8 ;
1827
1830
} else {
1828
1831
PRINTMARK ();
1829
- NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1830
- GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1832
+ NPY_DATETIMEUNIT base =
1833
+ ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1834
+ GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1831
1835
tc -> type = JT_LONG ;
1832
1836
}
1833
1837
return ;
1834
- } else if (PyDelta_Check (obj )) {
1838
+ } else if (PyDelta_Check (obj )) {
1835
1839
if (PyObject_HasAttrString (obj , "value" )) {
1836
1840
PRINTMARK ();
1837
1841
value = get_long_attr (obj , "value" );
0 commit comments