summaryrefslogtreecommitdiff
path: root/psycopg/psycopgmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'psycopg/psycopgmodule.c')
-rw-r--r--psycopg/psycopgmodule.c26
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) {