> On May 5, 2020, at 16:17, Chee Yong Teh <cheeyong....@quantile.com> wrote:
> 
> 
> Hi Andi,
> 
> Ok I have changed the command to
> 
> python -m jcc --version 7.1.4 --use_full_names --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/smart-swapclear-public-release_daru.12.
> jar --include /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/colt-1.2.0.jar 
> --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/commons-math3-3.6.1.jar 
> --include /home/cheeyong
> .teh/SMART-API-7.1.4/smart/lib/jna-5.2.0.jar --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/log4j-1.2.16.jar --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/proto
> buf-java-3.5.1.jar --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/slf4j-api-1.6.1.jar --include 
> /home/cheeyong.teh/SMART-API-7.1.4/smart/lib/slf4j-log4j12-1.6.1.jar --py
> thon lch_smart --build --install 
> com.lchclearnet.swapclear.smart.SMARTClientDataProviderFactory
> 
> I'm using --include instead of --jar and pass in 
> com.lchclearnet.swapclear.smart.SMARTClientDataProviderFactory as a class I 
> want to wrap. It seem fine and everything build fine but when I do a 
> print(dir(lch_smart)). It doesn't seem to wrap that 
> SMARTClientDataProviderFactory class
> 
> >>> print(dir(lch_smart))
> ['CLASSPATH', 'ConstVariableDescriptor', 'FinalizerClass', 'FinalizerProxy', 
> 'InvalidArgsError', 'JArray', 'JArray_bool', 'JArray_byte', 'JArray_char', 
> 'JArray_double', 'JArray_float', 'JArray_int', 'JArray_long', 
> 'JArray_object', 'JArray_short', 'JArray_string', 'JCCEnv', 'JCC_VERSION', 
> 'JObject', 'JavaError', 'PrintWriter', 'StringWriter', 'VERSION', 
> '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', 
> '__module_dir__', '__name__', '__package__', '__path__', '__spec__', 
> '_lch_smart', 'findClass', 'getVMEnv', 'initVM', 'makeClass', 
> 'makeInterface', 'os']
> >>>

You're using --use_full_names, thus to access the
wrapper for com.lchclearnet.swapclear.smart.SMARTClientDataProviderFactory
you need to say: 
  >>> from com.lchclearnet.swapclear.smart import SMARTClientDataProviderFactory

Andi..

