[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646966#comment-16646966 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user asfgit closed the pull request at: https://github.com/apache/nifi-minifi-cpp/pull/404 > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > Fix For: 0.6.0 > > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646963#comment-16646963 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user apiri commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r224579812 --- Diff: PYTHON.md --- @@ -0,0 +1,47 @@ + + +# Apache NiFi - MiNiFi - C++ Python Access. + + +This readme provides a how-to guide on using the Python bindings for MiNiFi C++. + +## Table of Contents + +- [Description](#description) + +## Description + +Apache NiFi MiNiFi C++ communicates using python bindings. These bindings connect +to the C API that exists. In doing so they can utilize the building blocks within the CAPI. + +The design is predicated upon a MiNiFi instance. There is a getFile example that shows +the usage of this API. A processor can be created and then a flowfile will be output if one +is routed to success. Custom routes can be defined in later implementations of the Python API. + +An RPG is currently required to define a MiNiFi instance. As per the example, a flow file may +be transmitted via HTTP site to site. Presently, raw socket site to site is supported via +the CAPI but not the Python library. + +To run the getfile example you will need to provide the fullpath to the python-lib shared object +created at build time. + +## Enabling --- End diff -- Looks good, thanks for the updates. Will get this merged in. > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646877#comment-16646877 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user phrocker commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r224560591 --- Diff: PYTHON.md --- @@ -0,0 +1,47 @@ + + +# Apache NiFi - MiNiFi - C++ Python Access. + + +This readme provides a how-to guide on using the Python bindings for MiNiFi C++. + +## Table of Contents + +- [Description](#description) + +## Description + +Apache NiFi MiNiFi C++ communicates using python bindings. These bindings connect +to the C API that exists. In doing so they can utilize the building blocks within the CAPI. + +The design is predicated upon a MiNiFi instance. There is a getFile example that shows +the usage of this API. A processor can be created and then a flowfile will be output if one +is routed to success. Custom routes can be defined in later implementations of the Python API. + +An RPG is currently required to define a MiNiFi instance. As per the example, a flow file may +be transmitted via HTTP site to site. Presently, raw socket site to site is supported via +the CAPI but not the Python library. + +To run the getfile example you will need to provide the fullpath to the python-lib shared object +created at build time. + +## Enabling --- End diff -- Sorry I didn't have to install that on my machine ( or maybe I had done it long ago) Thanks for the reminder > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646864#comment-16646864 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user phrocker commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r224556501 --- Diff: PYTHON.md --- @@ -0,0 +1,47 @@ + + +# Apache NiFi - MiNiFi - C++ Python Access. + + +This readme provides a how-to guide on using the Python bindings for MiNiFi C++. + +## Table of Contents + +- [Description](#description) + +## Description + +Apache NiFi MiNiFi C++ communicates using python bindings. These bindings connect +to the C API that exists. In doing so they can utilize the building blocks within the CAPI. + +The design is predicated upon a MiNiFi instance. There is a getFile example that shows +the usage of this API. A processor can be created and then a flowfile will be output if one +is routed to success. Custom routes can be defined in later implementations of the Python API. + +An RPG is currently required to define a MiNiFi instance. As per the example, a flow file may +be transmitted via HTTP site to site. Presently, raw socket site to site is supported via +the CAPI but not the Python library. + +To run the getfile example you will need to provide the fullpath to the python-lib shared object +created at build time. + +## Enabling --- End diff -- Ah yeah good i forgot that. thanks! > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646817#comment-16646817 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user apiri commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r224541169 --- Diff: PYTHON.md --- @@ -0,0 +1,47 @@ + + +# Apache NiFi - MiNiFi - C++ Python Access. + + +This readme provides a how-to guide on using the Python bindings for MiNiFi C++. + +## Table of Contents + +- [Description](#description) + +## Description + +Apache NiFi MiNiFi C++ communicates using python bindings. These bindings connect +to the C API that exists. In doing so they can utilize the building blocks within the CAPI. + +The design is predicated upon a MiNiFi instance. There is a getFile example that shows +the usage of this API. A processor can be created and then a flowfile will be output if one +is routed to success. Custom routes can be defined in later implementations of the Python API. + +An RPG is currently required to define a MiNiFi instance. As per the example, a flow file may +be transmitted via HTTP site to site. Presently, raw socket site to site is supported via +the CAPI but not the Python library. + +To run the getfile example you will need to provide the fullpath to the python-lib shared object +created at build time. + +## Enabling --- End diff -- Verified functionality against python2.7 and python3. I did not have cffi installed for python3 but did for python 2.7. We should probably include that as a requirement. Are there any other requirements we should call out? > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646784#comment-16646784 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user apiri commented on the issue: https://github.com/apache/nifi-minifi-cpp/pull/404 reviewing latest update > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646635#comment-16646635 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user apiri commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r224445025 --- Diff: PYTHON.md --- @@ -0,0 +1,47 @@ + + +# Apache NiFi - MiNiFi - C++ Python Access. + + +This readme provides a how-to guide on using the Python bindings for MiNiFi C++. + +## Table of Contents + +- [Description](#description) + +## Description + +Apache NiFi MiNiFI C++ can communicates using python bindings. These bindings connect --- End diff -- communicates -> communicate minifi styling > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646417#comment-16646417 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user phrocker commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r22148 --- Diff: libminifi/src/capi/Plan.cpp --- @@ -35,6 +36,41 @@ ExecutionPlan::ExecutionPlan(std::shared_ptr content_re stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(std::make_shared()); } +std::shared_ptr ExecutionPlan::addCallback(void *obj, void (*fp)(processor_session *)) { + if (finalized) { +return nullptr; + } + + utils::Identifier uuid; + id_generator_->generate(uuid); + + auto ptr = core::ClassLoader::getDefaultClassLoader().instantiate("CallbackProcessor", uuid); + if (nullptr == ptr) { +throw std::exception(); --- End diff -- I agree we should probably do this. At the time this was created there was no discussion of that type of work -- happy to make a follow on ticket -- and I have -- https://issues.apache.org/jira/browse/MINIFICPP-639 > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646389#comment-16646389 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user arpadboda commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r48818 --- Diff: libminifi/src/capi/Plan.cpp --- @@ -35,6 +36,41 @@ ExecutionPlan::ExecutionPlan(std::shared_ptr content_re stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(std::make_shared()); } +std::shared_ptr ExecutionPlan::addCallback(void *obj, void (*fp)(processor_session *)) { + if (finalized) { +return nullptr; + } + + utils::Identifier uuid; + id_generator_->generate(uuid); + + auto ptr = core::ClassLoader::getDefaultClassLoader().instantiate("CallbackProcessor", uuid); + if (nullptr == ptr) { +throw std::exception(); + } + std::shared_ptr processor = std::static_pointer_cast(ptr); + processor->setCallback(obj, fp); + processor->setName("CallbackProcessor"); + + return addProcessor(processor, "CallbackProcessor", core::Relationship("success", "description"), true); +} + +bool ExecutionPlan::setProperty(const std::shared_ptr proc, const std::string , const std::string ) { + uint32_t i = 0; + logger_->log_debug("Attempting to set property %s %s for %s", prop, value, proc->getName()); + for (i = 0; i < processor_queue_.size(); i++) { +if (processor_queue_.at(i) == proc) { + break; +} + } + --- End diff -- ``` size_t i = std::distance(processor_queue_.begin(), std::find(processor_queue_.begin(), processor_queue_.end(), proc)); ``` > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646390#comment-16646390 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user arpadboda commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r49496 --- Diff: libminifi/src/capi/Plan.cpp --- @@ -35,6 +36,41 @@ ExecutionPlan::ExecutionPlan(std::shared_ptr content_re stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(std::make_shared()); } +std::shared_ptr ExecutionPlan::addCallback(void *obj, void (*fp)(processor_session *)) { + if (finalized) { +return nullptr; + } + + utils::Identifier uuid; + id_generator_->generate(uuid); + + auto ptr = core::ClassLoader::getDefaultClassLoader().instantiate("CallbackProcessor", uuid); + if (nullptr == ptr) { +throw std::exception(); --- End diff -- Why don't we define a dedicated exception type for this? > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646391#comment-16646391 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user arpadboda commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r44653 --- Diff: python/minifi/__init__.py --- @@ -0,0 +1,203 @@ +#!/usr/bin/env python +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from ctypes import cdll +import ctypes +from abc import abstractmethod + + + +class RPG_PORT(ctypes.Structure): +_fields_ = [('port_id', ctypes.c_char_p)] + +class NIFI_STRUCT(ctypes.Structure): +_fields_ = [('instancePtr', ctypes.c_void_p), + ('port', RPG_PORT)] + +class CFlow(ctypes.Structure): +_fields_ = [('plan', ctypes.c_void_p)] + +class CFlowFile(ctypes.Structure): +_fields_ = [('size', ctypes.c_int), + ('in', ctypes.c_void_p), + ('contentLocation', ctypes.c_char_p), + ('attributes', ctypes.c_void_p), + ('ffp', ctypes.c_void_p)] + +class CProcessor(ctypes.Structure): +_fields_ = [('processor_ptr', ctypes.c_void_p)] + +class CProcessSession(ctypes.Structure): +_fields_ = [('process_session', ctypes.c_void_p)] + +CALLBACK = ctypes.CFUNCTYPE(None, ctypes.POINTER(CProcessSession)) + +class Processor(object): +def __init__(self, cprocessor, minifi): +super(Processor, self).__init__() +self._proc = cprocessor +self._minifi = minifi + +def set_property(self, name, value): + self._minifi.set_property( self._proc, name.encode("UTF-8"), value.encode("UTF-8")) + +class PyProcessor(object): +def __init__(self, instance, minifi, flow): +super(PyProcessor, self).__init__() +self._instance = instance +self._minifi = minifi +self._flow = flow + +def setBase(self, proc): +self._proc = proc + +def get(self, session): +ff = self._minifi.get(self._instance.get_instance(),self._flow, session) +return FlowFile(self._minifi, ff) + +def transfer(self, session, ff, rel): +self._minifi.transfer(session, self._flow, rel.encode("UTF-8")) + +@abstractmethod +def _onTriggerCallback(self): + pass + +def getTriggerCallback(self): +if self._callback is None: +print("creating ptr") +self._callback = self._onTriggerCallback() +return self._callback + +@abstractmethod +def onSchedule(self): +pass + + +class RPG(object): +def __init__(self, nifi_struct): +super(RPG, self).__init__() +self._nifi = nifi_struct + +def get_instance(self): +return self._nifi + +class FlowFile(object): +def __init__(self, minifi, ff): +super(FlowFile, self).__init__() +self._minifi = minifi +self._ff = ff + +def add_attribute(self, name, value): +vallen = len(value) +self._minifi.add_attribute(self._ff, name.encode("UTF-8"), value.encode("UTF-8"), vallen) + +def get_instance(self): +return self._ff + + + +class MiNiFi(object): +""" Proxy Connector """ +def __init__(self, dll_file, url, port): +super(MiNiFi, self).__init__() +self._minifi= cdll.LoadLibrary(dll_file) +""" create instance """ +self._minifi.create_instance.argtypes = [ctypes.c_char_p , ctypes.POINTER(RPG_PORT)] +self._minifi.create_instance.restype = ctypes.POINTER(NIFI_STRUCT) +""" create port """ +self._minifi.create_port.argtype = ctypes.c_char_p +
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16646377#comment-16646377 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user apiri commented on the issue: https://github.com/apache/nifi-minifi-cpp/pull/404 reviewing > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16624082#comment-16624082 ] ASF GitHub Bot commented on MINIFICPP-617: -- Github user phrocker commented on a diff in the pull request: https://github.com/apache/nifi-minifi-cpp/pull/404#discussion_r219606415 --- Diff: python/getFile.py --- @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from minifi import * + +from argparse import ArgumentParser +from ctypes import cdll +import ctypes + + + +parser = ArgumentParser() +parser.add_argument("-s", "--dll", dest="dll_file", +help="DLL filename", metavar="FILE") + +parser.add_argument("-n", "--nifi", dest="nifi_instance", +help="NiFi Instance") + +parser.add_argument("-i", "--input", dest="input_port", +help="NiFi Input Port") + +parser.add_argument("-d", "--dir", dest="dir", + help="GetFile Dir to monitor", metavar="FILE") + +args = parser.parse_args() + +""" dll_file is the path to the shared object """ +minifi = MiNiFi(dll_file=args.dll_file,url = args.nifi_instance.encode('utf-8'), port=args.input_port.encode('utf-8')) --- End diff -- probably no need to do the encoding here > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (MINIFICPP-617) Introduce previously created python example
[ https://issues.apache.org/jira/browse/MINIFICPP-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16624072#comment-16624072 ] ASF GitHub Bot commented on MINIFICPP-617: -- GitHub user phrocker opened a pull request: https://github.com/apache/nifi-minifi-cpp/pull/404 MINIFICPP-617: Create simple python example Thank you for submitting a contribution to Apache NiFi - MiNiFi C++. In order to streamline the review of the contribution we ask you to ensure the following steps have been taken: ### For all changes: - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? - [ ] Does your PR title start with MINIFI- where is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character. - [ ] Has your PR been rebased against the latest commit within the target branch (typically master)? - [ ] Is your initial contribution a single, squashed commit? ### For code changes: - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? - [ ] If applicable, have you updated the LICENSE file? - [ ] If applicable, have you updated the NOTICE file? ### For documentation related changes: - [ ] Have you ensured that format looks appropriate for the output in which it is rendered? ### Note: Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible. You can merge this pull request into a Git repository by running: $ git pull https://github.com/phrocker/nifi-minifi-cpp MINIFICPP-617 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi-minifi-cpp/pull/404.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #404 commit 6c46186c4a1fc566bedd32f208126161419c06ff Author: Marc Parisi Date: 2018-09-12T15:05:25Z MINIFICPP-617: Create simple python example > Introduce previously created python example > --- > > Key: MINIFICPP-617 > URL: https://issues.apache.org/jira/browse/MINIFICPP-617 > Project: NiFi MiNiFi C++ > Issue Type: New Feature >Reporter: Mr TheSegfault >Assignee: Mr TheSegfault >Priority: Major > > I've had this sitting around a while. I've re-based and tested to ensure it > still works. has some bugs but is a simple proof of concept. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)