PyObject * pyotherside_find_module(PyObject *self, PyObject *args) { char *fullname, *path; int err = PyArg_ParseTuple(args, "s|z", &fullname, &path); QString filename(fullname); qDebug() << "Search for module " + filename.toUtf8(); if(err == 0) { PyObject_Print(PyErr_Occurred(), stdout, Py_PRINT_RAW); PySys_WriteStdout("\n"); PyErr_Print(); PySys_WriteStdout("\n"); return Py_None; } QDir qrc(":/"); if (((qrc.exists(filename+".py")) | (qrc.exists(filename+".pyc")) | (qrc.exists(filename+".pyo"))) | (QDir(":/"+filename).exists())) { Py_INCREF(self); qDebug() << "Found module "+filename.toUtf8(); return self; } qDebug() << "Can't found module "+filename.toUtf8(); Py_INCREF(Py_None); return Py_None; }
bool PackageGenerator::buildQRC(){ output("Build qrc"); for(qint32 s=0;s<_targetSizes.size();++s){ QString sizeset=FKUtility::sizeToString(_targetSizes.at(s)); QFile qrc(QString("%1/package.qrc").arg(_buildFolder.filePath(sizeset))); if(qrc.open(QIODevice::WriteOnly)){ QXmlStreamWriter xml(&qrc); xml.writeStartElement("RCC"); xml.writeStartElement("qresource"); xml.writeAttribute("prefix","/"+_sourceFolder.dirName()); for(QMap<QString,ImageSetting>::ConstIterator i=_imageSettings.constBegin();i!=_imageSettings.constEnd();++i){ xml.writeTextElement("file",i.key()); } xml.writeEndElement(); xml.writeEndElement(); }else{ output(QString("Unable write qrc file for %1 package %2 sizeset").arg(_sourceFolder.dirName()).arg(sizeset)); return false; } } output("Success"); return true; }
static PyObject * pyotherside_get_code_from_data(QString filename) { QString buf; QDir qrc(":/"); PyObject *module_code; FILE *fh; if (qrc.exists(filename+"/__init__.py")) { QFile module_data(":/"+filename+"/__init__.py"); if(module_data.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream data(&module_data); buf = data.readAll(); module_data.close(); if (buf == NULL) { qDebug() << "Can t get code of "+filename.toUtf8(); } // Compile module code module_code = Py_CompileString(buf.toUtf8().constData(), filename.toUtf8().constData(), Py_file_input); if (module_code != NULL){ return module_code; } else { qDebug() << "Can t compile code of "+filename.toUtf8(); return NULL; } } else { qDebug() << "Can't get content from qrc (__init__) for "+filename.toUtf8(); } } // WIP /*if (qrc.exists(filename+".pyc")) { QFile module_data(":/"+filename+".pyc"); qDebug() << "Opening compiled module pyc : " + filename.toUtf8(); if(module_data.open(QIODevice::ReadOnly | QIODevice::Text)) { int h = module_data.handle(); FILE* fh = fdopen(h, "rb"); qDebug() << "Read MarchalObject from fh : " + filename.toUtf8(); module_code = PyMarshal_ReadObjectFromFile(fh); fclose(fh); qDebug() << "Close MarchalObject from fh : " + filename.toUtf8(); //Load bytecode qDebug() << "Loading bytecode from fh : " + filename.toUtf8(); module_code = unmarshal_code(filename.toUtf8().data(), PyBytes_FromString(buf.toUtf8().data())); if (module_code != NULL){ qDebug() << "Bytecode loaded from fh : " + filename.toUtf8(); return module_code; } } }*/ // WIP /*if (qrc.exists(filename+".pyo")) { QFile module_data(":/"+filename+".pyo"); if(module_data.open(QIODevice::ReadOnly | QIODevice::Text)) { buf = module_data.readAll().constData(); //Load bytecode module_code = unmarshal_code(filename.toUtf8().data(), PyBytes_FromString(buf)); if (module_code != NULL){ return module_code; } } }*/ if (qrc.exists(filename+".py")) { QFile module_data(":/"+filename+".py"); if(module_data.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream data(&module_data); buf = data.readAll(); module_data.close(); qDebug() << "Content:"; qDebug() << buf; // Compile module code module_code = Py_CompileString(buf.toUtf8().constData(), filename.toUtf8().constData(), Py_file_input); if (module_code != NULL){ return module_code; } else { qDebug() << "Can t compile code of "+filename.toUtf8(); return NULL; } } else { qDebug() << "Can't get qrc content for " + filename.toUtf8(); } } qDebug() << filename.toUtf8() + ' not found'; return NULL; }