Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zsys access from python #1684

Closed
diorcety opened this issue Jun 13, 2017 · 21 comments
Closed

zsys access from python #1684

diorcety opened this issue Jun 13, 2017 · 21 comments
Labels

Comments

@diorcety
Copy link
Contributor

There is no way to access zsys_* functions from python binding

@bluca
Copy link
Member

bluca commented Jun 13, 2017

Yes that is a known problem, since they are not generated by zproject there's no binding generation. No idea how we can solve it.

@diorcety
Copy link
Contributor Author

diorcety commented Jun 13, 2017

I have an issue on Windows. Either a crash or a stall (after last python code)

zsys_shutdown is called atexit.
But something is done before atexit by python internal code (WSACleanup?)
This lead to this issue: https://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030059.html

if i call

    import ctypes
    lib = ctypes.cdll.LoadLibrary('libczmq')
    lib.zsys_shutdown.restype = None
    lib.zsys_shutdown.argtypes = []
    lib.zsys_shutdown()

at the end of my python program, i have no issue at all...

@bluca
Copy link
Member

bluca commented Jun 13, 2017

I thought there was no atexit on windows?

@bluca
Copy link
Member

bluca commented Jun 13, 2017

That was with a DLL build though, might not be your case:
#1608
zeromq/zproject#836

@jemc
Copy link
Member

jemc commented Jun 13, 2017

Yes that is a known problem, since they are not generated by zproject there's no binding generation. No idea how we can solve it.

Is there a deficiency in zproject or oddity about zsys that prevents someone writing the zproject API def for it? Since there is no zsys class instance, I think that just means all of the methods would be singleton methods, as described here:

https://github.com/zeromq/zproject/blob/dfb1af34e52350cd6a94956f618e41611c8eb152/api/myclass.api#L99

@bluca
Copy link
Member

bluca commented Jun 13, 2017

Honestly not sure. Perhaps it's simply that nobody has tried to convert it until now. PRs welcome as usual :-)

@jemc
Copy link
Member

jemc commented Jun 13, 2017

Right, I just wanted to see if there was a known deficiency in the zproject API model, since I helped design it (however many years ago).

@jemc
Copy link
Member

jemc commented Jun 13, 2017

So @diorcety if you wanted to try your hand at writing an API def for zsys to go in this directory, you could generate the bindings you crave - and let us know if you get stuck and need to ask questions about how it works.

@diorcety
Copy link
Contributor Author

I manage do create the api. but i have two issues. First one:
(zproject_nodejs.gsl 704) Undefined expression:
Second one: Even if I skip nodejs, python binding is not built.

@sappo
Copy link
Member

sappo commented Jun 15, 2017 via email

@bluca
Copy link
Member

bluca commented Jun 15, 2017

I found the problem: zeromq/zproject#912

@bluca
Copy link
Member

bluca commented Jun 15, 2017

Now the Python test errors with:

Traceback (most recent call last):
  File "bindings/python/test.py", line 5, in <module>
    from czmq import *
  File "/home/lboccass/git/czmq/bindings/python/czmq/__init__.py", line 3, in <module>
    from ._czmq_ctypes import *
  File "/home/lboccass/git/czmq/bindings/python/czmq/_czmq_ctypes.py", line 7138, in <module>
    lib.zsys_udp_send.argtypes = [socket_p, zframe_p, None, c_int]
TypeError: item 3 in _argtypes_ has no from_param method

@diorcety
Copy link
Contributor Author

Certainly due to inaddr_t

@bluca
Copy link
Member

bluca commented Jun 15, 2017

I guess we have to fix it in zproject?

@diorcety
Copy link
Contributor Author

or remove this method from the api too

@bluca
Copy link
Member

bluca commented Jun 15, 2017

I guess the only problem is that the inaddr_t type is not supported - that would be worth adding

@bluca
Copy link
Member

bluca commented Jun 16, 2017

The problem was that the "type" was not specified together with the "c_type", so zproject's Python generation was not happy: #1688

@sappo now the last thing to fix is JNI, any idea what this is all about:

:compileJava/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:384: error: <identifier> expected
    public String interface () {
                 ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:384: error: illegal start of type
    public String interface () {
                            ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:384: error: <identifier> expected
    public String interface () {
                             ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:384: error: ';' expected
    public String interface () {
                              ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:385: error: illegal start of type
        return __interface ();
        ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:393: error: class, interface, or enum expected
    native static void __setIpv6Address (String value);
                  ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:394: error: class, interface, or enum expected
    public void setIpv6Address (String value) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:396: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:401: error: class, interface, or enum expected
    public String ipv6Address () {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:403: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:411: error: class, interface, or enum expected
    public void setIpv6McastAddress (String value) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:413: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:419: error: class, interface, or enum expected
    public String ipv6McastAddress () {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:421: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:431: error: class, interface, or enum expected
    public void setAutoUseFd (int autoUseFd) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:433: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:438: error: class, interface, or enum expected
    public int autoUseFd () {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:440: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:447: error: class, interface, or enum expected
    public void setLogident (String value) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:449: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:460: error: class, interface, or enum expected
    public void setLogsender (String endpoint) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:462: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:468: error: class, interface, or enum expected
    public void setLogsystem (boolean logsystem) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:470: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:475: error: class, interface, or enum expected
    public void error (String format) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:477: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:482: error: class, interface, or enum expected
    public void warning (String format) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:484: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:489: error: class, interface, or enum expected
    public void notice (String format) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:491: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:496: error: class, interface, or enum expected
    public void info (String format) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:498: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:503: error: class, interface, or enum expected
    public void debug (String format) {
           ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:505: error: class, interface, or enum expected
    }
    ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:510: error: class, interface, or enum expected
    public static void test (boolean verbose) {
                  ^
/home/travis/build/bluca/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java:512: error: class, interface, or enum expected
    }
    ^
36 errors
 FAILED

https://travis-ci.org/bluca/czmq/jobs/243624361

@jemc
Copy link
Member

jemc commented Jun 16, 2017

Seems like at least the first error is due to interface being a reserved word in Java. The zproject code generator needs to obfuscate reserved words in the target language when they appear as method names

@diorcety
Copy link
Contributor Author

Sorry I triggerd lot of issues :s

@bluca
Copy link
Member

bluca commented Jun 16, 2017

eheh no worries, on the contrary it's good, many issues fixed

@stale
Copy link

stale bot commented Nov 10, 2018

This issue has been automatically marked as stale because it has not had recent activity for 90 days. It will be closed if no further activity occurs within 21 days. Thank you for your contributions.

@stale stale bot added the stale label Nov 10, 2018
@stale stale bot closed this as completed Dec 1, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants