My Python is not great but I would look at NiPyAPI as an example and the NiFi
REST API [1] to see how objects are nested. The ProcessorConfigDTO [2] contains
a dict of str: PropertyDescriptorDTO at descriptors, so you could iterate over
that as you’re asking. For example, the list_sensitive_processors function [3]
operates very similarly.
def list_sensitive_processors(pg_id='root', summary=False):
"""
Returns a flattened list of all Processors on the canvas which have
sensitive properties that would need to be managed during deployment
Args:
pg_id (str): The UUID of the Process Group to start from, defaults to
the Canvas root
summary (bool): True to return just the list of relevant
properties per Processor, False for the full listing
Returns:
list[ProcessorEntity] or list(dict)
"""
assert isinstance(pg_id, six.string_types), "pg_id should be a string"
assert isinstance(summary, bool)
cache = nipyapi.config.cache.get('list_sensitive_processors')
if not cache:
cache = []
matches = []
proc_list = list_all_processors(pg_id)
for proc in proc_list:
if proc.component.type in cache:
matches.append(proc)
else:
sensitive_test = False
for _, detail in proc.component.config.descriptors.items():
if detail.sensitive is True:
sensitive_test = True
break
if sensitive_test:
matches.append(proc)
cache.append(str(proc.component.type))
if cache:
nipyapi.config.cache['list_sensitive_processors'] = cache
if summary:
return [
{x.id: [
p for p, q in x.component.config.descriptors.items()
if q.sensitive is True]}
for x in matches
]
return matches
[1] https://nifi.apache.org/docs/nifi-docs/rest-api/index.html
<https://nifi.apache.org/docs/nifi-docs/rest-api/index.html>
[2]
https://github.com/Chaffelson/nipyapi/blob/master/nipyapi/nifi/models/processor_config_dto.py
<https://github.com/Chaffelson/nipyapi/blob/master/nipyapi/nifi/models/processor_config_dto.py>
[3] https://github.com/Chaffelson/nipyapi/blob/master/nipyapi/canvas.py#L225
<https://github.com/Chaffelson/nipyapi/blob/master/nipyapi/canvas.py#L225>
Andy LoPresto
[email protected]
[email protected]
He/Him
PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4 BACE 3C6E F65B 2F7D EF69
> On Mar 18, 2020, at 12:12 PM, Eric Chaves <[email protected]> wrote:
>
> Hi folks,
>
> I'm trying to write a quick python InvokeProcessorScript where I need to
> iterate over all Dynamic Properties from the processor to select just a few
> and I'm having some difficulties with the class types between Jython and Java.
>
> Can someone show me how to iterate over "context.properties" to get each
> PropertyDescriptor?
>
> I'd like do something like this:
> for prop in context.properties:
> name = prop.name <http://prop.name/>
> value =
> context.getProperty(prop).evaluateAttributeExpressions(flowFile).getValue()
> self.log.info <http://self.log.info/>("attr {name}:
> {value}".format(name=name, value=value))
> if prop.dynamic:
> if name in lista and re.search(value, filename):
> attrMap['TipoArquivo'] = name
> else:
> attrMap[name] = value
>
> Cheers