Andrew Edem
2007-06-05 21:42:29 UTC
Hello,
It does not seem possible to use CORBA.TypeCode() on enum definitions
from stubs. I think this is because the python type of the enum
definition is an instance while omniORB expects it to be a class.
I'm not entirely sure if this is a bug or by design, and I have no idea
where the "right" place to fix it would be.
Thanks,
-Andrew
test.idl:
module Test {
enum TestEnum {
TEST_VALUE1,
TEST_VALUE2
};
};
test.py:
import Test
from omniORB import CORBA
import logging
print "Type of enum: ", `type(Test.TestEnum)`
try:
print "Enum type code by object: ", `CORBA.TypeCode(Test.TestEnum)`
except:
logging.exception("Getting type code by class failed")
try:
print "Enum type code by string: ", \
`CORBA.TypeCode("IDL:Test/TestEnum:1.0")`
except:
logging.exception("Getting type code by string failed")
output:
Type of enum: <type 'instance'>
ERROR:root:Getting type code by class failed
Traceback (most recent call last):
File "test.py", line 8, in ?
print "Enum type code by object: ", `CORBA.TypeCode(Test.TestEnum)`
File "/usr/lib/python2.4/site-packages/omniORB/CORBA.py", line 405, in
__init__
self._t = tcInternal.typeCodeFromClassOrRepoId(cr)
File "/usr/lib/python2.4/site-packages/omniORB/tcInternal.py", line
192, in typeCodeFromClassOrRepoId
raise TypeError("Argument must be CORBA class or repository id.")
TypeError: Argument must be CORBA class or repository id.
Enum type code by string: CORBA.TypeCode("IDL:Test/TestEnum:1.0")
It does not seem possible to use CORBA.TypeCode() on enum definitions
from stubs. I think this is because the python type of the enum
definition is an instance while omniORB expects it to be a class.
I'm not entirely sure if this is a bug or by design, and I have no idea
where the "right" place to fix it would be.
Thanks,
-Andrew
test.idl:
module Test {
enum TestEnum {
TEST_VALUE1,
TEST_VALUE2
};
};
test.py:
import Test
from omniORB import CORBA
import logging
print "Type of enum: ", `type(Test.TestEnum)`
try:
print "Enum type code by object: ", `CORBA.TypeCode(Test.TestEnum)`
except:
logging.exception("Getting type code by class failed")
try:
print "Enum type code by string: ", \
`CORBA.TypeCode("IDL:Test/TestEnum:1.0")`
except:
logging.exception("Getting type code by string failed")
output:
Type of enum: <type 'instance'>
ERROR:root:Getting type code by class failed
Traceback (most recent call last):
File "test.py", line 8, in ?
print "Enum type code by object: ", `CORBA.TypeCode(Test.TestEnum)`
File "/usr/lib/python2.4/site-packages/omniORB/CORBA.py", line 405, in
__init__
self._t = tcInternal.typeCodeFromClassOrRepoId(cr)
File "/usr/lib/python2.4/site-packages/omniORB/tcInternal.py", line
192, in typeCodeFromClassOrRepoId
raise TypeError("Argument must be CORBA class or repository id.")
TypeError: Argument must be CORBA class or repository id.
Enum type code by string: CORBA.TypeCode("IDL:Test/TestEnum:1.0")