Tom, Keep in mind that you are using Jython not Python, which I mention only to point out that it is *much* slower than the native Java processors such as UpdateAttribute, and slower than other scripting engines such as Groovy or Javascript/Nashorn.
If performance/throughput is not a concern and you're more comfortable with Jython, then Jerry's suggestion of session.putAttribute(flowFile, attributeName, attributeValue) should do the trick. Note that if you are adding more than a couple attributes, it's probably better to create a dictionary (eventually/actually, a Java Map<String,String>) of attribute name/value pairs, and use putAllAttributes(flowFile, attributes) instead, as it is more performant. Regards, Matt On Tue, Jan 29, 2019 at 9:25 AM Tomislav Novosel <[email protected]> wrote: > > Thanks for the answer. > > Yes I know I can handle that with Expression language and UpdateAttribute > processor, but this is specific case on my work and I think Python > is better and more simple solution. I need to calc that with python script. > > Tom > > On Tue, 29 Jan 2019 at 15:18, John McGinn <[email protected]> wrote: >> >> Since you're script shows that "filename" is an attribute of your flowfile, >> you could use the UpdateAttribute processor. >> >> If you right click on UpdateAttribute and choose ShowUsage, then choose >> Expression Language Guide, it shows you the things you can handle. >> >> Something along the lines of ${filename:getDelimitedField(6,'_')}, if I >> understand the Groovy code correctly. I did a GenerateFlowFIle to an >> UpdateAttribute processor setting filename to "1_2_3_4_5_6.2_abc", then sent >> that to another UpdateAttribute with the getDelimitedField() I listed and I >> received 6.2. Then another UpdateAttribute could parse the 6.2 for the >> second substring, or you might be able to chain them in the existing >> UpdateProcessor. >> >> >> -------------------------------------------- >> On Tue, 1/29/19, Tomislav Novosel <[email protected]> wrote: >> >> Subject: Modify Flowfile attributes >> To: [email protected] >> Date: Tuesday, January 29, 2019, 9:04 AM >> >> Hi all, >> I'm trying to calculate week number and date >> from filename using ExecuteScript processor and Jython. Here >> is python script.How can I add calculated >> attributes week and year to flowfile? >> Please help, thank you.Tom >> P.S. Maybe I completely missed with this script. >> Feel free to correct me. >> >> import >> jsonimport java.iofrom org.apache.commons.io import >> IOUtilsfrom java.nio.charset import >> StandardCharsetsfrom org.apache.nifi.processor.io import >> StreamCallbackfrom datetime import datetime, timedelta, date >> class PyStreamCallback(StreamCallback): >> def __init__(self, flowfile): >> self.ff = flowfile >> pass >> def process(self, inputStream, outputStream): >> file_name = >> self.ff.getAttribute("filename") >> date_file = >> file_name.split("_")[6] >> date_final = >> date_file.split(".")[0] >> date_obj = >> datetime.strptime(date_final,'%y%m%d') >> date_year = >> date_obj.year >> date_day = >> date_obj.day >> date_month = >> date_obj.month >> week = date(year=date_year, month=date_month, >> day=date_day).isocalendar()[1] >> year = >> date(year=date_year, month=date_month, day=date_day).isocalendar()[0] >> flowFile = >> session.get()if (flowFile != None): >> session.transfer(flowFile, REL_SUCCESS) >> session.commit()
