static PyObject *app_translations_new(PyTypeObject *type, PyObject *UNUSED(args), PyObject *UNUSED(kw)) { /* printf("%s (%p)\n", __func__, _translations); */ if (!_translations) { _translations = (BlenderAppTranslations *)type->tp_alloc(type, 0); if (_translations) { PyObject *py_ctxts; BLT_i18n_contexts_descriptor *ctxt; _translations->contexts = app_translations_contexts_make(); py_ctxts = _PyDict_NewPresized(ARRAY_SIZE(_contexts)); for (ctxt = _contexts; ctxt->c_id; ctxt++) { PyObject *val = PyUnicode_FromString(ctxt->py_id); PyDict_SetItemString(py_ctxts, ctxt->c_id, val); Py_DECREF(val); } _translations->contexts_C_to_py = PyDictProxy_New(py_ctxts); Py_DECREF(py_ctxts); /* The actual dict is only owned by its proxy */ _translations->py_messages = PyDict_New(); } } return (PyObject *)_translations; }
PyMODINIT_FUNC initweave(void) { PyObject* module = Py_InitModule("weave", NULL); if(!module) return; PyWeave_SnifferType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_SnifferType.tp_getset = PyWeave_SnifferGetSets; PyWeave_SnifferType.tp_methods = PyWeave_SnifferMethods; PyWeave_SnifferType.tp_members = PyWeave_SnifferMembers; if(PyType_Ready(&PyWeave_SnifferType) < 0) return; PyWeave_MessageType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_MessageType.tp_getset = PyWeave_MessageGetSets; PyWeave_MessageType.tp_members = PyWeave_MessageMembers; PyWeave_MessageType.tp_repr = (reprfunc)PyWeave_Message_tp_repr; if(PyType_Ready(&PyWeave_MessageType) < 0) return; if(PyModule_AddObject(module, "Message", (PyObject*)&PyWeave_MessageType) < 0) return; PyWeave_ClientMessageType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_ClientMessageType.tp_base = &PyWeave_MessageType; if(PyType_Ready(&PyWeave_ClientMessageType) < 0) return; if(PyModule_AddObject(module, "ClientMessage", (PyObject*)&PyWeave_ClientMessageType) < 0) return; PyWeave_ServerMessageType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_ServerMessageType.tp_base = &PyWeave_MessageType; if(PyType_Ready(&PyWeave_ServerMessageType) < 0) return; if(PyModule_AddObject(module, "ServerMessage", (PyObject*)&PyWeave_ServerMessageType) < 0) return; PyWeave_SessionInfoType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_SessionInfoType.tp_dealloc = (destructor)PyWeave_SessionInfo_tp_dealloc; PyWeave_SessionInfoType.tp_members = PyWeave_SessionInfoMembers; PyWeave_SessionInfoType.tp_getset = PyWeave_SessionInfoGetSets; if(PyType_Ready(&PyWeave_SessionInfoType) < 0) return; if(PyModule_AddObject(module, "SessionInfo", (PyObject*)&PyWeave_SessionInfoType) < 0) return; PyWeave_LogIterType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_LogIterType.tp_dealloc = (destructor)PyWeave_LogIter_tp_dealloc; PyWeave_LogIterType.tp_iter = (getiterfunc)PyWeave_LogIter_tp_iter; PyWeave_LogIterType.tp_iternext = (iternextfunc)PyWeave_LogIter_tp_iternext; if(PyType_Ready(&PyWeave_LogIterType) < 0) return; if(PyModule_AddObject(module, "LogIter", (PyObject*)&PyWeave_LogIterType) < 0) return; PyWeave_LogType.tp_flags = Py_TPFLAGS_DEFAULT; PyWeave_LogType.tp_init = (initproc)PyWeave_Log_tp_init; PyWeave_LogType.tp_new = PyType_GenericNew; PyWeave_LogType.tp_iter = (getiterfunc)PyWeave_Log_tp_iter; if(PyType_Ready(&PyWeave_LogType) < 0) return; if(PyModule_AddObject(module, "Log", (PyObject*)&PyWeave_LogType) < 0) return; sniffer = PyObject_New(PyWeave_SnifferObject, &PyWeave_SnifferType); sniffer->message_handler = NULL; if(!sniffer || PyModule_AddObject(module, "Sniffer", (PyObject*)sniffer) < 0) return; Py_INCREF(&PyWeave_SnifferType); Weave::GameConnection::message_callback = PyWeave_message_callback; PyObject* opcode_dict = PyDict_New(); if(!opcode_dict) return; unsigned int opcode_index; for(opcode_index = 0; opcode_index < Weave::Opcodes::count; opcode_index++) { if(PyModule_AddIntConstant(module, Weave::Opcodes::opcodes[opcode_index].name, (long)Weave::Opcodes::opcodes[opcode_index].opcode) < 0) return; PyObject* opcode_number = PyInt_FromLong((long)Weave::Opcodes::opcodes[opcode_index].opcode); PyObject* opcode_string = PyString_FromString(Weave::Opcodes::opcodes[opcode_index].name); PyDict_SetItem(opcode_dict, opcode_number, opcode_string); } PyObject* opcode_dict_proxy = PyDictProxy_New(opcode_dict); PyModule_AddObject(module, "opcodes", opcode_dict_proxy); }
PyObject* JySync_Init_PyDictProxy_From_JyDictProxy(jobject src, PyTypeObject* nonNativeSubtype) { env(NULL); return PyDictProxy_New(JyNI_PyObject_FromJythonPyObject((*env)->GetObjectField(env, src, pyDictProxy_dictField))); }
/* specific data convert for chunk_crawler */ void data_2_python(gpointer args, PyObject** pyobj_proxy){ PyObject *pdatablock; switch(((struct motor_args*)args)->type_id){ case 0:{ break; } case 1:{ break; } case 2:{ /* type_id 2 represents meta2 */ struct crawler_meta2_data_pack_s *data_block; data_block = ((struct motor_args*)args)->data_block; pdatablock = Py_BuildValue("{s:s, s:s, s:s, s:s}", "container_path", data_block->container_path, "container_id", data_block->container_id, "meta2_url", data_block->meta2_url, "ns_name", ((struct motor_args*)args)->ns_name); *pyobj_proxy = PyDictProxy_New(pdatablock); Py_XDECREF(pdatablock); break; } case 3: case 4:{ /* type_id 3 represents crawler */ PyObject *content_info = NULL, *chunk_info = NULL; struct crawler_chunk_data_pack_s *data_block; data_block = ((struct motor_args*)args)->data_block; /* data from content_info */ if (data_block->content_info) content_info = Py_BuildValue("{s:s, s:s, s:s, s:s, s:s, s:s}", "container_id", data_block->content_info->container_id, /* the container id */ "path", data_block->content_info->path, /* the content name */ "content_size", data_block->content_info->size, /* the content size */ "chunk_nb", data_block->content_info->chunk_nb, /* the number of chunks */ "metadata", data_block->content_info->metadata, /* the user metadata */ "system_metadata", data_block->content_info->system_metadata /* the system metadata */ ); else content_info = Py_BuildValue(""); /* data from chunk_info */ if (data_block->chunk_info) chunk_info = Py_BuildValue("{s:s, s:s, s:s, s:s, s:s, s:s, s:s, s:s, s:s}", "id", data_block->chunk_info->id, /* the chunk id */ "path", data_block->chunk_info->path, /* the chunk path */ "size", data_block->chunk_info->size, /* the chunk size */ "position", data_block->chunk_info->position, /* the chunk position */ "hash", data_block->chunk_info->hash, /* the chunk hash */ "metadata", data_block->chunk_info->metadata, /* the chunk metadata */ "container_id", data_block->chunk_info->container_id, /* the container id */ /*"last_scanned_time", data_block->chunk_info_extra->last_scanned_time, last_scanned_time */ "compressedsize", data_block->chunk_info_extra->compressedsize, /* size of compressed chunk */ "metadatacompress", data_block->chunk_info_extra->metadatacompress /* metadata of compressed chunk */ ); else chunk_info = Py_BuildValue(""); /* build the pdatablock */ pdatablock = Py_BuildValue("{s:O, s:O, s:l, s:l, s:l, s:s, s:s}", "content_info", content_info, "chunk_info", chunk_info, "atime", data_block->atime, "ctime", data_block->ctime, "mtime", data_block->mtime, "chunk_path", data_block->chunk_path, "ns_name", ((struct motor_args*)args)->ns_name ); *pyobj_proxy = PyDictProxy_New(pdatablock); Py_XDECREF(pdatablock); Py_XDECREF(content_info); Py_XDECREF(chunk_info); break; } case 5:{ /* type_id 5 represents sqlx */ struct crawler_sqlx_data_pack_s *data_block; data_block = ((struct motor_args*)args)->data_block; pdatablock = Py_BuildValue("{s:s, s:s, s:s, s:s, s:s, s:s}", "sqlx_path", data_block->sqlx_path, "sqlx_seq", data_block->sqlx_seq, "sqlx_cid", data_block->sqlx_cid, "sqlx_type", data_block->sqlx_type, "sqlx_url", data_block->sqlx_url, "ns_name", ((struct motor_args*)args)->ns_name); *pyobj_proxy = PyDictProxy_New(pdatablock); Py_XDECREF(pdatablock); break; } default:{ ERROR("type_id: %d not defined in c2python.c", ((struct motor_args*)args)->type_id); break; } } }