PyStreamCallBack object has no attribute length
Вопрос, я полагаю чисто ООПшный.
Подскажите, пожалуйста, как исправить ошибку?
Вот код. Ругается на аттрибут, а я понятия не имею как исправить. Если я прописываю аттрибут в __init__, то разумеется он мне и значение потом возвращает оттуда же. Отчасти проблема в том, что метод process не может(и не должен) ничего возвращать.
Мне необходимо, чтобы def get_length_of_array(self) возвращала именно length = str(len(array))
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
import json
class PyStreamCallback(StreamCallback):
def __init__(self):
pass
def process(self, inputStream, outputStream):
jsn = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
array = json.loads(jsn) # type: dict
i = 0
while i <= 1:
root_key = list(array.keys())[0]
array = array[root_key]
i += 1
self.length = str(len(array))
def get_length_of_array(self):
return self.length
# end class
flowfile = session.get()
if(flowfile != None):
flowfile = session.write(flowfile, PyStreamCallback())
flowfile = session.putAttribute(flowfile, "length", PyStreamCallback().get_length_of_array())
session.transfer(flowFile, REL_SUCCESS)
Ответы (1 шт):
Автор решения: re1von
→ Ссылка
Вы создаете PyStreamCallback каждый раз заного, вместо этого вам нужно использовать один и тот же инстанс:
flowfile = session.get()
if(flowfile != None):
stream_callback = PyStreamCallback()
flowfile = session.write(flowfile, stream_callback)
flowfile = session.putAttribute(flowfile, "length", stream_callback.get_length_of_array())
session.transfer(flowFile, REL_SUCCESS)