From 4929bde22edc7c545301d343e5da9b2da787aead Mon Sep 17 00:00:00 2001
From: Alexey Stratulat <alexey.stratulat@demlabs.net>
Date: Mon, 10 Jun 2019 17:23:30 +0700
Subject: [PATCH] Added checks for successful opening of the configuration file
 and initialization of dap_common. The function of setting the logging level
 is also added.

---
 src/libdap-python.c | 60 ++++++++++++++++++++++++++++++++++-----------
 src/libdap-python.h |  5 ++++
 2 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/src/libdap-python.c b/src/libdap-python.c
index 5e03e03..218465a 100644
--- a/src/libdap-python.c
+++ b/src/libdap-python.c
@@ -1,7 +1,6 @@
 #include "libdap-python.h"
 
-static PyObject *dap_init(PyObject *self, PyObject *args)
-{
+static PyObject *dap_init(PyObject *self, PyObject *args){
     const char *data;
     char *system_configs_dir;
     char *dap_app_name;
@@ -12,13 +11,10 @@ static PyObject *dap_init(PyObject *self, PyObject *args)
     int lenDapAppName=0;
     int countSeparators=0;
     int lenMassives = 0;
-    while (*(data+lenMassives) != '\0')
-    {
-        if (*(data+lenMassives)=='\n')
-        {
+    while (*(data+lenMassives) != '\0'){
+        if (*(data+lenMassives)=='\n'){
             countSeparators += 1;
-        }
-        else {
+        }else {
             if (countSeparators == 0)
                 lenSystemConfigDir++;
             if (countSeparators == 1)
@@ -35,20 +31,56 @@ static PyObject *dap_init(PyObject *self, PyObject *args)
     const char* log = "_logs.txt";
     memcpy(dap_app_name_logs+lenDapAppName, log,9);
     dap_config_init(system_configs_dir);
-    dap_config_open(dap_app_name);
-    dap_common_init(dap_app_name_logs);
+    if ((g_config = dap_config_open(dap_app_name) ) == NULL){
+        log_it(L_CRITICAL, "Can't init general configurations");
+        return PyLong_FromLong(-1);
+    }
+    if (dap_common_init(dap_app_name_logs)!=0){
+        log_it(L_CRITICAL, "Can't init common functions module");
+        return PyLong_FromLong(-2);
+    }
+    dap_log_level_set( dap_config_get_item_bool_default(g_config,"general","debug_mode", false)? L_DEBUG: L_NOTICE );
     return PyLong_FromLong(0);
 }
 
-static PyObject *dap_deinit(PyObject *self)
-{
+static PyObject *dap_deinit(PyObject *self){
     dap_config_deinit();
     dap_common_deinit();
     return PyLong_FromLong(0);
 }
 
-PyMODINIT_FUNC PyInit_libdap_python_module(void)
-{
+static PyObject *dap_set_log_level(PyObject *self, PyObject *args){
+    const char *data;
+    if (!PyArg_ParseTuple(args, "s", &data))
+        return NULL;
+    if (strcmp(data,"DEBUG") == 0){
+        dap_log_level_set(L_DEBUG);
+        return PyLong_FromLong(0);
+    }
+    if (strcmp(data, "INFO") == 0){
+        dap_log_level_set(L_INFO);
+        return PyLong_FromLong(0);
+    }
+    if (strcmp(data, "NOTICE") == 0){
+        dap_log_level_set(L_NOTICE);
+        return PyLong_FromLong(0);
+    }
+    if (strcmp(data, "WARNING") == 0){
+        dap_log_level_set(L_WARNING);
+        return PyLong_FromLong(0);
+    }
+    if (strcmp(data, "ERROR") == 0){
+        dap_log_level_set(L_ERROR);
+        return PyLong_FromLong(0);
+    }
+    if (strcmp(data, "CRITICAL") == 0){
+        dap_log_level_set(L_CRITICAL);
+        return PyLong_FromLong(0);
+    }
+    return PyLong_FromLong(-1);
+}
+
+PyMODINIT_FUNC PyInit_libdap_python_module(void){
     return PyModule_Create(&dapmodule);
 }
 
diff --git a/src/libdap-python.h b/src/libdap-python.h
index 02f9806..93c1400 100644
--- a/src/libdap-python.h
+++ b/src/libdap-python.h
@@ -7,13 +7,18 @@
 extern "C" {
 #endif
 
+#define LOG_TAG "libdap-python"
+
 static PyObject *dap_init(PyObject *self, PyObject *args);
 
 static PyObject *dap_deinit(PyObject *self);
 
+static PyObject *dap_set_log_level(PyObject *self, PyObject *args);
+
 static PyMethodDef DapMethods[] = {
         {"init", dap_init, METH_VARARGS, "Initialization of the DAP (Deus Applicaions Prototypes) library"},
         {"deinit", dap_deinit, METH_NOARGS, "Deinitialization of the DAP (Deus Applicaions Prototypes) library"},
+        {"setLogLevel", dap_set_log_level, METH_VARARGS, "Setting the logging level"},
         {NULL, NULL, 0, NULL}
 };
 
-- 
GitLab