diff options
author | Mark Spruiell <mes@zeroc.com> | 2017-03-28 15:10:23 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2017-03-28 15:10:23 -0700 |
commit | 28e983d958bc0b8f3c047a88b7de4c19f997db07 (patch) | |
tree | 47a39f6cd5847570f32ca0e81db72cdb351687bd /python/modules/IcePy/Communicator.cpp | |
parent | New initialize with configFile overloads (diff) | |
download | ice-28e983d958bc0b8f3c047a88b7de4c19f997db07.tar.bz2 ice-28e983d958bc0b8f3c047a88b7de4c19f997db07.tar.xz ice-28e983d958bc0b8f3c047a88b7de4c19f997db07.zip |
ICE-7716 - Python fixes
Diffstat (limited to 'python/modules/IcePy/Communicator.cpp')
-rw-r--r-- | python/modules/IcePy/Communicator.cpp | 103 |
1 files changed, 81 insertions, 22 deletions
diff --git a/python/modules/IcePy/Communicator.cpp b/python/modules/IcePy/Communicator.cpp index ef6432ebdc5..563c02e1d31 100644 --- a/python/modules/IcePy/Communicator.cpp +++ b/python/modules/IcePy/Communicator.cpp @@ -92,58 +92,112 @@ extern "C" static int communicatorInit(CommunicatorObject* self, PyObject* args, PyObject* /*kwds*/) { - PyObject* argList = 0; - PyObject* initData = 0; - if(!PyArg_ParseTuple(args, STRCAST("|OO"), &argList, &initData)) + // + // The argument options are: + // + // Ice.initialize() + // Ice.initialize(args) + // Ice.initialize(initData) + // Ice.initialize(configFile) + // Ice.initialize(args, initData) + // Ice.initialize(args, configFile) + // + + PyObject* arg1 = 0; + PyObject* arg2 = 0; + if(!PyArg_ParseTuple(args, STRCAST("|OO"), &arg1, &arg2)) { return -1; } - if(argList == Py_None) + PyObject* argList = 0; + PyObject* initData = 0; + PyObject* configFile = 0; + + if(arg1 == Py_None) { - argList = 0; + arg1 = 0; } - if(initData == Py_None) + if(arg2 == Py_None) { - initData = 0; + arg2 = 0; } PyObject* initDataType = lookupType("Ice.InitializationData"); - if(argList && !initData) + if(arg1) { - if(PyObject_IsInstance(argList, initDataType)) + if(PyList_Check(arg1)) + { + argList = arg1; + } + else if(PyObject_IsInstance(arg1, initDataType)) { - initData = argList; - argList = 0; + initData = arg1; } - else if(!PyList_Check(argList)) + else if(checkString(arg1)) { - PyErr_Format(PyExc_ValueError, STRCAST("initialize expects an argument list or Ice.InitializationData")); + configFile = arg1; + } + else + { + PyErr_Format(PyExc_ValueError, + STRCAST("initialize expects an argument list, Ice.InitializationData or a configuration filename")); return -1; } } - else if(argList && initData) + + if(arg2) { - if(!PyList_Check(argList) || !PyObject_IsInstance(initData, initDataType)) + if(PyList_Check(arg2)) { - PyErr_Format(PyExc_ValueError, STRCAST("initialize expects an argument list and Ice.InitializationData")); + if(argList) + { + PyErr_Format(PyExc_ValueError, STRCAST("unexpected list argument to initialize")); + return -1; + } + argList = arg2; + } + else if(PyObject_IsInstance(arg2, initDataType)) + { + if(initData) + { + PyErr_Format(PyExc_ValueError, STRCAST("unexpected Ice.InitializationData argument to initialize")); + return -1; + } + initData = arg2; + } + else if(checkString(arg2)) + { + if(configFile) + { + PyErr_Format(PyExc_ValueError, STRCAST("unexpected string argument to initialize")); + return -1; + } + configFile = arg2; + } + else + { + PyErr_Format(PyExc_ValueError, + STRCAST("initialize expects an argument list, Ice.InitializationData or a configuration filename")); return -1; } } + if(initData && configFile) + { + PyErr_Format(PyExc_ValueError, + STRCAST("initialize accepts either Ice.InitializationData or a configuration filename")); + return -1; + } + Ice::StringSeq seq; if(argList && !listToStringSeq(argList, seq)) { return -1; } - // - // Use the with-args or the without-args version of initialize()? - // - bool hasArgs = argList != 0; - Ice::InitializationData data; DispatcherPtr dispatcherWrapper; @@ -204,6 +258,11 @@ communicatorInit(CommunicatorObject* self, PyObject* args, PyObject* /*kwds*/) { data.properties = Ice::createProperties(); } + + if(configFile) + { + data.properties->load(getString(configFile)); + } } catch(const Ice::Exception& ex) { @@ -230,7 +289,7 @@ communicatorInit(CommunicatorObject* self, PyObject* args, PyObject* /*kwds*/) try { AllowThreads allowThreads; - if(hasArgs) + if(argList) { communicator = Ice::initialize(argc, argv, data); } |