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.

Reply via email to