On Mon, Jan 8, 2018 at 11:19 AM, Lukasz Cwik <lc...@google.com> wrote:
> Ken, this is specifically about running integration tests and not a users > main(). > Yea, I was just addressing the bit about advanced users having a headache. Hopefully no end users are really writing options as JSON except in special circumstances. That's why I asked why someone would be writing it by hand in that sort of situation. For embedding a full set of pipeline options in another format, like a pom or IntelliJ config, JSON seems better to me since it is more explicit and not fragile. Difficulty isn't a big issue since manual edits should be pretty rare and smoke tests catch any errors. Note that I'm deliberately not addressing the security question. I have no special insights there. Kenn > Note, that PipelineOptions JSON format was used because it was a > convenient serialized form that is easy to explain to people what is > required. > Using a different string tokenizer and calling > PipelineOptionsFactory.fromArgs() > with the parsed strings seems like it would be better. > > These are the supported formats for fromArgs(): > * --project=MyProject (simple property, will set the "project" > property to "MyProject") > * --readOnly=true (for boolean properties, will set the "readOnly" > property to "true") > * --readOnly (shorthand for boolean properties, will set the > "readOnly" property to "true") > * --x=1 --x=2 --x=3 (list style simple property, will set the "x" > property to [1, 2, 3]) > * --x=1,2,3 (shorthand list style simple property, will set the "x" > property to [1, 2, 3]) > * --complexObject='{"key1":"value1",...} (JSON format for all other > complex types) > > Using a string tokenizer that minimizes the number of required escape > characters would be good so we could use newline characters as our only > token. I would avoid ',\t ' as tokens since they are more likely to appear. > > On Mon, Jan 8, 2018 at 10:33 AM, Kenneth Knowles <k...@google.com> wrote: > >> We do have a plain command line syntax, and whoever writes the >> main(String[]) function is responsible for invoking the parser. It isn't >> quite as nice as standard arg parse libraries, but it isn't too bad. It >> would be great to improve, though. >> >> Jackson is for machine-to-machine communication or other situations where >> command line parsing doesn't work so well. >> >> Are we using these some other way? >> >> Kenn >> >> On Sun, Jan 7, 2018 at 7:21 AM, Romain Manni-Bucau <rmannibu...@gmail.com >> > wrote: >> >>> >>> >>> Le 7 janv. 2018 12:53, "Jean-Baptiste Onofré" <j...@nanthrax.net> a >>> écrit : >>> >>> Hi Romain, >>> >>> I guess you are assuming that pipeline options are flat command line >>> like argument, right ? >>> >>> Actually, theoretically, pipeline options can be represented as json, >>> that's why we use jackson. >>> The pipeline options can be serialized/deserialized as json. >>> >>> >>> Yes but if users (or dev ;)) start to use that then it is trivial to >>> break the cli handling and fromArgs parsing or, if not, break the user >>> experience. So at the end it is a kind of "yes but no", right? >>> >>> PS: already see some advanced users having a headache trying to pass >>> pipeline options in json so using the plain command line syntax can be more >>> friendly too. >>> >>> >>> The purpose is to remove the jackson dependencies ? >>> >>> >>> Later yes, seeing core dep tree I identify a lot of dep which can >>> conflict in some env and are not really needed or bring much being in the >>> core - like avro as mentionned in another thread. Can need a sanitizing >>> round. Short term it was really a "why is it that complicated" ;). >>> >>> >>> >>> Regards >>> JB >>> >>> >>> On 01/07/2018 11:38 AM, Romain Manni-Bucau wrote: >>> >>>> Hi guys, >>>> >>>> not sure i fully get why jackson is used to parse pipeline options in >>>> the testing integration >>>> >>>> why not using a token parser like [1] which allows to map 1-1 with the >>>> user interface (command line) the options? >>>> >>>> [1] https://github.com/Talend/component-runtime/blob/master/comp >>>> onent-server/src/main/java/org/talend/sdk/component/server/l >>>> ang/StringPropertiesTokenizer.java >>>> >>>> Romain Manni-Bucau >>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog < >>>> https://rmannibucau.metawerx.net/> | Old Blog < >>>> http://rmannibucau.wordpress.com> | Github < >>>> https://github.com/rmannibucau> | LinkedIn < >>>> https://www.linkedin.com/in/rmannibucau> >>>> >>> >>> -- >>> Jean-Baptiste Onofré >>> jbono...@apache.org >>> http://blog.nanthrax.net >>> Talend - http://www.talend.com >>> >>> >>> >> >