> 
> If I use --jar option I will still get the "AttributeError: 'bool' object has 
> no attribute 'setdefault'" error.
> 
> Thanks,
> 
> Chee Yong
> 
> Chee Yong Teh​ 
> 27 Bush Lane, London, EC4R 0AN         |       +44 203 929 3138 
> <image940421.png>
> OTC Infrastructure Service of the Year & ​Global Compression Service of the 
> Year
> -----Original Message-----
> From: Andi Vajda <va...@apache.org> 
> Sent: 05 May 2020 23:30
> To: Chee Yong Teh <cheeyong....@quantile.com>
> Cc: pylucene-dev@lucene.apache.org
> Subject: Re: AttributeError: 'bool' object has no attribute 'setdefault'
> 
> 
> On Tue, 5 May 2020, Chee Yong Teh wrote:
> 
> > Hi Andi,
> >
> > That’s third party library jar file that we try to wrap so we can call it 
> > from python.
> >
> > I don’t really know why they create a classes like that way.
> >
> > Would you able to add an option to just only wrap classes under a 
> > package like I want to wrap all public classes in package 
> > com.lchclearnet.*
> >
> > So any public classes under com.lchclearnet.swapclear and 
> > com.lchclearnet.common will get wrapped? At the moment I think JCC try 
> > to wrap all the public classes found in the jar if I pass in the jar 
> > via -jar option.
> 
> I wonder why this isn't documented.
> JCC's __main__.py file lists all the options you can use with JCC.
> The one that doesn't seem listed is the non-option:
> if a command line argument doesn't start with '-', then it is assumed
> to be a class name. Better yet, you can also use a className:methodName
> syntax to only wrap that. There is a large example of a JCC invocation
> here:
> https://svn.apache.org/viewvc/lucene/pylucene/trunk/Makefile?view=markup
> look for org.apache.lucene.index.IndexWriter:getReader, for an example.
> For controlling which dependencies are pulled in, the answer is none unless 
> you declare them via --jar, other classes, or --package.
> 
> In other words, depending on your use case, you may be able to just generate 
> wrappers for the actual entrypoints you wish to call from Python and the 
> dependencies implied in the method signatures need to be declare manually via 
> other classes, --jar or --package. Also, be aware of --jar vs --include.
> See __main__.py for details:
> https://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/__main__.py?view=markup
> 
> Andi..
> 
> >
> > Thanks,
> >
> > Chee Yong
> >
> >
> > Chee Yong Teh
> > 27 Bush Lane, London, EC4R 0AN | +44 203 929 3138 OTC Infrastructure 
> > Service of the Year & ​Global Compression Service of the Year 
> > ________________________________
> > From: Andi Vajda <va...@apache.org>
> > Sent: Tuesday, May 5, 2020 10:17:18 PM
> > To: Chee Yong Teh <cheeyong....@quantile.com>
> > Cc: va...@apache.org <va...@apache.org>
> > Subject: Re: AttributeError: 'bool' object has no attribute 'setdefault'
> >
> >
> > So if looks like you have classes and packages using the same names. 
> > This could be triggering a bug in jcc.
> > Let me try this locally.
> > Just curious, what are all these 'a' classes ?
> >
> > Andi..
> >
> > On May 5, 2020, at 10:47, Chee Yong Teh <cheeyong....@quantile.com> wrote:
> >
> > 
> > HI Andi,
> >
> > Please see below print out
> >
> > -declares : {<Class: interface it.unimi.dsi.fastutil.h>, <Class: class 
> > java.lang.Class>, <Class: interface it.unimi.dsi.fastutil.c>, <Class: 
> > interface it.unimi.dsi.fastutil.h.au>, <Class: interface 
> > it.unimi.dsi.fastutil.h.H>} --declareNames : ['it', 'unimi', 'dsi', 
> > 'fastutil', 'h'] ---declareName : it ---namespace : {} ---declareName 
> > : unimi ---namespace : {} ---declareName : dsi ---namespace : {} 
> > ---declareName : fastutil ---namespace : {} --declareNames : ['java', 
> > 'lang', 'Class'] ---declareName : java ---namespace : {'it': {'unimi': 
> > {'dsi': {'fastutil': {'h': True}}}}} ---declareName : lang 
> > ---namespace : {} --declareNames : ['it', 'unimi', 'dsi', 'fastutil', 
> > 'h', 'au'] ---declareName : it ---namespace : {'it': {'unimi': {'dsi': 
> > {'fastutil': {'h': True}}}}, 'java': {'lang': {'Class': True}}} 
> > ---declareName : unimi ---namespace : {'unimi': {'dsi': {'fastutil': 
> > {'h': True}}}} ---declareName : dsi ---namespace : {'dsi': 
> > {'fastutil': {'h': True}}} ---declareName : fastutil ---namespace : 
> > {'fastutil': {'h': True}} ---declareName : h ---namespace : {'h': 
> > True}
> >
> > Above is one of many classes that hit with the 'bool' object has no 
> > attribute 'setdefault'. Another one
> >
> > -declares : {<Class: class java.lang.Class>, <Class: interface 
> > swapclear.com.lchclearnet.c.a.a.a.a>, <Class: interface 
> > swapclear.com.lchclearnet.c.a.b.a.a>, <Class: interface 
> > swapclear.com.lchclearnet.c.a.b.a.a.a.a.a.a>, <Class: class 
> > swapclear.com.lchclearnet.c.a.b.a.e>, <Class: interface 
> > swapclear.com.lchclearnet.c.a.c.a>}
> > --declareNames : ['java', 'lang', 'Class'] ---declareName : java 
> > ---namespace : {} ---declareName : lang ---namespace : {} 
> > --declareNames : ['swapclear', 'com', 'lchclearnet', 'c', 'a', 'a', 
> > 'a', 'a'] ---declareName : swapclear ---namespace : {'java': {'lang': 
> > {'Class': True}}} ---declareName : com ---namespace : {} 
> > ---declareName : lchclearnet ---namespace : {} ---declareName : c 
> > ---namespace : {} ---declareName : a ---namespace : {} ---declareName 
> > : a ---namespace : {} ---declareName : a ---namespace : {} 
> > --declareNames : ['swapclear', 'com', 'lchclearnet', 'c', 'a', 'b', 
> > 'a', 'a'] ---declareName : swapclear ---namespace : {'java': {'lang': 
> > {'Class': True}}, 'swapclear': {'com': {'lchclearnet': {'c': {'a': 
> > {'a': {'a': {'a': True}}}}}}}} ---declareName : com ---namespace : 
> > {'com': {'lchclearnet': {'c': {'a': {'a': {'a': {'a': True}}}}}}} 
> > ---declareName : lchclearnet ---namespace : {'lchclearnet': {'c': 
> > {'a': {'a': {'a': {'a': True}}}}}} ---declareName : c ---namespace : 
> > {'c': {'a': {'a': {'a': {'a': True}}}}} ---declareName : a 
> > ---namespace : {'a': {'a': {'a': {'a': True}}}} ---declareName : b 
> > ---namespace : {'a': {'a': {'a': True}}} ---declareName : a 
> > ---namespace : {} --declareNames : ['swapclear', 'com', 'lchclearnet', 
> > 'c', 'a', 'b', 'a', 'a', 'a', 'a', 'a', 'a'] ---declareName : 
> > swapclear ---namespace : {'java': {'lang': {'Class': True}}, 
> > 'swapclear': {'com': {'lchclearnet': {'c': {'a': {'a': {'a': {'a': 
> > True}}, 'b': {'a': {'a': True}}}}}}}} ---declareName : com 
> > ---namespace : {'com': {'lchclearnet': {'c': {'a': {'a': {'a': {'a': 
> > True}}, 'b': {'a': {'a': True}}}}}}} ---declareName : lchclearnet 
> > ---namespace : {'lchclearnet': {'c': {'a': {'a': {'a': {'a': True}}, 
> > 'b': {'a': {'a': True}}}}}} ---declareName : c ---namespace : {'c': 
> > {'a': {'a': {'a': {'a': True}}, 'b': {'a': {'a': True}}}}} 
> > ---declareName : a ---namespace : {'a': {'a': {'a': {'a': True}}, 'b': 
> > {'a': {'a': True}}}} ---declareName : b ---namespace : {'a': {'a': 
> > {'a': True}}, 'b': {'a': {'a': True}}} ---declareName : a ---namespace 
> > : {'a': {'a': True}} ---declareName : a ---namespace : {'a': True} 
> > ---declareName : a ---namespace : True
> >
> > So I'm not sure how many classes in the jar that causing this issue.
> >
> > There is a similar code in python.py line 1547
> >
> > Thanks,
> >
> > Chee Yong
> > Chee Yong Teh​
> > 27 Bush Lane, London, EC4R 0AN | +44 203 929 
> > 3138<tel:+44%20203%20929%203138>
> > <http://www.quantile.com/>
> > <image218792.png>
> > OTC Infrastructure Service of the Year & ​Global Compression Service 
> > of the Year -----Original Message-----
> > From: Andi Vajda <va...@apache.org>
> > Sent: 05 May 2020 17:50
> > To: pylucene-dev@lucene.apache.org
> > Subject: Re: AttributeError: 'bool' object has no attribute 'setdefault'
> >
> >
> > On Mon, 4 May 2020, Chee Yong Teh wrote:
> >
> >> I'm in the processing of testing JCC to wrap third party library jar.
> >>
> >> When I run JCC 3.7 I got the following error
> >>
> >> Traceback (most recent call last):
> >> File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main 
> >> "__main__", mod_spec) File "/usr/lib/python3.6/runpy.py", line 85, in 
> >> _run_code exec(code, run_globals) File 
> >> "/home/cheeyong.teh/venv/simm/lib/python3.6/site-packages/jcc/__main_
> >> _.py", line 107, in <module>
> >> cpp.jcc(sys.argv)
> >> File 
> >> "/home/cheeyong.teh/venv/simm/lib/python3.6/site-packages/jcc/cpp.py"
> >> , line 711, in jcc
> >> _dll_export)
> >> File 
> >> "/home/cheeyong.teh/venv/simm/lib/python3.6/site-packages/jcc/cpp.py"
> >> , line 937, in header namespace = namespace.setdefault(declareName, 
> >> {})
> >> AttributeError: 'bool' object has no attribute 'setdefault'
> >>
> >> This line "namespace = namespace.setdefault(declareName, {})" assume 
> >> namespace.setdefault(declareName, {}) will return {} but somehow it 
> >> returns True. So namespace has True value and it errors in next 
> >> iteration in the loop. Not sure it's a bug or the jar is too 
> >> complicated to parse/convert due to a directory/structure. I can send 
> >> over the library if you need to debug/reproduce the error on your 
> >> machine
> >
> > Could you please put a conditional breakpoint before the line where this 
> > error happens and tell me what 'declares' is set to ?
> >
> > Thanks !
> >
> > Andi..
> >
> >>
> >> The commandline I use
> >>
> >> python -m jcc \
> >> --use_full_names \
> >> --no-generics \
> >> --jar lib/smart-swapclear-public-release_daru.12.jar \ --include 
> >> lib/colt-1.2.0.jar \ --include lib/commons-math3-3.6.1.jar \ 
> >> --include lib/jna-5.2.0.jar \ --include lib/log4j-1.2.16.jar \ 
> >> --include lib/protobuf-java-3.5.1.jar \ --include 
> >> lib/slf4j-api-1.6.1.jar \ --include lib/slf4j-log4j12-1.6.1.jar \ 
> >> --python lch_smart --build -install
> >>
> >> Another question, --jar option seem to wrap all the public classes found 
> >> inside the jar. Is there an option that only wrap certain public classes 
> >> under package com.lchclearnet.* inside a jar? There is an option called 
> >> exclude for classes but it will be nightmare to workout all the classes I 
> >> don't want to wrap inside the jar.
> >>
> >> Thanks,
> >>
> >> Kinds regards,
> >>
> >> Chee Yong
> >>
> >> Chee Yong Teh
> >> 27 Bush Lane, London, EC4R 0AN | +44 203 929 3138 OTC Infrastructure 
> >> Service of the Year & ​Global Compression Service of the Year
> >>
> >> Disclaimer
> >>
> >> The information contained in this communication from the sender is 
> >> confidential. It is intended solely for use by the recipient and others 
> >> authorized to receive it. If you are not the recipient, you are hereby 
> >> notified that any disclosure, copying, distribution or taking action in 
> >> relation of the contents of this information is strictly prohibited and 
> >> may be unlawful.
> >>
> >> This email has been scanned for viruses and malware, and may have been 
> >> automatically archived by Mimecast Ltd, an innovator in Software as a 
> >> Service (SaaS) for business. Providing a safer and more useful place for 
> >> your human generated data. Specializing in; Security, archiving and 
> >> compliance. To find out more visit the Mimecast website.
> >>
> > ________________________________
> >
> > This email (including any attachments) is intended only for the 
> > addressee(s) named above. Its contents may be confidential. If you 
> > receive this email in error, please immediately contact the sender and 
> > delete this email. Unauthorised use, disclosure, storage or copying of 
> > this email and any attachments is not permitted and may be unlawful. 
> > Quantile Technologies Limited is authorised and regulated by the 
> > Financial Conduct Authority. Financial Services Register number: 
> > 751812. Registered in England and Wales, company number: 09622720. 
> > Registered office: Cannon Green, 27 Bush Lane, London, England EC4R 
> > 0AN
> >
> > Disclaimer
> >
> > The information contained in this communication from the sender is 
> > confidential. It is intended solely for use by the recipient and others 
> > authorized to receive it. If you are not the recipient, you are hereby 
> > notified that any disclosure, copying, distribution or taking action in 
> > relation of the contents of this information is strictly prohibited and may 
> > be unlawful.
> >
> > This email has been scanned for viruses and malware, and may have been 
> > automatically archived by Mimecast Ltd, an innovator in Software as a 
> > Service (SaaS) for business. Providing a safer and more useful place for 
> > your human generated data. Specializing in; Security, archiving and 
> > compliance. To find out more visit the Mimecast website.
> >
> This email (including any attachments) is intended only for the addressee(s) 
> named above. Its contents may be confidential. If you receive this email in 
> error, please immediately contact the sender and delete this email. 
> Unauthorised use, disclosure, storage or copying of this email and any 
> attachments is not permitted and may be unlawful. Quantile Technologies 
> Limited is authorised and regulated by the Financial Conduct Authority. 
> Financial Services Register number: 751812. Registered in England and Wales, 
> company number: 09622720. Registered office: Cannon Green, 27 Bush Lane, 
> London, England EC4R 0AN
> 
>  
> 
>  

Reply via email to