@@ -45,8 +45,7 @@ Numeric decoder derived from from TCL library
45
45
#include <numpy/ndarraytypes.h>
46
46
#include <numpy/npy_math.h>
47
47
#include <ultrajson.h>
48
- #include <../../../tslibs/src/datetime/np_datetime.h>
49
- #include <../../../tslibs/src/datetime/np_datetime_strings.h>
48
+ #include "date_conversions.h"
50
49
#include "datetime.h"
51
50
52
51
static PyTypeObject * type_decimal ;
@@ -209,34 +208,6 @@ static TypeContext *createTypeContext(void) {
209
208
return pc ;
210
209
}
211
210
212
- /*
213
- * Function: scaleNanosecToUnit
214
- * -----------------------------
215
- *
216
- * Scales an integer value representing time in nanoseconds to provided unit.
217
- *
218
- * Mutates the provided value directly. Returns 0 on success, non-zero on error.
219
- */
220
- static int scaleNanosecToUnit (npy_int64 * value , NPY_DATETIMEUNIT unit ) {
221
- switch (unit ) {
222
- case NPY_FR_ns :
223
- break ;
224
- case NPY_FR_us :
225
- * value /= 1000LL ;
226
- break ;
227
- case NPY_FR_ms :
228
- * value /= 1000000LL ;
229
- break ;
230
- case NPY_FR_s :
231
- * value /= 1000000000LL ;
232
- break ;
233
- default :
234
- return -1 ;
235
- }
236
-
237
- return 0 ;
238
- }
239
-
240
211
static PyObject * get_values (PyObject * obj ) {
241
212
PyObject * values = NULL ;
242
213
@@ -379,79 +350,13 @@ static char *PyUnicodeToUTF8(JSOBJ _obj, JSONTypeContext *Py_UNUSED(tc),
379
350
return (char * )PyUnicode_AsUTF8AndSize (_obj , (Py_ssize_t * )_outLen );
380
351
}
381
352
382
- /* Converts the int64_t representation of a datetime to ISO; mutates len */
383
- static char * int64ToIso (int64_t value , NPY_DATETIMEUNIT base , size_t * len ) {
384
- npy_datetimestruct dts ;
385
- int ret_code ;
386
-
387
- pandas_datetime_to_datetimestruct (value , NPY_FR_ns , & dts );
388
-
389
- * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
390
- char * result = PyObject_Malloc (* len );
391
-
392
- if (result == NULL ) {
393
- PyErr_NoMemory ();
394
- return NULL ;
395
- }
396
-
397
- ret_code = make_iso_8601_datetime (& dts , result , * len , base );
398
- if (ret_code != 0 ) {
399
- PyErr_SetString (PyExc_ValueError ,
400
- "Could not convert datetime value to string" );
401
- PyObject_Free (result );
402
- }
403
-
404
- // Note that get_datetime_iso_8601_strlen just gives a generic size
405
- // for ISO string conversion, not the actual size used
406
- * len = strlen (result );
407
- return result ;
408
- }
409
-
410
353
/* JSON callback. returns a char* and mutates the pointer to *len */
411
354
static char * NpyDateTimeToIsoCallback (JSOBJ Py_UNUSED (unused ),
412
355
JSONTypeContext * tc , size_t * len ) {
413
356
NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
414
357
return int64ToIso (GET_TC (tc )-> longValue , base , len );
415
358
}
416
359
417
- static npy_datetime NpyDateTimeToEpoch (npy_datetime dt , NPY_DATETIMEUNIT base ) {
418
- scaleNanosecToUnit (& dt , base );
419
- return dt ;
420
- }
421
-
422
- /* Convert PyDatetime To ISO C-string. mutates len */
423
- static char * PyDateTimeToIso (PyDateTime_Date * obj , NPY_DATETIMEUNIT base ,
424
- size_t * len ) {
425
- npy_datetimestruct dts ;
426
- int ret ;
427
-
428
- ret = convert_pydatetime_to_datetimestruct (obj , & dts );
429
- if (ret != 0 ) {
430
- if (!PyErr_Occurred ()) {
431
- PyErr_SetString (PyExc_ValueError ,
432
- "Could not convert PyDateTime to numpy datetime" );
433
- }
434
- return NULL ;
435
- }
436
-
437
- * len = (size_t )get_datetime_iso_8601_strlen (0 , base );
438
- char * result = PyObject_Malloc (* len );
439
- ret = make_iso_8601_datetime (& dts , result , * len , base );
440
-
441
- if (ret != 0 ) {
442
- PRINTMARK ();
443
- PyErr_SetString (PyExc_ValueError ,
444
- "Could not convert datetime value to string" );
445
- PyObject_Free (result );
446
- return NULL ;
447
- }
448
-
449
- // Note that get_datetime_iso_8601_strlen just gives a generic size
450
- // for ISO string conversion, not the actual size used
451
- * len = strlen (result );
452
- return result ;
453
- }
454
-
455
360
/* JSON callback */
456
361
static char * PyDateTimeToIsoCallback (JSOBJ obj , JSONTypeContext * tc ,
457
362
size_t * len ) {
@@ -465,30 +370,6 @@ static char *PyDateTimeToIsoCallback(JSOBJ obj, JSONTypeContext *tc,
465
370
return PyDateTimeToIso (obj , base , len );
466
371
}
467
372
468
- static npy_datetime PyDateTimeToEpoch (PyObject * obj , NPY_DATETIMEUNIT base ) {
469
- npy_datetimestruct dts ;
470
- int ret ;
471
-
472
- if (!PyDate_Check (obj )) {
473
- // TODO: raise TypeError
474
- }
475
- PyDateTime_Date * dt = (PyDateTime_Date * )obj ;
476
-
477
- ret = convert_pydatetime_to_datetimestruct (dt , & dts );
478
- if (ret != 0 ) {
479
- if (!PyErr_Occurred ()) {
480
- PyErr_SetString (PyExc_ValueError ,
481
- "Could not convert PyDateTime to numpy datetime" );
482
- }
483
- // TODO: is setting errMsg required?
484
- //((JSONObjectEncoder *)tc->encoder)->errorMsg = "";
485
- // return NULL;
486
- }
487
-
488
- npy_datetime npy_dt = npy_datetimestruct_to_datetime (NPY_FR_ns , & dts );
489
- return NpyDateTimeToEpoch (npy_dt , base );
490
- }
491
-
492
373
static char * PyTimeToJSON (JSOBJ _obj , JSONTypeContext * tc , size_t * outLen ) {
493
374
PyObject * obj = (PyObject * )_obj ;
494
375
PyObject * str ;
@@ -1814,7 +1695,7 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1814
1695
PRINTMARK ();
1815
1696
NPY_DATETIMEUNIT base =
1816
1697
((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1817
- GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1698
+ GET_TC (tc )-> longValue = PyDateTimeToEpoch (( PyDateTime_Date * ) obj , base );
1818
1699
tc -> type = JT_LONG ;
1819
1700
}
1820
1701
return ;
@@ -1840,7 +1721,7 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1840
1721
PRINTMARK ();
1841
1722
NPY_DATETIMEUNIT base =
1842
1723
((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
1843
- GET_TC (tc )-> longValue = PyDateTimeToEpoch (obj , base );
1724
+ GET_TC (tc )-> longValue = PyDateTimeToEpoch (( PyDateTime_Date * ) obj , base );
1844
1725
tc -> type = JT_LONG ;
1845
1726
}
1846
1727
return ;
0 commit comments