I agree, and filed a Jira ticket for it: https://issues.apache.org/jira/browse/NIFI-5995
FWIW, I've used Groovy for this sort of thing a lot. You really can't go wrong with that choice. On Thu, Jan 31, 2019 at 4:14 AM happy smith <happyagosm...@gmail.com> wrote: > Thanks a lot for the quick answer. Even if I am not familiar with Groovy, > I will try the Groovy script :). I think it is the best solution. > Really thanks for your support :) > > PS: Probably, waiting for the fix of the bug [1], it would be better to > update the documentation related to the ScriptedLookupService and highlight > that for the moment the service cannot be used with python. > > On Wed, 30 Jan 2019 at 20:18, Matt Burgess <mattyb...@apache.org> wrote: > >> Short answer: Unfortunately this is not currently possible for Jython >> in NiFi 1.7.0+ because of a Jython bug [1] that never made it into a >> release. >> >> Longer answer: NIFI-5287 [2], released as part of NiFi 1.7.0, >> introduced a new default interface method for LookupService, in order >> to avoid breaking API compatibility for those with custom >> LookupServices. This exposes the bug in [1] for the Jython script >> engine. At a major release point (NiFi 2.0) we could refactor the NiFi >> codebase to remove the default interface method, update all internal >> implementations, and announce that the LookupService API has changed >> and thus custom implementations would have to be updated. Not sure if >> we can get away with that for minor releases or not, usually breaking >> API compatibility is a no-no except for major releases. >> >> Possible workarounds: >> - I haven't tried with a NiFi between versions 1.3.0 (when the >> service was introduced) and 1.7.0 (when [2] was introduced) but it may >> be possible as the interface didn't have any default methods then. For >> your script, you'll want to change "from org.apache.nifi.processor >> import PropertyDescriptor" to "from org.apache.nifi.components import >> PropertyDescriptor". Also the OnEnabled and OnDisabled methods should >> be named onEnabled and onDisabled respectively, and you'll want to >> implement the remaining interface methods such as getValueType() and >> getRequiredKeys(). >> - Port your script to Groovy, although since you started with a >> Groovy example and ported to Jython I'm guessing this isn't an option >> :) However you would find that Groovy is much faster than Jython, and >> there is a working example in the unit tests [3]. >> - If you are trying to script up a DB LookupService, there are some >> similar examples at [4] and [5], and I can't find Joey's in his GitHub >> but I know he was working on it at one point too. >> >> Regards, >> Matt >> >> [1] https://bugs.jython.org/issue2403 >> [2] https://issues.apache.org/jira/browse/NIFI-5287 >> [3] >> https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/resources/groovy/test_lookup_inline.groovy >> [4] >> https://funnifi.blogspot.com/2018/08/database-sequence-lookup-with.html >> [5] >> https://github.com/brettryan/nifi-drunken-bundle/blob/dev/nifi-drunken-services/src/main/java/com/drunkendev/nifi/services/SQLLookupService.java >> >> On Wed, Jan 30, 2019 at 1:29 PM happy smith <happyagosm...@gmail.com> >> wrote: >> > >> > Dear users, >> > >> > I would like to use ScriptedLookupService with Python, but I am not >> succeeding in get any scripts working . >> > >> > On the basis of an example that I found for groovy, I am trying >> something like this: >> > >> > import org.apache.nifi.lookup.LookupService as LookupService >> > from org.apache.nifi.processor import PropertyDescriptor >> > >> > class SequenceLookupService(LookupService): >> > propertyDescriptor = PropertyDescriptor.Builder().name("Database >> Connection Pooling Service").description("The Controller Service that is >> used to obtain connection to >> database").required(True).identifiesControllerService(LookupService).build() >> > >> > def OnEnabled(): >> > pass >> > >> > def OnDisabled(): >> > pass >> > >> > def initialize(): >> > pass >> > >> > def lookup(coordinates): >> > return "test" >> > >> > def getPropertyDescriptor(name): >> > return propertyDescriptor >> > >> > def getPropertyDescriptors(): >> > return [propertyDescriptor] >> > >> > >> > lookupService = SequenceLookupService() >> > >> > Could any of you point me to some examples of how to use python for the >> ScriptedLookupService ? >> > Thanks in advance for any support. >> >