OBIQUAL columns can now handle multiple elements per line
This commit is contained in:
@ -44,7 +44,8 @@ from ._obidmscolumn_bool cimport OBIDMS_column_bool, \
|
|||||||
from ._obidmscolumn_char cimport OBIDMS_column_char, \
|
from ._obidmscolumn_char cimport OBIDMS_column_char, \
|
||||||
OBIDMS_column_multi_elts_char
|
OBIDMS_column_multi_elts_char
|
||||||
|
|
||||||
from ._obidmscolumn_qual cimport OBIDMS_column_qual
|
from ._obidmscolumn_qual cimport OBIDMS_column_qual, \
|
||||||
|
OBIDMS_column_multi_elts_qual
|
||||||
|
|
||||||
from ._obidmscolumn_str cimport OBIDMS_column_str, \
|
from ._obidmscolumn_str cimport OBIDMS_column_str, \
|
||||||
OBIDMS_column_multi_elts_str
|
OBIDMS_column_multi_elts_str
|
||||||
@ -194,8 +195,8 @@ cdef class OBIDMS_column :
|
|||||||
elif col_type == OBI_QUAL :
|
elif col_type == OBI_QUAL :
|
||||||
if col_one_element_per_line :
|
if col_one_element_per_line :
|
||||||
subclass = OBIDMS_column_qual
|
subclass = OBIDMS_column_qual
|
||||||
# else : # TODO
|
else :
|
||||||
# subclass = OBIDMS_column_multi_elts_qual
|
subclass = OBIDMS_column_multi_elts_qual
|
||||||
elif col_type == OBI_STR :
|
elif col_type == OBI_STR :
|
||||||
if col_one_element_per_line :
|
if col_one_element_per_line :
|
||||||
subclass = OBIDMS_column_str
|
subclass = OBIDMS_column_str
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#cython: language_level=3
|
#cython: language_level=3
|
||||||
|
|
||||||
from .capi.obitypes cimport index_t
|
from .capi.obitypes cimport index_t
|
||||||
from ._obidms cimport OBIDMS_column #, OBIDMS_column_multi_elts
|
from ._obidms cimport OBIDMS_column , OBIDMS_column_multi_elts
|
||||||
|
|
||||||
|
|
||||||
cdef class OBIDMS_column_qual(OBIDMS_column):
|
cdef class OBIDMS_column_qual(OBIDMS_column):
|
||||||
@ -11,7 +11,10 @@ cdef class OBIDMS_column_qual(OBIDMS_column):
|
|||||||
cpdef set_str_line(self, index_t line_nb, object value)
|
cpdef set_str_line(self, index_t line_nb, object value)
|
||||||
|
|
||||||
|
|
||||||
# cdef class OBIDMS_column_multi_elts_qual(OBIDMS_column_multi_elts):
|
cdef class OBIDMS_column_multi_elts_qual(OBIDMS_column_multi_elts):
|
||||||
# cpdef object get_item(self, index_t line_nb, str element_name)
|
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||||
# cpdef object get_line(self, index_t line_nb)
|
cpdef object get_str_item(self, index_t line_nb, str element_name)
|
||||||
# cpdef set_item(self, index_t line_nb, str element_name, object value)
|
cpdef object get_line(self, index_t line_nb)
|
||||||
|
cpdef object get_str_line(self, index_t line_nb)
|
||||||
|
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
||||||
|
cpdef set_str_item(self, index_t line_nb, str element_name, object value)
|
||||||
|
@ -71,79 +71,114 @@ cdef class OBIDMS_column_qual(OBIDMS_column):
|
|||||||
|
|
||||||
cpdef set_str_line(self, index_t line_nb, object value):
|
cpdef set_str_line(self, index_t line_nb, object value):
|
||||||
if value is None :
|
if value is None :
|
||||||
if obi_column_set_obiqual_int_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, OBIQual_int_NA, 0) < 0:
|
if obi_column_set_obiqual_char_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, OBIQual_char_NA) < 0:
|
||||||
raise Exception("Problem setting a value in a column")
|
raise Exception("Problem setting a value in a column")
|
||||||
else :
|
else :
|
||||||
if obi_column_set_obiqual_char_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, str2bytes(value)) < 0:
|
if obi_column_set_obiqual_char_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, str2bytes(value)) < 0:
|
||||||
raise Exception("Problem setting a value in a column")
|
raise Exception("Problem setting a value in a column")
|
||||||
|
|
||||||
|
|
||||||
# TODO
|
cdef class OBIDMS_column_multi_elts_qual(OBIDMS_column_multi_elts):
|
||||||
# cdef class OBIDMS_column_multi_elts_qual(OBIDMS_column_multi_elts):
|
|
||||||
#
|
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||||
#
|
cdef const uint8_t* value
|
||||||
# cpdef object get_item(self, index_t line_nb, str element_name):
|
cdef int value_length
|
||||||
# cdef const uint8_t* value
|
cdef object result
|
||||||
# cdef int value_length
|
cdef int i
|
||||||
# cdef object result
|
value = obi_column_get_obiqual_int_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), &value_length)
|
||||||
# cdef int i
|
if obi_errno > 0 :
|
||||||
# value = obi_column_get_obiqual_int_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), &value_length)
|
raise IndexError(line_nb, element_name)
|
||||||
# if obi_errno > 0 :
|
if value == OBIQual_int_NA :
|
||||||
# raise IndexError(line_nb, element_name)
|
result = None
|
||||||
# if value == NULL: # TODO
|
else :
|
||||||
# result = None
|
result = []
|
||||||
# else :
|
for i in range(value_length) :
|
||||||
# result = []
|
result.append(<int>value[i])
|
||||||
# for i in range(value_length) :
|
return result
|
||||||
# result.append(<int>value[i])
|
|
||||||
# return result
|
cpdef object get_str_item(self, index_t line_nb, str element_name):
|
||||||
#
|
cdef char* value
|
||||||
# # cpdef object get_str_item(self, index_t line_nb, str element_name):
|
cdef object result
|
||||||
# # pass
|
value = obi_column_get_obiqual_char_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||||
# # cdef char* value
|
if obi_errno > 0 :
|
||||||
# # cdef object result
|
raise IndexError(line_nb, element_name)
|
||||||
# # value = obi_column_get_obiseq_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name))
|
if value == OBIQual_char_NA :
|
||||||
# # if obi_errno > 0 :
|
result = None
|
||||||
# # raise IndexError(line_nb, element_name)
|
else :
|
||||||
# # if strcmp(value, OBISeq_NA) == 0 :
|
result = bytes2str(value)
|
||||||
# # result = None
|
free(value)
|
||||||
# # else :
|
return result
|
||||||
# # result = bytes2str(value)
|
|
||||||
# # free(value)
|
cpdef object get_line(self, index_t line_nb) :
|
||||||
# # return result
|
cdef const uint8_t* value
|
||||||
#
|
cdef int value_length
|
||||||
# cpdef object get_line(self, index_t line_nb) :
|
cdef object value_in_result
|
||||||
# pass
|
cdef dict result
|
||||||
# # cdef char* value
|
cdef index_t i
|
||||||
# # cdef object value_in_result
|
cdef int j
|
||||||
# # cdef dict result
|
cdef bint all_NA
|
||||||
# # cdef index_t i
|
result = {}
|
||||||
# # cdef bint all_NA
|
all_NA = True
|
||||||
# # result = {}
|
for i in range(self.nb_elements_per_line) :
|
||||||
# # all_NA = True
|
value = obi_column_get_obiqual_int_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, i, &value_length)
|
||||||
# # for i in range(self.nb_elements_per_line) :
|
if obi_errno > 0 :
|
||||||
# # value = obi_column_get_obiseq_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, i)
|
raise IndexError(line_nb)
|
||||||
# # if obi_errno > 0 :
|
if value == OBIQual_int_NA :
|
||||||
# # raise IndexError(line_nb)
|
value_in_result = None
|
||||||
# # if strcmp(value, OBISeq_NA) == 0 :
|
else :
|
||||||
# # value_in_result = None
|
value_in_result = []
|
||||||
# # else :
|
for j in range(value_length) :
|
||||||
# # value_in_result = bytes2str(value)
|
value_in_result.append(<int>value[j])
|
||||||
# # free(value)
|
result[self.elements_names[i]] = value_in_result
|
||||||
# # result[self.elements_names[i]] = value_in_result
|
if all_NA and (value_in_result is not None) :
|
||||||
# # if all_NA and (value_in_result is not None) :
|
all_NA = False
|
||||||
# # all_NA = False
|
if all_NA :
|
||||||
# # if all_NA :
|
result = None
|
||||||
# # result = None
|
return result
|
||||||
# # return result
|
|
||||||
#
|
cpdef object get_str_line(self, index_t line_nb) :
|
||||||
# cpdef set_item(self, index_t line_nb, str element_name, object value):
|
cdef char* value
|
||||||
# pass
|
cdef object value_in_result
|
||||||
# # cdef bytes value_b
|
cdef dict result
|
||||||
# # if value is None :
|
cdef index_t i
|
||||||
# # value_b = OBISeq_NA
|
cdef bint all_NA
|
||||||
# # else :
|
result = {}
|
||||||
# # value_b = str2bytes(value)
|
all_NA = True
|
||||||
# # if obi_column_set_obiseq_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), value_b) < 0:
|
for i in range(self.nb_elements_per_line) :
|
||||||
# # raise Exception("Problem setting a value in a column")
|
value = obi_column_get_obiqual_char_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, i)
|
||||||
# #
|
if obi_errno > 0 :
|
||||||
|
raise IndexError(line_nb)
|
||||||
|
if value == OBIQual_char_NA :
|
||||||
|
value_in_result = None
|
||||||
|
else :
|
||||||
|
value_in_result = bytes2str(value)
|
||||||
|
free(value)
|
||||||
|
result[self.elements_names[i]] = value_in_result
|
||||||
|
if all_NA and (value_in_result is not None) :
|
||||||
|
all_NA = False
|
||||||
|
if all_NA :
|
||||||
|
result = None
|
||||||
|
return result
|
||||||
|
|
||||||
|
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||||
|
cdef uint8_t* value_b
|
||||||
|
cdef int value_length
|
||||||
|
if value is None :
|
||||||
|
if obi_column_set_obiqual_int_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), OBIQual_int_NA, 0) < 0:
|
||||||
|
raise Exception("Problem setting a value in a column")
|
||||||
|
else :
|
||||||
|
value_length = len(value)
|
||||||
|
value_b = <uint8_t*> malloc(value_length * sizeof(uint8_t))
|
||||||
|
for i in range(value_length) :
|
||||||
|
value_b[i] = <uint8_t>value[i]
|
||||||
|
if obi_column_set_obiqual_int_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), value_b, value_length) < 0:
|
||||||
|
raise Exception("Problem setting a value in a column")
|
||||||
|
free(value_b)
|
||||||
|
|
||||||
|
cpdef set_str_item(self, index_t line_nb, str element_name, object value):
|
||||||
|
if value is None :
|
||||||
|
if obi_column_set_obiqual_char_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), OBIQual_char_NA) < 0:
|
||||||
|
raise Exception("Problem setting a value in a column")
|
||||||
|
else :
|
||||||
|
if obi_column_set_obiqual_char_with_elt_name_in_view(self.view.pointer, (self.pointer)[0], line_nb, str2bytes(element_name), str2bytes(value)) < 0:
|
||||||
|
raise Exception("Problem setting a value in a column")
|
||||||
|
Reference in New Issue
Block a user