Added functions to try to open a DMS if it exists
This commit is contained in:
@ -9,8 +9,9 @@ cdef extern from "obidms.h" nogil:
|
|||||||
ctypedef OBIDMS_t* OBIDMS_p
|
ctypedef OBIDMS_t* OBIDMS_p
|
||||||
|
|
||||||
OBIDMS_p obi_dms(const_char_p dms_name)
|
OBIDMS_p obi_dms(const_char_p dms_name)
|
||||||
OBIDMS_p obi_open_dms(const char* dms_path)
|
OBIDMS_p obi_open_dms(const_char_p dms_path)
|
||||||
OBIDMS_p obi_create_dms(const char* 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)
|
int obi_close_dms(OBIDMS_p dms)
|
||||||
char* obi_dms_get_dms_path(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)
|
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 cpython.list cimport PyList_Size
|
||||||
|
|
||||||
from .capi.obidms cimport obi_open_dms, \
|
from .capi.obidms cimport obi_open_dms, \
|
||||||
|
obi_test_open_dms, \
|
||||||
obi_create_dms, \
|
obi_create_dms, \
|
||||||
obi_close_dms, \
|
obi_close_dms, \
|
||||||
obi_dms_get_full_path
|
obi_dms_get_full_path
|
||||||
@ -53,6 +54,18 @@ cdef class DMS(OBIWrapper):
|
|||||||
return dms
|
return dms
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
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 = OBIWrapper.new(DMS, pointer)
|
||||||
|
return dms
|
||||||
|
|
||||||
|
|
||||||
def close(self) :
|
def close(self) :
|
||||||
'''
|
'''
|
||||||
Closes the DMS instance and free the associated memory
|
Closes the DMS instance and free the associated memory
|
||||||
|
21
src/obidms.c
21
src/obidms.c
@ -362,7 +362,7 @@ OBIDMS_p obi_open_dms(const char* dms_path)
|
|||||||
if (realpath(complete_dms_path, dms->directory_path) == NULL)
|
if (realpath(complete_dms_path, dms->directory_path) == NULL)
|
||||||
{
|
{
|
||||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||||
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)");
|
||||||
free(complete_dms_path);
|
free(complete_dms_path);
|
||||||
return NULL;
|
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)
|
OBIDMS_p obi_dms(const char* dms_name)
|
||||||
{
|
{
|
||||||
int exists;
|
int exists;
|
||||||
|
18
src/obidms.h
18
src/obidms.h
@ -175,6 +175,24 @@ OBIDMS_p obi_create_dms(const char* dms_name);
|
|||||||
OBIDMS_p obi_open_dms(const char* dms_path);
|
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 (celine.mercier@metabarcoding.org)
|
||||||
|
*/
|
||||||
|
OBIDMS_p obi_test_open_dms(const char* dms_name);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates or opens a new OBIDMS instance.
|
* @brief Creates or opens a new OBIDMS instance.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user