diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..66197df89f4d9af306d6fb454d6dfe400428f097 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,24 @@ +[submodule "libdap"] + path = libdap + url = https://gitlab.demlabs.net/cellframe/libdap.git +[submodule "libdap-crypto"] + path = libdap-crypto + url = https://gitlab.demlabs.net/cellframe/libdap-crypto.git +[submodule "libdap-server"] + path = libdap-server + url = https://gitlab.demlabs.net/cellframe/libdap-server.git +[submodule "libdap-server-core"] + path = libdap-server-core + url = https://gitlab.demlabs.net/cellframe/libdap-server-core.git +[submodule "libdap-server-udp"] + path = libdap-server-udp + url = https://gitlab.demlabs.net/cellframe/libdap-server-udp.git +[submodule "libdap-stream"] + path = libdap-stream + url = https://gitlab.demlabs.net/cellframe/libdap-stream.git +[submodule "libdap-stream-ch"] + path = libdap-stream-ch + url = https://gitlab.demlabs.net/cellframe/libdap-stream-ch.git +[submodule "libdap-client"] + path = libdap-client + url = https://gitlab.demlabs.net/cellframe/libdap-client.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e79e3e916006d7cd664a44955cf29b59a6187fbf --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,90 @@ +project(dap_client_python_module C) +cmake_minimum_required(VERSION 2.8) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_C_STANDARD 11) +add_definitions("-fpic") +add_definitions("-DDAP_LOG_MT") + +add_definitions ("-DNODE_NETNAME=\"cellframe\"") +if(UNIX) + add_definitions("-DDAP_OS_UNIX") +endif() + +if (NOT (${SUBMODULES_NO_BUILD} MATCHES ON)) + set (SUBMODULES_NO_BUILD ON) + if (NOT (TARGET dap_core)) + add_subdirectory(libdap) + target_compile_options( + dap_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_crypto)) + add_subdirectory(libdap-crypto) + target_compile_options( + dap_crypto PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_server_core)) + add_subdirectory(libdap-server-core) + target_compile_options( + dap_server_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET libdap-server)) + add_subdirectory(libdap-server) +# target_compile_options( +# libdap-server PRIVATE +# "-fpic" +# ) + endif() + if (NOT (TARGET dap_stream)) + add_subdirectory(libdap-stream) + target_compile_options( + dap_stream PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch)) + add_subdirectory(libdap-stream-ch) + target_compile_options( + dap_stream_ch PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_udp_server)) + add_subdirectory(libdap-server-udp) + target_compile_options( + dap_udp_server PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_client)) + add_subdirectory(libdap-client) + target_compile_options( + dap_client PRIVATE + "-fpic" + ) + endif() +endif() +#add_definitions("-DDAP_APP_NAME=\"TestPRJ\" -DSYSTEM_CONFIGS_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"") + +file(GLOB CLIENT_PYTHON_SRCS src/*.c) +file(GLOB CLIENT_PYTHON_HEADERS include/*.h) + +set(Python_ADDITIONAL_VERSIONS 3.7) +find_package (PythonLibs REQUIRED) +include_directories(${PYTHON_INCLUDE_DIR} include/) + +add_library(${PROJECT_NAME} STATIC ${CLIENT_PYTHON_SRCS} ${CLIENT_PYTHON_HEADERS}) + +target_link_libraries(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_client ) + +target_include_directories(${PROJECT_NAME} PUBLIC include/ ) + diff --git a/include/libdap_client_python.h b/include/libdap_client_python.h new file mode 100644 index 0000000000000000000000000000000000000000..9a95fbf75234b16249550749214b3156fddb9325 --- /dev/null +++ b/include/libdap_client_python.h @@ -0,0 +1,98 @@ +#define PY_SSIZE_T_CLEAN +#include <Python.h> +#include "dap_client.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PyDapClient{ + PyObject_HEAD + dap_client_t *client; +}PyDapClientObject; + +int dap_client_init_py(); +void dap_client_deinit_py(); + +//PyObject *dap_client_new_py(PyObject *) +PyObject *dap_client_delete_py(PyObject *self, PyObject *args); + +PyObject *dao_client_set_uplink_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_uplink_addr_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_uplink_port_py(PyObject *self, PyObject *args); + +PyObject *dap_client_get_key_stream_py(PyObject *self, PyObject *args); +PyObject *dap_client_go_stage_py(PyObject *self, PyObject *args); +PyObject *dap_client_reset_py(PyObject *self, PyObject *args); +PyObject *dap_client_request_enc_py(PyObject *self, PyObject *args); +PyObject *dap_client_request_py(PyObject *self, PyObject *args); +PyObject *dap_client_disconnect_py(PyObject *self, PyObject *args); + +PyObject *dap_client_get_stage_str_py(PyObject *self, PyObject *args); +PyObject *dap_client_stage_str_py(PyObject *self, PyObject *args); + +PyObject *dap_client_get_stage_status_str_py(PyObject *self, PyObject *args); +PyObject *dap_client_stage_status_str_py(PyObject *self, PyObject *args); +PyObject *dap_client_error_str_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_error_str_py(PyObject *self, PyObject *args); + +PyObject *dap_client_get_auth_cookie_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_stream_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_stream_ch_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_stream_id_py(PyObject *self, PyObject *args); +PyObject *dap_client_set_active_channels_py(PyObject *self, PyObject *args); + +PyObject *dap_client_get_stage_py(PyObject *self, PyObject *args); +PyObject *dap_client_get_stage_status_py(PyObject *self, PyObject *args); + +static PyMethodDef DapClientMethods[] = { + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject dapClientObject_dapClientType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.Client", /* tp_name */ + sizeof(PyDapClientObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Client objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapClientMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + +}; + +#ifdef __cplusplus +} +#endif + diff --git a/include/wrapping_dap_client_stage.h b/include/wrapping_dap_client_stage.h new file mode 100644 index 0000000000000000000000000000000000000000..bb3a9fe88d21ab26d2ad4b53a439d0e9e0cc278a --- /dev/null +++ b/include/wrapping_dap_client_stage.h @@ -0,0 +1,84 @@ +#ifndef _WRAPPING_DAP_CLIENT_STAGE_ +#define _WRAPPING_DAP_CLIENT_STAGE_ +#include <Python.h> +#include "dap_client.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +typedef struct PyDapClientStage{ + PyObject_HEAD + dap_client_stage_t stage; +}PyDapClientStageObject; + +PyObject *STAGE_BEGIN_PY(); +PyObject *STAGE_ENC_INIT_PY(); +PyObject *STAGE_STREAM_CTL_PY(); +PyObject *STAGE_STREAM_SESSION_PY(); +PyObject *STAGE_STREAM_CONNECTED_PY(); +PyObject *STAGE_STREAM_STREAMING_PY(); +PyObject *STAGE_STREAM_ABORT_PY(); + +static PyMethodDef DapClientStageMethods[] = { + {"STAGE_BEGIN", (PyCFunction)STAGE_BEGIN_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_ENC_INIT", (PyCFunction)STAGE_ENC_INIT_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STREAM_CTL", (PyCFunction)STAGE_STREAM_CTL_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STREAM_SESSION", (PyCFunction)STAGE_STREAM_SESSION_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STREAM_CONNECTED", (PyCFunction)STAGE_STREAM_CONNECTED_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STREAM_STREAMING", (PyCFunction)STAGE_STREAM_STREAMING_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STREAM_ABORT",(PyCFunction) STAGE_STREAM_ABORT_PY, METH_NOARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject dapClientStageObject_dapClientStageType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ClientStage", /* tp_name */ + sizeof(PyDapClientStageObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Client stage objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapClientStageMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + +}; + + + + +#ifdef __cplusplus +} +#endif + +#endif // _WRAPPING_DAP_CLIENT_STAGE_ \ No newline at end of file diff --git a/include/wrapping_dap_client_stage_status.h b/include/wrapping_dap_client_stage_status.h new file mode 100644 index 0000000000000000000000000000000000000000..8b33546fbec58bcf03add34be043c4c8b5035551 --- /dev/null +++ b/include/wrapping_dap_client_stage_status.h @@ -0,0 +1,83 @@ +#ifndef _WRAPPING_DAP_CLIENT_STAGE_STATUS_ +#define _WRAPPING_DAP_CLIENT_STAGE_STATUS_ + +#include <Python.h> +#include "dap_client.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +typedef struct PyDapClientStageStatus{ + PyObject_HEAD + dap_client_stage_status_t stage_status; +}PyDapClientStageStatusObject; + +PyObject *STAGE_STATUS_NONE_PY(); +// Enc init stage +PyObject *STAGE_STATUS_IN_PROGRESS_PY(); +PyObject *STAGE_STATUS_ABORTING_PY(); +PyObject *STAGE_STATUS_ERROR_PY(); +PyObject *STAGE_STATUS_DONE_PY(); + + +PyMethodDef DapClientStageStatusMethods[] = { + {"STAGE_STATUS_NONE", STAGE_STATUS_NONE_PY, METH_NOARGS, ""}, + // Enc init stage + {"STAGE_STATUS_IN_PROGRESS", STAGE_STATUS_IN_PROGRESS_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STATUS_ABORTING", STAGE_STATUS_ABORTING_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STATUS_ERROR", STAGE_STATUS_ERROR_PY, METH_NOARGS | METH_STATIC, ""}, + {"STAGE_STATUS_DONE", STAGE_STATUS_DONE_PY, METH_NOARGS | METH_STATIC, ""}, + + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject dapClientStageStatusObject_dapClientStageStatusType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ClientStageStatus", /* tp_name */ + sizeof(PyDapClientStageStatusObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Client stage status objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapClientStageStatusMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + +}; + + +#ifdef __cplusplus +} +#endif + +#endif //_WRAPPING_DAP_CLIENT_STAGE_STATUS_ \ No newline at end of file diff --git a/libdap b/libdap new file mode 160000 index 0000000000000000000000000000000000000000..1c0614797a3a2a2f4c179630025600e177637a65 --- /dev/null +++ b/libdap @@ -0,0 +1 @@ +Subproject commit 1c0614797a3a2a2f4c179630025600e177637a65 diff --git a/libdap-client b/libdap-client new file mode 160000 index 0000000000000000000000000000000000000000..d3f5458f352294547b1ac68404d5ccdc8dea28ba --- /dev/null +++ b/libdap-client @@ -0,0 +1 @@ +Subproject commit d3f5458f352294547b1ac68404d5ccdc8dea28ba diff --git a/libdap-crypto b/libdap-crypto new file mode 160000 index 0000000000000000000000000000000000000000..c81202ba5d48e5d77afcc8aea9962a10560527f3 --- /dev/null +++ b/libdap-crypto @@ -0,0 +1 @@ +Subproject commit c81202ba5d48e5d77afcc8aea9962a10560527f3 diff --git a/libdap-server b/libdap-server new file mode 160000 index 0000000000000000000000000000000000000000..e3f07ae78aaecfada9f44abdd48a4ebbce9e2184 --- /dev/null +++ b/libdap-server @@ -0,0 +1 @@ +Subproject commit e3f07ae78aaecfada9f44abdd48a4ebbce9e2184 diff --git a/libdap-server-core b/libdap-server-core new file mode 160000 index 0000000000000000000000000000000000000000..73a86ef8202ee67a05098d186aac2deacb207f63 --- /dev/null +++ b/libdap-server-core @@ -0,0 +1 @@ +Subproject commit 73a86ef8202ee67a05098d186aac2deacb207f63 diff --git a/libdap-server-udp b/libdap-server-udp new file mode 160000 index 0000000000000000000000000000000000000000..a14daa6c39aed9bba32684872d03afc7778db61e --- /dev/null +++ b/libdap-server-udp @@ -0,0 +1 @@ +Subproject commit a14daa6c39aed9bba32684872d03afc7778db61e diff --git a/libdap-stream b/libdap-stream new file mode 160000 index 0000000000000000000000000000000000000000..eb3f6b659c2ad25e1b9906eb9820e46de7443103 --- /dev/null +++ b/libdap-stream @@ -0,0 +1 @@ +Subproject commit eb3f6b659c2ad25e1b9906eb9820e46de7443103 diff --git a/libdap-stream-ch b/libdap-stream-ch new file mode 160000 index 0000000000000000000000000000000000000000..daeb35e4680f659d41ade4da7514138e56278685 --- /dev/null +++ b/libdap-stream-ch @@ -0,0 +1 @@ +Subproject commit daeb35e4680f659d41ade4da7514138e56278685 diff --git a/src/libdap_client_python.c b/src/libdap_client_python.c new file mode 100644 index 0000000000000000000000000000000000000000..101eee85b90ef8a52779871afac1123d6d24a685 --- /dev/null +++ b/src/libdap_client_python.c @@ -0,0 +1,80 @@ +#include "libdap_client_python.h" + +int dap_client_init_py(){ + return dap_client_init(); +} +void dap_client_deinit_py(){ + dap_client_deinit(); +} + +PyObject *dao_client_set_uplink_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_uplink_addr_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_uplink_port_py(PyObject *self, PyObject *args){ + return NULL; +} + +PyObject *dap_client_get_key_stream_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_go_stage_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_reset_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_request_enc_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_request_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_disconnect_py(PyObject *self, PyObject *args){ + return NULL; +} + +PyObject *dap_client_get_stage_str_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_stage_str_py(PyObject *self, PyObject *args){ + return NULL; +} + +PyObject *dap_client_get_stage_status_str_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_stage_status_str_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_error_str_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_error_str_py(PyObject *self, PyObject *args){ + return NULL; +} + +PyObject *dap_client_get_auth_cookie_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_stream_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_stream_ch_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_stream_id_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_set_active_channels_py(PyObject *self, PyObject *args){ + return NULL; +} + +PyObject *dap_client_get_stage_py(PyObject *self, PyObject *args){ + return NULL; +} +PyObject *dap_client_get_stage_status_py(PyObject *self, PyObject *args){ + return NULL; +} \ No newline at end of file diff --git a/src/wrapping_dap_client_stage.c b/src/wrapping_dap_client_stage.c new file mode 100644 index 0000000000000000000000000000000000000000..25cc196673915741813f4ff7b2e78e5393ee4e09 --- /dev/null +++ b/src/wrapping_dap_client_stage.c @@ -0,0 +1,37 @@ +#include "wrapping_dap_client_stage.h" + +PyObject *STAGE_BEGIN_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_BEGIN; + return (PyObject *)obj_stage; +} +PyObject *STAGE_ENC_INIT_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_ENC_INIT; + return (PyObject *)obj_stage; +} +PyObject *STAGE_STREAM_CTL_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_STREAM_CTL; + return (PyObject *)obj_stage; +} +PyObject *STAGE_STREAM_SESSION_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_STREAM_SESSION; + return (PyObject *)obj_stage; +} +PyObject *STAGE_STREAM_CONNECTED_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_STREAM_CONNECTED; + return (PyObject *)obj_stage; +} +PyObject *STAGE_STREAM_STREAMING_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_STREAM_STREAMING; + return (PyObject *)obj_stage; +} +PyObject *STAGE_STREAM_ABORT_PY(){ + PyDapClientStageObject *obj_stage = (PyDapClientStageObject*)_PyObject_New(&dapClientStageObject_dapClientStageType); + obj_stage->stage = STAGE_STREAM_ABORT; + return (PyObject *)obj_stage; +} \ No newline at end of file diff --git a/src/wrapping_dap_client_stage_status.c b/src/wrapping_dap_client_stage_status.c new file mode 100644 index 0000000000000000000000000000000000000000..ff1603ab0c656b38cb381eebadd580dc0b14c866 --- /dev/null +++ b/src/wrapping_dap_client_stage_status.c @@ -0,0 +1,33 @@ +#include "wrapping_dap_client_stage_status.h" + +PyObject *STAGE_STATUS_NONE_PY(){ + PyDapClientStageStatusObject *obj_stage_status = (PyDapClientStageStatusObject*)_PyObject_New( + &dapClientStageStatusObject_dapClientStageStatusType); + obj_stage_status->stage_status = STAGE_STATUS_NONE; + return (PyObject *)obj_stage_status; +} +// Enc init stage +PyObject *STAGE_STATUS_IN_PROGRESS_PY(){ + PyDapClientStageStatusObject *obj_stage_status = (PyDapClientStageStatusObject*)_PyObject_New( + &dapClientStageStatusObject_dapClientStageStatusType); + obj_stage_status->stage_status = STAGE_STATUS_IN_PROGRESS; + return (PyObject *)obj_stage_status; +} +PyObject *STAGE_STATUS_ABORTING_PY(){ + PyDapClientStageStatusObject *obj_stage_status = (PyDapClientStageStatusObject*)_PyObject_New( + &dapClientStageStatusObject_dapClientStageStatusType); + obj_stage_status->stage_status = STAGE_STATUS_ABORTING; + return (PyObject *)obj_stage_status; +} +PyObject *STAGE_STATUS_ERROR_PY(){ + PyDapClientStageStatusObject *obj_stage_status = (PyDapClientStageStatusObject*)_PyObject_New( + &dapClientStageStatusObject_dapClientStageStatusType); + obj_stage_status->stage_status = STAGE_STATUS_ERROR; + return (PyObject *)obj_stage_status; +} +PyObject *STAGE_STATUS_DONE_PY(){ + PyDapClientStageStatusObject *obj_stage_status = (PyDapClientStageStatusObject*)_PyObject_New( + &dapClientStageStatusObject_dapClientStageStatusType); + obj_stage_status->stage_status = STAGE_STATUS_DONE; + return (PyObject *)obj_stage_status; +} \ No newline at end of file