Hi Matt,

Thank you for the input. I updated my config as you suggested and it worked
like charm and also big thankyou for nice article. i used your article as
reference when i am started Exploring ExecuteScript.


Thanks
Madhu



On Thu, Mar 24, 2016 at 12:18 AM, Matt Burgess <mattyb...@gmail.com> wrote:

> Madhukar,
>
> Glad to hear you found a solution, I was just replying when your email
> came in.
>
> Although in ExecuteScript you have chosen "python" as the script engine,
> it is actually Jython that is being used to interpret the scripts, not your
> installed version of Python.  The first line (shebang) is ignored as it is
> a comment in Python/Jython.
>
> Modules installed with pip are not automatically available to the Jython
> engine, but if the modules are pure Python code (rather than native C /
> CPython), like user_agents is, you can import them one of two equivalent
> ways:
>
> 1) The way you have done, using sys.path.append.  I should mention that
> "import sys" is done for you so you can safely leave that out if you wish.
> 2) Add the path to the packages ('/usr/local/lib/python2.7/site-packages')
> to the Module Path property of the ExecuteScript processor. In this case
> the processor effectively does Option #1 for you.
>
> I was able to get your script to work but had to force the result of parse
> (a UserAgent object) into a string, so I wrapped it in str:
>
> str(parse(flowFile.getAttribute('http.headers.User-Agent')).browser)
>
> You're definitely on the right track :)  For another Jython example with
> ExecuteScript, check out this post on my blog:
> http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited_14.html
>
> I am new to Python as well, but am happy to help if I can with any issues
> you run into, as it will help me learn more as well :)
>
> Regards,
> Matt
>
>
> On Thu, Mar 24, 2016 at 12:10 AM, Madhukar Thota <madhukar.th...@gmail.com
> > wrote:
>
>> I was able to solve the python modules issues by adding the following
>> lines:
>>
>> import sys
>> sys.path.append('/usr/local/lib/python2.7/site-packages')  # Path where
>> my modules are installed.
>>
>> Now the issue i have is , how do i parse the incoming attributes using
>> this libarary correctly and get the new fields. I am kind of new to python
>> and also this my first attempt of using python with nifi.
>>
>> Any help is appreciated.
>>
>>
>>
>> On Wed, Mar 23, 2016 at 11:31 PM, Madhukar Thota <
>> madhukar.th...@gmail.com> wrote:
>>
>>> Hi
>>>
>>> I am trying to use the following script to parse http.headers.useragent
>>> with python useragent module using ExecuteScript Processor.
>>>
>>> Script:
>>>
>>> #!/usr/bin/env python2.7
>>> from user_agents import parse
>>>
>>> flowFile = session.get()
>>> if (flowFile != None):
>>>   flowFile = session.putAttribute(flowFile, "browser",
>>> parse(flowFile.getAttribute('http.headers.User-Agent')).browser)
>>>   session.transfer(flowFile, REL_SUCCESS)
>>>
>>>
>>> But ExecuteProcessor, complaining about missing python module but
>>> modules are already installed using pip and tested outside nifi. How can i
>>> add or reference this modules to nifi?
>>>
>>> Error:
>>>
>>> 23:28:03 EDT
>>> ERROR
>>> af354413-9866-4557-808a-7f3a84353597
>>> ExecuteScript[id=af354413-9866-4557-808a-7f3a84353597] Failed to process
>>> session due to org.apache.nifi.processor.exception.ProcessException:
>>> javax.script.ScriptException: ImportError: No module named user_agents in
>>> <script> at line number 2:
>>> org.apache.nifi.processor.exception.ProcessException:
>>> javax.script.ScriptException: ImportError: No module named user_agents in
>>> <script> at line number 2
>>>
>>>
>>>
>>>
>>>
>>
>

Reply via email to