From 7bd9f41c65f5078279333dcd2bd07fa5bc5ebc11 Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Tue, 4 Jul 2000 23:51:31 +0000 Subject: [PATCH] pyexpat.errors is a *strange* module! It gets initialized when pyexpat is imported, and is only accessible as an attribute of pyexpat; it cannot be imported itself. This allows it to at least be importable after pyexpat itself has been imported by adding it to sys.modules, so it is not quite as strange. This arrangement needs to be better thought out. --- Modules/pyexpat.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index a403d947947..e0c03f60cb5 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -840,41 +840,43 @@ static char pyexpat_module_documentation[] = void initpyexpat(){ PyObject *m, *d; - char *rev="$Revision$"; + char *rev = "$Revision$"; PyObject *errors_module, *errors_dict; + PyObject *sys_modules; - Xmlparsetype.ob_type = &PyType_Type; + Xmlparsetype.ob_type = &PyType_Type; /* Create the module and add the functions */ m = Py_InitModule4("pyexpat", pyexpat_methods, - pyexpat_module_documentation, - (PyObject*)NULL,PYTHON_API_VERSION); + pyexpat_module_documentation, + (PyObject*)NULL, PYTHON_API_VERSION); /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); ErrorObject = PyString_FromString("pyexpat.error"); PyDict_SetItemString(d, "error", ErrorObject); - PyDict_SetItemString(d,"__version__", + PyDict_SetItemString(d, "__version__", PyString_FromStringAndSize(rev+11, strlen(rev+11)-2)); - errors_module=PyModule_New( "errors" ); - PyDict_SetItemString(d,"errors", errors_module ); + sys_modules = PySys_GetObject("modules"); + errors_module = PyModule_New("pyexpat.errors"); + PyDict_SetItemString(d, "errors", errors_module); + PyDict_SetItemString(sys_modules, "pyexpat.errors", errors_module); /* XXX When Expat supports some way of figuring out how it was compiled, this should check and set native_encoding appropriately. */ PyDict_SetItemString(d, "native_encoding", - PyString_FromString("UTF-8") ); - - errors_dict=PyModule_GetDict( errors_module ); + PyString_FromString("UTF-8")); + errors_dict = PyModule_GetDict(errors_module); #define MYCONST(name) \ PyDict_SetItemString(errors_dict, #name, \ - PyString_FromString( XML_ErrorString(name))) - + PyString_FromString(XML_ErrorString(name))) + MYCONST(XML_ERROR_NO_MEMORY); MYCONST(XML_ERROR_SYNTAX); MYCONST(XML_ERROR_NO_ELEMENTS); @@ -894,7 +896,7 @@ initpyexpat(){ MYCONST(XML_ERROR_MISPLACED_XML_PI); MYCONST(XML_ERROR_UNKNOWN_ENCODING); MYCONST(XML_ERROR_INCORRECT_ENCODING); - + /* Check for errors */ if (PyErr_Occurred()) Py_FatalError("can't initialize module pyexpat"); @@ -1030,4 +1032,3 @@ statichere struct HandlerInfo handler_info[]= {NULL, NULL, NULL } /* sentinel */ }; -