Commit cb5ad2ed authored by Celine Mercier's avatar Celine Mercier

Added functions to try to open a DMS if it exists

parent f5e992ab
......@@ -9,8 +9,9 @@ cdef extern from "obidms.h" nogil:
ctypedef OBIDMS_t* OBIDMS_p
OBIDMS_p obi_dms(const_char_p dms_name)
OBIDMS_p obi_open_dms(const char* dms_path)
OBIDMS_p obi_create_dms(const char* dms_path)
OBIDMS_p obi_open_dms(const_char_p dms_path)
OBIDMS_p obi_test_open_dms(const_char_p dms_path)
OBIDMS_p obi_create_dms(const_char_p dms_path)
int obi_close_dms(OBIDMS_p dms)
char* obi_dms_get_dms_path(OBIDMS_p dms)
char* obi_dms_get_full_path(OBIDMS_p dms, const_char_p path_name)
......@@ -5,6 +5,7 @@ from libc.stdlib cimport free
from cpython.list cimport PyList_Size
from .capi.obidms cimport obi_open_dms, \
obi_test_open_dms, \
obi_create_dms, \
obi_close_dms, \
......@@ -52,6 +53,18 @@ cdef class DMS(OBIWrapper):
dms =, pointer)
return dms
def test_open(object dms_name) :
cdef OBIDMS_p pointer
cdef DMS dms
cdef bytes dms_name_b = tobytes(dms_name)
pointer = obi_test_open_dms(<const_char_p> dms_name_b)
if pointer == NULL :
raise Exception("Failed opening an OBIDMS")
dms =, pointer)
return dms
def close(self) :
......@@ -362,7 +362,7 @@ OBIDMS_p obi_open_dms(const char* dms_path)
if (realpath(complete_dms_path, dms->directory_path) == NULL)
obidebug(1, "\nError getting the absolute path to the DMS directory");
obidebug(1, "\nError getting the absolute path to the DMS directory (DMS does not exist)");
return NULL;
......@@ -536,6 +536,25 @@ OBIDMS_p obi_open_dms(const char* dms_path)
OBIDMS_p obi_test_open_dms(const char* dms_name)
int exists;
exists = obi_dms_exists(dms_name);
switch (exists)
case 0:
return NULL;
case 1:
return obi_open_dms(dms_name);
obidebug(1, "\nError checking if an OBIDMS directory exists");
return NULL;
OBIDMS_p obi_dms(const char* dms_name)
int exists;
......@@ -175,6 +175,24 @@ OBIDMS_p obi_create_dms(const char* dms_name);
OBIDMS_p obi_open_dms(const char* dms_path);
* @brief Opens an existing OBITools Data Management instance (OBIDMS).
* @warning No error is printed or saved if the DMS does not exist. For it to be the case, use obi_open_dms().
* @param dms_path A pointer to a C string containing the path to the database.
* @returns A pointer to an OBIDMS structure describing the opened DMS.
* @retval NULL if the DMS does not exist or if an error occurred.
* @see obi_open_dms()
* @see obi_close_dms()
* @since May 2017
* @author Celine Mercier (
OBIDMS_p obi_test_open_dms(const char* dms_name);
* @brief Creates or opens a new OBIDMS instance.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment