diff options
Diffstat (limited to 'psycopg/psycopgmodule.c')
-rw-r--r-- | psycopg/psycopgmodule.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/psycopg/psycopgmodule.c b/psycopg/psycopgmodule.c index 4764b8e..26e17e0 100644 --- a/psycopg/psycopgmodule.c +++ b/psycopg/psycopgmodule.c @@ -48,6 +48,7 @@ #include "psycopg/adapter_asis.h" #include "psycopg/adapter_list.h" #include "psycopg/typecast_binary.h" +#include "psycopg/typecast_datetime.h" #ifdef HAVE_MXDATETIME #include <mxDateTime.h> @@ -59,10 +60,6 @@ HIDDEN mxDateTimeModule_APIObject *mxDateTimeP = NULL; #include <datetime.h> #include "psycopg/adapter_datetime.h" HIDDEN PyObject *pyDateTimeModuleP = NULL; -HIDDEN PyObject *pyDateTypeP = NULL; -HIDDEN PyObject *pyTimeTypeP = NULL; -HIDDEN PyObject *pyDateTimeTypeP = NULL; -HIDDEN PyObject *pyDeltaTypeP = NULL; /* pointers to the psycopg.tz classes */ HIDDEN PyObject *pyPsycopgTzModule = NULL; @@ -312,13 +309,13 @@ psyco_adapters_init(PyObject *mod) /* the module has already been initialized, so we can obtain the callable objects directly from its dictionary :) */ call = PyMapping_GetItemString(mod, "DateFromPy"); - microprotocols_add((PyTypeObject*)pyDateTypeP, NULL, call); + microprotocols_add(PyDateTimeAPI->DateType, NULL, call); call = PyMapping_GetItemString(mod, "TimeFromPy"); - microprotocols_add((PyTypeObject*)pyTimeTypeP, NULL, call); + microprotocols_add(PyDateTimeAPI->TimeType, NULL, call); call = PyMapping_GetItemString(mod, "TimestampFromPy"); - microprotocols_add((PyTypeObject*)pyDateTimeTypeP, NULL, call); + microprotocols_add(PyDateTimeAPI->DateTimeType, NULL, call); call = PyMapping_GetItemString(mod, "IntervalFromPy"); - microprotocols_add((PyTypeObject*)pyDeltaTypeP, NULL, call); + microprotocols_add(PyDateTimeAPI->DeltaType, NULL, call); #ifdef HAVE_MXDATETIME /* as above, we use the callable objects from the psycopg module */ @@ -776,16 +773,15 @@ init_psycopg(void) PyErr_SetString(PyExc_ImportError, "can't import datetime module"); return; } + + /* Initialize the PyDateTimeAPI everywhere is used */ + PyDateTime_IMPORT; + if (psyco_adapter_datetime_init()) { return; } + if (psyco_typecast_datetime_init()) { return; } + pydatetimeType.ob_type = &PyType_Type; if (PyType_Ready(&pydatetimeType) == -1) return; - /* now we define the datetime types, this is crazy because python should - be doing that, not us! */ - pyDateTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "date"); - pyTimeTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "time"); - pyDateTimeTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "datetime"); - pyDeltaTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "timedelta"); - /* import psycopg2.tz anyway (TODO: replace with C-level module?) */ pyPsycopgTzModule = PyImport_ImportModule("psycopg2.tz"); if (pyPsycopgTzModule == NULL) { |