Jimmy DEVEIL
2008-01-23 21:38:14 UTC
Hi all,
I've got a problem with a python reserved word in an idl file with omnyORBpy
2.6.1.
This is the idl file:
interface Printer
{
void print (in string message);
};
I generate stub and skeleton by:
omniidl -bpython Printer.idl
And I make the Server like this:
#!/usr/bin/env python
import CORBA, PortableServer, CosNaming
import _GlobalIDL__POA
import sys
class Printer_impl (_GlobalIDL__POA.Printer):
def __init__ (self, name=None):
self.printerName = name or 'DefaultName'
print "++ printer %s is created" % self.printerName
def _print (self, msg):
print "** printer %s prints [%s]" % (self.printerName, msg)
def main (argv):
printerName = argv[1]
orb = CORBA.ORB_init (argv)
poa = orb.resolve_initial_references ("RootPOA")
printer = Printer_impl (printerName)
oprinter = printer._this ()
nc = orb.resolve_initial_references ("NameService")._narrow (
CosNaming.NamingContextExt)
name = nc.to_name (printerName)
nc.bind (name, oprinter)
poa._get_the_POAManager ().activate ()
orb.run ()
if __name__ == '__main__':
import sys
main (sys.argv)
And the Client like this:
import CORBA
import sys
import CosNaming
import _GlobalIDL
class Client:
# Les decorateur de methodes sont inexistant en python 2.3
# omniORB n'est pas installe pour python 2.4
#@staticmethod
def main (argv):
orb = CORBA.ORB_init(argv)
nc = orb.resolve_initial_references("NameService")._narrow(
CosNaming.NamingContextExt)
for i in range(1,int(argv[2])):
printer = nc.resolve_str (argv[1])._narrow(_GlobalIDL.Printer)
printer._print ("this is a message from python")
main=staticmethod(main)
if __name__ == "__main__":
Client.main (sys.argv)
And I have an error when I start the client and call the method (after the
naming service) :
Traceback (most recent call last):
File "Client.py", line 24, in ?
Client.main (sys.argv)
File "Client.py", line 20, in main
printer._print ("this is a message from python")
File "/home/deveil/tmp/tst/CORBA/Printer_idl.py", line 46, in _print
return _omnipy.invoke(self, "print", _0__GlobalIDL.Printer._d__print,
args)
omniORB.CORBA.BAD_OPERATION: Minor: BAD_OPERATION_UnRecognisedOperationName,
COMPLETED_NO.
After a quick search, I found that the real method call on server side is
not _print but print...
And if I change the definition on the server to print, I have a python
syntax error:
File "Server.py", line 12
def print (self, msg):
^
SyntaxError: invalid syntax
Is this a bug ? (the print call in place of _print)
Thx for all,
_______________________
Jimmy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20080123/2423a760/attachment.htm
I've got a problem with a python reserved word in an idl file with omnyORBpy
2.6.1.
This is the idl file:
interface Printer
{
void print (in string message);
};
I generate stub and skeleton by:
omniidl -bpython Printer.idl
And I make the Server like this:
#!/usr/bin/env python
import CORBA, PortableServer, CosNaming
import _GlobalIDL__POA
import sys
class Printer_impl (_GlobalIDL__POA.Printer):
def __init__ (self, name=None):
self.printerName = name or 'DefaultName'
print "++ printer %s is created" % self.printerName
def _print (self, msg):
print "** printer %s prints [%s]" % (self.printerName, msg)
def main (argv):
printerName = argv[1]
orb = CORBA.ORB_init (argv)
poa = orb.resolve_initial_references ("RootPOA")
printer = Printer_impl (printerName)
oprinter = printer._this ()
nc = orb.resolve_initial_references ("NameService")._narrow (
CosNaming.NamingContextExt)
name = nc.to_name (printerName)
nc.bind (name, oprinter)
poa._get_the_POAManager ().activate ()
orb.run ()
if __name__ == '__main__':
import sys
main (sys.argv)
And the Client like this:
import CORBA
import sys
import CosNaming
import _GlobalIDL
class Client:
# Les decorateur de methodes sont inexistant en python 2.3
# omniORB n'est pas installe pour python 2.4
#@staticmethod
def main (argv):
orb = CORBA.ORB_init(argv)
nc = orb.resolve_initial_references("NameService")._narrow(
CosNaming.NamingContextExt)
for i in range(1,int(argv[2])):
printer = nc.resolve_str (argv[1])._narrow(_GlobalIDL.Printer)
printer._print ("this is a message from python")
main=staticmethod(main)
if __name__ == "__main__":
Client.main (sys.argv)
And I have an error when I start the client and call the method (after the
naming service) :
Traceback (most recent call last):
File "Client.py", line 24, in ?
Client.main (sys.argv)
File "Client.py", line 20, in main
printer._print ("this is a message from python")
File "/home/deveil/tmp/tst/CORBA/Printer_idl.py", line 46, in _print
return _omnipy.invoke(self, "print", _0__GlobalIDL.Printer._d__print,
args)
omniORB.CORBA.BAD_OPERATION: Minor: BAD_OPERATION_UnRecognisedOperationName,
COMPLETED_NO.
After a quick search, I found that the real method call on server side is
not _print but print...
And if I change the definition on the server to print, I have a python
syntax error:
File "Server.py", line 12
def print (self, msg):
^
SyntaxError: invalid syntax
Is this a bug ? (the print call in place of _print)
Thx for all,
_______________________
Jimmy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20080123/2423a760/attachment.htm