Skip to content

Commit

Permalink
Fix resource path parsing on Windows and fix empty/null messages list (
Browse files Browse the repository at this point in the history
  • Loading branch information
jrbull committed May 2, 2023
1 parent 3a00eb4 commit 4935fca
Showing 1 changed file with 32 additions and 29 deletions.
61 changes: 32 additions & 29 deletions pythonfmu/pythonfmu-export/src/pythonfmu/PySlaveInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,39 +104,41 @@ void PySlaveInstance::clearLogBuffer() const
PyObject* categoryField = Py_BuildValue("s", "category");
PyObject* statusField = Py_BuildValue("s", "status");

auto size = PyList_Size(pMessages_);
for (auto i = 0; i < size; i++) {
PyObject* msg = PyList_GetItem(pMessages_, i);

auto debugAttr = PyObject_GetAttr(msg, debugField);
auto msgAttr = PyObject_GetAttr(msg, msgField);
auto categoryAttr = PyObject_GetAttr(msg, categoryField);
auto statusAttr = PyObject_GetAttr(msg, statusField);

auto statusValue = static_cast<cppfmu::FMIStatus>(PyLong_AsLong(statusAttr));

PyObject* msgValue = PyUnicode_AsEncodedString(msgAttr, "utf-8", nullptr);
char* msgStr = PyBytes_AsString(msgValue);
logStrBuffer.emplace_back(msgValue);

const char* categoryStr = "";
if (categoryAttr != Py_None) {
PyObject* categoryValue = PyUnicode_AsEncodedString(categoryAttr, "utf-8", nullptr);
categoryStr = PyBytes_AsString(categoryValue);
logStrBuffer.emplace_back(categoryValue);
}

if (PyObject_IsTrue(debugAttr)) {
const_cast<cppfmu::Logger&>(logger_).DebugLog(statusValue, categoryStr, msgStr);
} else {
const_cast<cppfmu::Logger&>(logger_).Log(statusValue, categoryStr, msgStr);
}
if ( pMessages_ != NULL && PyList_Check(pMessages_) ) {
auto size = PyList_Size(pMessages_);
for (auto i = 0; i < size; i++) {
PyObject* msg = PyList_GetItem(pMessages_, i);

auto debugAttr = PyObject_GetAttr(msg, debugField);
auto msgAttr = PyObject_GetAttr(msg, msgField);
auto categoryAttr = PyObject_GetAttr(msg, categoryField);
auto statusAttr = PyObject_GetAttr(msg, statusField);

auto statusValue = static_cast<cppfmu::FMIStatus>(PyLong_AsLong(statusAttr));

PyObject* msgValue = PyUnicode_AsEncodedString(msgAttr, "utf-8", nullptr);
char* msgStr = PyBytes_AsString(msgValue);
logStrBuffer.emplace_back(msgValue);

const char* categoryStr = "";
if (categoryAttr != Py_None) {
PyObject* categoryValue = PyUnicode_AsEncodedString(categoryAttr, "utf-8", nullptr);
categoryStr = PyBytes_AsString(categoryValue);
logStrBuffer.emplace_back(categoryValue);
}

if (PyObject_IsTrue(debugAttr)) {
const_cast<cppfmu::Logger&>(logger_).DebugLog(statusValue, categoryStr, msgStr);
} else {
const_cast<cppfmu::Logger&>(logger_).Log(statusValue, categoryStr, msgStr);
}
}
PyList_SetSlice(pMessages_, 0, size, nullptr);
}
Py_DECREF(debugField);
Py_DECREF(msgField);
Py_DECREF(categoryField);
Py_DECREF(statusField);
PyList_SetSlice(pMessages_, 0, size, nullptr);
}

void PySlaveInstance::initialize(PyGILState_STATE gilState)
Expand Down Expand Up @@ -548,7 +550,8 @@ cppfmu::UniquePtr<cppfmu::SlaveInstance> CppfmuInstantiateSlave(
const cppfmu::Logger& logger)
{

auto resources = std::string(fmuResourceLocation);
// Convert URI %20 to space
auto resources = std::regex_replace(std::string(fmuResourceLocation), std::regex("%20"), " ");
auto find = resources.find("file://");

if (find != std::string::npos) {
Expand Down

0 comments on commit 4935fca

Please sign in to comment.