{"action":"created","comment":{"url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/comments/54252277","id":54252277,"diff_hunk":"@@ -0,0 +1,187 @@\n+/* Additional includes go here */\r\n+\r\n+#include <Python.h>\r\n+#include <string>\r\n+#include <sys/types.h>\r\n+#include <sys/stat.h>\r\n+#include <fcntl.h>\r\n+#include <stdio.h>\r\n+#include <memory>\r\n+\r\n+#include \"splpy.h\"\r\n+\r\n+<%SPL::CodeGen::implementationPrologue($model);%>\r\n+\r\n+<%\r\n+ my $attr =  $model->getInputPortAt(0)->getAttributeAt(0);\r\n+ my $pystyle = 'unk';\r\n+ if ($attr->getName() eq '__spl_po') {\r\n+    $pystyle = 'python';\r\n+ } elsif ($attr->getName() eq 'string') {\r\n+    $pystyle = 'string';\r\n+ } elsif ($attr->getName() eq 'jsonString') {\r\n+    $pystyle = 'json';\r\n+ }\r\n+%>\r\n+\r\n+// Constructor\r\n+MY_OPERATOR::MY_OPERATOR()\r\n+{\r\n+  std::string tkDir = ProcessingElement::pe().getToolkitDirectory();\r\n+  std::string streamsxDir = tkDir + \"/opt/python/packages/streamsx/topology\";\r\n+  std::string splpySetup = streamsxDir + \"/splpy_setup.py\";\r\n+  const char* spl_setup_py = splpySetup.c_str();\r\n+\r\n+  streamsx::topology::Splpy::loadCPython(spl_setup_py);\r\n+\r\n+  PyGILState_STATE gstate;\r\n+  gstate = PyGILState_Ensure();\r\n+\r\n+    PyObject *_module_;\r\n+    PyObject *_function_;\r\n+\r\n+    std::string appDirSetup = \"import streamsx.topology.runtime\\n\";\r\n+    appDirSetup += \"streamsx.topology.runtime.setupOperator(\\\"\";\r\n+    appDirSetup += ProcessingElement::pe().getApplicationDirectory();\r\n+    appDirSetup += \"\\\")\\n\";\r\n+\r\n+    const char* spl_setup_appdir = appDirSetup.c_str();\r\n+    if (PyRun_SimpleString(spl_setup_appdir) != 0) {\r\n+         SPLAPPTRC(L_ERROR, \"Python script splpy_setup.py failed!\", \"python\");\r\n+         PyErr_Print();\r\n+         throw;\r\n+    }\r\n+\r\n+<%\r\n+ my $module =  $model->getParameterByName(\"functionModule\")->getValueAt(0)->getCppExpression() . '.c_str()';\r\n+ my $functionName = $model->getParameterByName(\"functionName\")->getValueAt(0)->getCppExpression() . '.c_str()';\r\n+%>\r\n+\r\n+    PyObject * appFunction = \r\n+      streamsx::topology::Splpy::loadFunction(<%=$module%>, <%=$functionName%>);\r\n+\r\n+<% if ($pystyle eq 'python') { %>\r\n+\r\n+    PyObject * depickleInput = \r\n+      streamsx::topology::Splpy::loadFunction(\"streamsx.topology.runtime\", \"depickleInput\");\r\n+\r\n+    PyObject * funcArg = PyTuple_New(1);\r\n+    PyTuple_SetItem(funcArg, 0, appFunction);\r\n+\r\n+    function_ = PyObject_CallObject(depickleInput, funcArg);\r\n+    // TODO error check\r\n+    Py_DECREF(depickleInput);\r\n+    Py_DECREF(funcArg);\r\n+    \r\n+    iterableObjectFunction_ = \r\n+      streamsx::topology::Splpy::loadFunction(\"streamsx.topology.runtime\", \"iterableObject\");\r\n+\r\n+<%}%>\r\n+<% if ($pystyle eq 'string') { %>\r\n+    function_ = appFunction;\r\n+<%}%>\r\n+\r\n+    PyGILState_Release(gstate);\r\n+}\r\n+\r\n+// Destructor\r\n+MY_OPERATOR::~MY_OPERATOR() \r\n+{\r\n+    // Finalization code goes here\r\n+    if (function_) {\r\n+      Py_DECREF(function_);\r\n+    }\r\n+    if (iterableObjectFunction_) {\r\n+      Py_DECREF(iterableObjectFunction_);\r\n+    }\r\n+}\r\n+\r\n+// Notify port readiness\r\n+void MY_OPERATOR::allPortsReady() \r\n+{\r\n+}\r\n+ \r\n+// Notify pending shutdown\r\n+void MY_OPERATOR::prepareToShutdown() \r\n+{\r\n+    // This is an asynchronous call\r\n+}\r\n+\r\n+// Processing for source and threaded operators   \r\n+void MY_OPERATOR::process(uint32_t idx)\r\n+{\r\n+}\r\n+\r\n+// Tuple processing for mutating ports \r\n+void MY_OPERATOR::process(Tuple & tuple, uint32_t port)\r\n+{\r\n+}\r\n+\r\n+// Tuple processing for non-mutating ports\r\n+void MY_OPERATOR::process(Tuple const & tuple, uint32_t port)\r\n+{\r\n+  IPort0Type const &ip = static_cast<IPort0Type const &>(tuple);\r\n+\r\n+<% if ($pystyle eq 'python') { %>\r\n+  SPL::blob value = ip.get___spl_po();\r\n+<%}%>\r\n+\r\n+<% if ($pystyle eq 'string') { %>\r\n+  SPL::rstring value = ip.get_string();\r\n+<%}%>\r\n+\r\n+  std::auto_ptr<SPL::blob> pBlob;\r\n+  PyGILState_STATE gstate;\r\n+  gstate = PyGILState_Ensure();\r\n+\r\n+  // invoke python application function and get return value\r\n+  PyObject * pyBytes  = streamsx::topology::Splpy::pyBlobToBytes(value);\r\n+  PyObject * pyReturnVar = streamsx::topology::Splpy::pyTupleFunc(function_, pyBytes);\r\n+\r\n+  if (pyReturnVar == Py_None){\r\n+    Py_DECREF(pyReturnVar);\r\n+    PyGILState_Release(gstate);\r\n+    return;\r\n+  } else if(pyReturnVar == 0){\r\n+    PyErr_Print();\r\n+    PyGILState_Release(gstate);\r\n+    throw;\r\n+  } \r\n+\r\n+  // change python return value into an iterator function\r\n+  PyObject * pyIterator = streamsx::topology::Splpy::pyTupleFunc(iterableObjectFunction_, pyReturnVar);\r\n+  \r\n+  while (!getPE().getShutdownRequested()) {\r\n+    // call next() on the iterator, and get the pickled return value\r\n+    PyObject * pyPickledReturnVar = PyObject_CallObject(pyIterator, NULL);\r\n+    if (pyPickledReturnVar == Py_None){\r\n+      Py_DECREF(pyPickledReturnVar);\r\n+      Py_DECREF(pyIterator);\r\n+      break;\r\n+    } else if(pyPickledReturnVar == 0){\r\n+      PyErr_Print();\r\n+      Py_DECREF(pyIterator);\r\n+      PyGILState_Release(gstate);\r\n+      throw;\r\n+    }\r\n+\r\n+    // construct spl blob\r","path":"com.ibm.streamsx.topology/com.ibm.streamsx.topology.functional.python/PyFunctionMultiTransform/PyFunctionMultiTransform_cpp.cgt","position":168,"original_position":168,"commit_id":"8e4cb3d06f407c01c67d48b8f75dcb294c7a9bce","original_commit_id":"8e4cb3d06f407c01c67d48b8f75dcb294c7a9bce","user":{"login":"ddebrunner","id":3769612,"avatar_url":"https://avatars.githubusercontent.com/u/3769612?v=3","gravatar_id":"","url":"https://api.github.com/users/ddebrunner","html_url":"https://github.com/ddebrunner","followers_url":"https://api.github.com/users/ddebrunner/followers","following_url":"https://api.github.com/users/ddebrunner/following{/other_user}","gists_url":"https://api.github.com/users/ddebrunner/gists{/gist_id}","starred_url":"https://api.github.com/users/ddebrunner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ddebrunner/subscriptions","organizations_url":"https://api.github.com/users/ddebrunner/orgs","repos_url":"https://api.github.com/users/ddebrunner/repos","events_url":"https://api.github.com/users/ddebrunner/events{/privacy}","received_events_url":"https://api.github.com/users/ddebrunner/received_events","type":"User","site_admin":false},"body":"I created a set of utilities to map python objects to SPL tuples, any reason they are not being used?","created_at":"2016-02-26T14:53:51Z","updated_at":"2016-02-26T14:53:51Z","html_url":"https://github.com/IBMStreams/streamsx.topology/pull/274#discussion_r54252277","pull_request_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274","_links":{"self":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/comments/54252277"},"html":{"href":"https://github.com/IBMStreams/streamsx.topology/pull/274#discussion_r54252277"},"pull_request":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274"}}},"pull_request":{"url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274","id":60808004,"html_url":"https://github.com/IBMStreams/streamsx.topology/pull/274","diff_url":"https://github.com/IBMStreams/streamsx.topology/pull/274.diff","patch_url":"https://github.com/IBMStreams/streamsx.topology/pull/274.patch","issue_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/274","number":274,"state":"open","locked":false,"title":"Henrychi2 python spl multi transform","user":{"login":"henrychi2","id":17228597,"avatar_url":"https://avatars.githubusercontent.com/u/17228597?v=3","gravatar_id":"","url":"https://api.github.com/users/henrychi2","html_url":"https://github.com/henrychi2","followers_url":"https://api.github.com/users/henrychi2/followers","following_url":"https://api.github.com/users/henrychi2/following{/other_user}","gists_url":"https://api.github.com/users/henrychi2/gists{/gist_id}","starred_url":"https://api.github.com/users/henrychi2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrychi2/subscriptions","organizations_url":"https://api.github.com/users/henrychi2/orgs","repos_url":"https://api.github.com/users/henrychi2/repos","events_url":"https://api.github.com/users/henrychi2/events{/privacy}","received_events_url":"https://api.github.com/users/henrychi2/received_events","type":"User","site_admin":false},"body":" initial drop for Python Application API multiTransform() support","created_at":"2016-02-26T08:26:42Z","updated_at":"2016-02-26T14:53:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"26962572cd942326ea9b2ec492ee283ff02899ae","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274/commits","review_comments_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274/comments","review_comment_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/comments{/number}","comments_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/274/comments","statuses_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/statuses/8e4cb3d06f407c01c67d48b8f75dcb294c7a9bce","head":{"label":"henrychi2:henrychi2_python_spl_multi_transform","ref":"henrychi2_python_spl_multi_transform","sha":"8e4cb3d06f407c01c67d48b8f75dcb294c7a9bce","user":{"login":"henrychi2","id":17228597,"avatar_url":"https://avatars.githubusercontent.com/u/17228597?v=3","gravatar_id":"","url":"https://api.github.com/users/henrychi2","html_url":"https://github.com/henrychi2","followers_url":"https://api.github.com/users/henrychi2/followers","following_url":"https://api.github.com/users/henrychi2/following{/other_user}","gists_url":"https://api.github.com/users/henrychi2/gists{/gist_id}","starred_url":"https://api.github.com/users/henrychi2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrychi2/subscriptions","organizations_url":"https://api.github.com/users/henrychi2/orgs","repos_url":"https://api.github.com/users/henrychi2/repos","events_url":"https://api.github.com/users/henrychi2/events{/privacy}","received_events_url":"https://api.github.com/users/henrychi2/received_events","type":"User","site_admin":false},"repo":{"id":51716635,"name":"streamsx.topology","full_name":"henrychi2/streamsx.topology","owner":{"login":"henrychi2","id":17228597,"avatar_url":"https://avatars.githubusercontent.com/u/17228597?v=3","gravatar_id":"","url":"https://api.github.com/users/henrychi2","html_url":"https://github.com/henrychi2","followers_url":"https://api.github.com/users/henrychi2/followers","following_url":"https://api.github.com/users/henrychi2/following{/other_user}","gists_url":"https://api.github.com/users/henrychi2/gists{/gist_id}","starred_url":"https://api.github.com/users/henrychi2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrychi2/subscriptions","organizations_url":"https://api.github.com/users/henrychi2/orgs","repos_url":"https://api.github.com/users/henrychi2/repos","events_url":"https://api.github.com/users/henrychi2/events{/privacy}","received_events_url":"https://api.github.com/users/henrychi2/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/henrychi2/streamsx.topology","description":"(Incubation) A project that supports building streaming topologies (applications) for IBM Streams in different programming languages, such as Java and Scala.","fork":true,"url":"https://api.github.com/repos/henrychi2/streamsx.topology","forks_url":"https://api.github.com/repos/henrychi2/streamsx.topology/forks","keys_url":"https://api.github.com/repos/henrychi2/streamsx.topology/keys{/key_id}","collaborators_url":"https://api.github.com/repos/henrychi2/streamsx.topology/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/henrychi2/streamsx.topology/teams","hooks_url":"https://api.github.com/repos/henrychi2/streamsx.topology/hooks","issue_events_url":"https://api.github.com/repos/henrychi2/streamsx.topology/issues/events{/number}","events_url":"https://api.github.com/repos/henrychi2/streamsx.topology/events","assignees_url":"https://api.github.com/repos/henrychi2/streamsx.topology/assignees{/user}","branches_url":"https://api.github.com/repos/henrychi2/streamsx.topology/branches{/branch}","tags_url":"https://api.github.com/repos/henrychi2/streamsx.topology/tags","blobs_url":"https://api.github.com/repos/henrychi2/streamsx.topology/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/henrychi2/streamsx.topology/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/henrychi2/streamsx.topology/git/refs{/sha}","trees_url":"https://api.github.com/repos/henrychi2/streamsx.topology/git/trees{/sha}","statuses_url":"https://api.github.com/repos/henrychi2/streamsx.topology/statuses/{sha}","languages_url":"https://api.github.com/repos/henrychi2/streamsx.topology/languages","stargazers_url":"https://api.github.com/repos/henrychi2/streamsx.topology/stargazers","contributors_url":"https://api.github.com/repos/henrychi2/streamsx.topology/contributors","subscribers_url":"https://api.github.com/repos/henrychi2/streamsx.topology/subscribers","subscription_url":"https://api.github.com/repos/henrychi2/streamsx.topology/subscription","commits_url":"https://api.github.com/repos/henrychi2/streamsx.topology/commits{/sha}","git_commits_url":"https://api.github.com/repos/henrychi2/streamsx.topology/git/commits{/sha}","comments_url":"https://api.github.com/repos/henrychi2/streamsx.topology/comments{/number}","issue_comment_url":"https://api.github.com/repos/henrychi2/streamsx.topology/issues/comments{/number}","contents_url":"https://api.github.com/repos/henrychi2/streamsx.topology/contents/{+path}","compare_url":"https://api.github.com/repos/henrychi2/streamsx.topology/compare/{base}...{head}","merges_url":"https://api.github.com/repos/henrychi2/streamsx.topology/merges","archive_url":"https://api.github.com/repos/henrychi2/streamsx.topology/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/henrychi2/streamsx.topology/downloads","issues_url":"https://api.github.com/repos/henrychi2/streamsx.topology/issues{/number}","pulls_url":"https://api.github.com/repos/henrychi2/streamsx.topology/pulls{/number}","milestones_url":"https://api.github.com/repos/henrychi2/streamsx.topology/milestones{/number}","notifications_url":"https://api.github.com/repos/henrychi2/streamsx.topology/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/henrychi2/streamsx.topology/labels{/name}","releases_url":"https://api.github.com/repos/henrychi2/streamsx.topology/releases{/id}","deployments_url":"https://api.github.com/repos/henrychi2/streamsx.topology/deployments","created_at":"2016-02-14T22:10:27Z","updated_at":"2016-02-14T22:10:28Z","pushed_at":"2016-02-26T08:24:09Z","git_url":"git://github.com/henrychi2/streamsx.topology.git","ssh_url":"git@github.com:henrychi2/streamsx.topology.git","clone_url":"https://github.com/henrychi2/streamsx.topology.git","svn_url":"https://github.com/henrychi2/streamsx.topology","homepage":"http://ibmstreams.github.io/streamsx.topology","size":5610,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"IBMStreams:python_spl","ref":"python_spl","sha":"2d5d7aee0bd3bd58005c39a96e405092d7018902","user":{"login":"IBMStreams","id":5439177,"avatar_url":"https://avatars.githubusercontent.com/u/5439177?v=3","gravatar_id":"","url":"https://api.github.com/users/IBMStreams","html_url":"https://github.com/IBMStreams","followers_url":"https://api.github.com/users/IBMStreams/followers","following_url":"https://api.github.com/users/IBMStreams/following{/other_user}","gists_url":"https://api.github.com/users/IBMStreams/gists{/gist_id}","starred_url":"https://api.github.com/users/IBMStreams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IBMStreams/subscriptions","organizations_url":"https://api.github.com/users/IBMStreams/orgs","repos_url":"https://api.github.com/users/IBMStreams/repos","events_url":"https://api.github.com/users/IBMStreams/events{/privacy}","received_events_url":"https://api.github.com/users/IBMStreams/received_events","type":"Organization","site_admin":false},"repo":{"id":36458001,"name":"streamsx.topology","full_name":"IBMStreams/streamsx.topology","owner":{"login":"IBMStreams","id":5439177,"avatar_url":"https://avatars.githubusercontent.com/u/5439177?v=3","gravatar_id":"","url":"https://api.github.com/users/IBMStreams","html_url":"https://github.com/IBMStreams","followers_url":"https://api.github.com/users/IBMStreams/followers","following_url":"https://api.github.com/users/IBMStreams/following{/other_user}","gists_url":"https://api.github.com/users/IBMStreams/gists{/gist_id}","starred_url":"https://api.github.com/users/IBMStreams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IBMStreams/subscriptions","organizations_url":"https://api.github.com/users/IBMStreams/orgs","repos_url":"https://api.github.com/users/IBMStreams/repos","events_url":"https://api.github.com/users/IBMStreams/events{/privacy}","received_events_url":"https://api.github.com/users/IBMStreams/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/IBMStreams/streamsx.topology","description":"(Incubation) A project that supports building streaming topologies (applications) for IBM Streams in different programming languages, such as Java and Scala.","fork":false,"url":"https://api.github.com/repos/IBMStreams/streamsx.topology","forks_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/forks","keys_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/keys{/key_id}","collaborators_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/teams","hooks_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/hooks","issue_events_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/events{/number}","events_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/events","assignees_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/assignees{/user}","branches_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/branches{/branch}","tags_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/tags","blobs_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/git/refs{/sha}","trees_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/git/trees{/sha}","statuses_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/statuses/{sha}","languages_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/languages","stargazers_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/stargazers","contributors_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/contributors","subscribers_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/subscribers","subscription_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/subscription","commits_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/commits{/sha}","git_commits_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/git/commits{/sha}","comments_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/comments{/number}","issue_comment_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/comments{/number}","contents_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/contents/{+path}","compare_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/compare/{base}...{head}","merges_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/merges","archive_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/downloads","issues_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues{/number}","pulls_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls{/number}","milestones_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/milestones{/number}","notifications_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/labels{/name}","releases_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/releases{/id}","deployments_url":"https://api.github.com/repos/IBMStreams/streamsx.topology/deployments","created_at":"2015-05-28T18:30:13Z","updated_at":"2016-02-25T04:29:44Z","pushed_at":"2016-02-26T08:26:42Z","git_url":"git://github.com/IBMStreams/streamsx.topology.git","ssh_url":"git@github.com:IBMStreams/streamsx.topology.git","clone_url":"https://github.com/IBMStreams/streamsx.topology.git","svn_url":"https://github.com/IBMStreams/streamsx.topology","homepage":"http://ibmstreams.github.io/streamsx.topology","size":5613,"stargazers_count":10,"watchers_count":10,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":16,"mirror_url":null,"open_issues_count":40,"forks":16,"open_issues":40,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274"},"html":{"href":"https://github.com/IBMStreams/streamsx.topology/pull/274"},"issue":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/274"},"comments":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/issues/274/comments"},"review_comments":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274/comments"},"review_comment":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/pulls/274/commits"},"statuses":{"href":"https://api.github.com/repos/IBMStreams/streamsx.topology/statuses/8e4cb3d06f407c01c67d48b8f75dcb294c7a9bce"}}}}