I have an RpyC server that imports a specific module, a class inside this module should be exposed so that this class can then be inherited from the client side.
For testing purposes I removed the module importing/exposing and created a simple class inside my RPyC service called exposed_TestClass.
server side: rpyc_server.py
import rpyc
from rpyc.utils.server import ThreadedServer
class MyService(rpyc.Service):
class exposed_TestClass:
def exposed_Exec(self):
print("original print of class")
t = ThreadedServer(MyService, port=12345)
t.start()
client side: python3 shell
>>> import rpyc
>>> conn = rpyc.connect("localhost", 12345)
>>> conn.root.TestClass
<class 'exposed_TestClass'>
>>> conn.root.TestClass()
<exposed_TestClass object at 0x7f2dda642588>
>>> #calling the Exec function also works, prints at server side
>>> conn.root.TestClass().Exec()
>>>
>>>
>>> # test inheriting class
>>> class MyClass(conn.root.TestClass):
... def NewMethod(self):
... print("printing from new method")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/rpyc/core/netref.py", line 220, in method
return syncreq(_self, consts.HANDLE_CALLATTR, name, args, kwargs)
File "/usr/lib/python3/dist-packages/rpyc/core/netref.py", line 74, in syncreq
conn = object.__getattribute__(proxy, "____conn__")
AttributeError: 'str' object has no attribute '____conn__'