All pastes #921690 Raw Edit

Miscellany

public text v1 · immutable
#921690 ·published 2008-02-28 06:32 UTC
rendered paste body
#include "mymodmodule.h"
#include <Python/Python.h>




typedef struct {
	PyObject_HEAD
    PyObject *member1;
} MySubModuleObject;

// public members
//static PyMemberDef MyModule_members[] = {
//	{"member1", T_OBJECT_EX, offsetof(MyModuleObject, member1), 0, "member1 text"},    
//	{NULL}  // Sentinel
//};


// initialize the module
static int MySubModule_init(MySubModuleObject *self, PyObject *args, PyObject *kwds) {    
	return 0;
}

// destroy
static int MySubModule_dealloc(MySubModuleObject *self) {
    return 0;
}

static PyObject *MySubModule_test(MySubModuleObject *self) {
    printf("MySubModule_test\n");
    return Py_None;
}

// public methods
static PyMethodDef MySubModule_methods[] = {
	{"test", (PyCFunction)MySubModule_test, METH_NOARGS, "test."},
	{NULL}
};



static char MySubModule_doc[] = 
	"MySubModule.";

static PyTypeObject MySubModuleObjectType = {
	PyObject_HEAD_INIT(NULL)
	0,				/* ob_size           */
	"mymodule.MySubModule",			/* tp_name           */
	sizeof(MySubModuleObject),		/* tp_basicsize      */
	0,				/* tp_itemsize       */
	(destructor)MySubModule_dealloc,				/* tp_dealloc        */
	0,				/* tp_print          */
	0,				/* tp_getattr        */
	0,				/* tp_setattr        */
	0,				/* tp_compare        */
	0,				/* tp_repr           */
	0,				/* tp_as_number      */
	0,				/* tp_as_sequence    */
	0,				/* tp_as_mapping     */
	0,				/* tp_hash           */
	0,				/* tp_call           */
	0,				/* tp_str            */
	0,				/* tp_getattro       */
	0,				/* tp_setattro       */
	0,				/* tp_as_buffer      */
	Py_TPFLAGS_DEFAULT,		/* tp_flags          */
	MySubModule_doc,			/* tp_doc            */
	0,				/* tp_traverse       */
	0,				/* tp_clear          */
	0,				/* tp_richcompare    */
	0,				/* tp_weaklistoffset */
	0,				/* tp_iter           */
	0,				/* tp_iternext       */
	MySubModule_methods,	     		/* tp_methods        */
	0,			/* tp_members        */
	0,				/* tp_getset         */
	0,				/* tp_base           */
	0,				/* tp_dict           */
	0,				/* tp_descr_get      */
	0,				/* tp_descr_set      */
	0,				/* tp_dictoffset     */
	(initproc)MySubModule_init,		/* tp_init           */
};











typedef struct {
	PyObject_HEAD
    PyObject *member1;
} MyModuleObject;

// public members
//static PyMemberDef MyModule_members[] = {
//	{"member1", T_OBJECT_EX, offsetof(MyModuleObject, member1), 0, "member1 text"},    
//	{NULL}  // Sentinel
//};


// initialize the module
static int MyModule_init(MyModuleObject *self, PyObject *args, PyObject *kwds) {    
	return 0;
}

// destroy
static int MyModule_dealloc(MyModuleObject *self) {
    return 0;
}

static PyObject *MyModule_create(MyModuleObject *self) {
    printf("MyModule_create\n");

    PyObject *my_module = PyImport_ImportModule("mymodule");
    PyObject *my_class = PyObject_GetAttrString(my_module, "MySubModule");
    if(!my_class) return NULL;
    
    PyObject *m = PyInstance_New(my_class, NULL, NULL);
    
    printf("m=%08x\n", m);
    
    return m;
}

// public methods
static PyMethodDef MyModule_methods[] = {
	{"create", (PyCFunction)MyModule_create, METH_NOARGS, "create."},
	{NULL}
};



static char MyModule_doc[] = 
	"MyModule.";

static PyTypeObject MyModuleObjectType = {
	PyObject_HEAD_INIT(NULL)
	0,				/* ob_size           */
	"mymodule.MyModule",			/* tp_name           */
	sizeof(MyModuleObject),		/* tp_basicsize      */
	0,				/* tp_itemsize       */
	(destructor)MyModule_dealloc,				/* tp_dealloc        */
	0,				/* tp_print          */
	0,				/* tp_getattr        */
	0,				/* tp_setattr        */
	0,				/* tp_compare        */
	0,				/* tp_repr           */
	0,				/* tp_as_number      */
	0,				/* tp_as_sequence    */
	0,				/* tp_as_mapping     */
	0,				/* tp_hash           */
	0,				/* tp_call           */
	0,				/* tp_str            */
	0,				/* tp_getattro       */
	0,				/* tp_setattro       */
	0,				/* tp_as_buffer      */
	Py_TPFLAGS_DEFAULT,		/* tp_flags          */
	MyModule_doc,			/* tp_doc            */
	0,				/* tp_traverse       */
	0,				/* tp_clear          */
	0,				/* tp_richcompare    */
	0,				/* tp_weaklistoffset */
	0,				/* tp_iter           */
	0,				/* tp_iternext       */
	MyModule_methods,	     		/* tp_methods        */
	0,			/* tp_members        */
	0,				/* tp_getset         */
	0,				/* tp_base           */
	0,				/* tp_dict           */
	0,				/* tp_descr_get      */
	0,				/* tp_descr_set      */
	0,				/* tp_dictoffset     */
	(initproc)MyModule_init,		/* tp_init           */
};


















// Initialize the module
PyMODINIT_FUNC initmymodule(void) {
	PyObject* m;

	MyModuleObjectType.tp_new = PyType_GenericNew;
	if(PyType_Ready(&MyModuleObjectType) < 0) return;

	m = Py_InitModule3("mymodule", NULL, "XXX");
	if(m == NULL) return;

	Py_INCREF(&MyModuleObjectType);
	PyModule_AddObject(m, "MyModule", (PyObject *)&MyModuleObjectType);



	MySubModuleObjectType.tp_new = PyType_GenericNew;
	if(PyType_Ready(&MySubModuleObjectType) < 0) return;

//	m = Py_InitModule3("mymodule", NULL, "XXX");
//	if(m == NULL) return;

	Py_INCREF(&MySubModuleObjectType);
	PyModule_AddObject(m, "MySubModule", (PyObject *)&MySubModuleObjectType);

}