diff --git a/python/obitools3/dms/column/typed_column/bool.pyx b/python/obitools3/dms/column/typed_column/bool.pyx index 07930a2..08bc9d0 100644 --- a/python/obitools3/dms/column/typed_column/bool.pyx +++ b/python/obitools3/dms/column/typed_column/bool.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_bool_with_elt_name_and_col_p_in_view, \ obi_get_bool_with_elt_idx_and_col_p_in_view, \ obi_set_bool_with_elt_name_and_col_p_in_view, \ - obi_set_bool_with_elt_idx_and_col_p_in_view + obi_set_bool_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_BOOL, OBIBool_NA, obibool_t @@ -32,7 +35,6 @@ cdef class Column_bool(Column): elements_names=elements_names, comments=comments) - cpdef object get_line(self, index_t line_nb): global obi_errno cdef obibool_t value @@ -45,7 +47,6 @@ cdef class Column_bool(Column): result = PyBool_FromLong(value) return result - cpdef set_line(self, index_t line_nb, object value): global obi_errno if value is None : @@ -75,23 +76,27 @@ cdef class Column_multi_elts_bool(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef obibool_t value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef obibool_t value + cdef bint value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_bool_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIBool_NA : - value_in_result = None - else : + if value != OBIBool_NA : value_in_result = PyBool_FromLong(value) - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/char.pyx b/python/obitools3/dms/column/typed_column/char.pyx index 7ae5e68..c37d8a3 100644 --- a/python/obitools3/dms/column/typed_column/char.pyx +++ b/python/obitools3/dms/column/typed_column/char.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_char_with_elt_name_and_col_p_in_view, \ obi_get_char_with_elt_idx_and_col_p_in_view, \ obi_set_char_with_elt_name_and_col_p_in_view, \ - obi_set_char_with_elt_idx_and_col_p_in_view + obi_set_char_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_CHAR, OBIChar_NA, obichar_t @@ -76,23 +79,27 @@ cdef class Column_multi_elts_char(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef obichar_t value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef obichar_t value + cdef bytes value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_char_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIChar_NA : - value_in_result = None - else : - value_in_result = value # TODO return bytes or str? - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + if value != OBIChar_NA : + value_in_result = value + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/float.pyx b/python/obitools3/dms/column/typed_column/float.pyx index 50b7b24..4eca2c6 100644 --- a/python/obitools3/dms/column/typed_column/float.pyx +++ b/python/obitools3/dms/column/typed_column/float.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_float_with_elt_name_and_col_p_in_view, \ obi_get_float_with_elt_idx_and_col_p_in_view, \ obi_set_float_with_elt_name_and_col_p_in_view, \ - obi_set_float_with_elt_idx_and_col_p_in_view + obi_set_float_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_FLOAT, OBIFloat_NA, obifloat_t @@ -73,23 +76,27 @@ cdef class Column_multi_elts_float(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef obifloat_t value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef obifloat_t value + cdef double value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_float_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIFloat_NA : - value_in_result = None - else : - value_in_result = value - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + if value != OBIFloat_NA : + value_in_result = value + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/int.pyx b/python/obitools3/dms/column/typed_column/int.pyx index b33c8d8..8906aed 100644 --- a/python/obitools3/dms/column/typed_column/int.pyx +++ b/python/obitools3/dms/column/typed_column/int.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_int_with_elt_name_and_col_p_in_view, \ obi_get_int_with_elt_idx_and_col_p_in_view, \ obi_set_int_with_elt_name_and_col_p_in_view, \ - obi_set_int_with_elt_idx_and_col_p_in_view + obi_set_int_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_INT, OBIInt_NA, obiint_t @@ -76,23 +79,27 @@ cdef class Column_multi_elts_int(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef obiint_t value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef obiint_t value + cdef int value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_int_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIInt_NA : - value_in_result = None - else : - value_in_result = PyInt_FromLong(value) - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + if value != OBIInt_NA : + value_in_result = PyInt_FromLong(value) + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/qual.pyx b/python/obitools3/dms/column/typed_column/qual.pyx index 106dcfa..070127c 100644 --- a/python/obitools3/dms/column/typed_column/qual.pyx +++ b/python/obitools3/dms/column/typed_column/qual.pyx @@ -16,7 +16,10 @@ from ...capi.obiview cimport obi_get_qual_char_with_elt_name_and_col_p_in_view, obi_get_qual_int_with_elt_name_and_col_p_in_view, \ obi_get_qual_int_with_elt_idx_and_col_p_in_view, \ obi_set_qual_int_with_elt_name_and_col_p_in_view, \ - obi_set_qual_int_with_elt_idx_and_col_p_in_view + obi_set_qual_int_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_QUAL, OBIQual_char_NA, OBIQual_int_NA, const_char_p @@ -145,25 +148,29 @@ cdef class Column_multi_elts_qual(Column_multi_elts): global obi_errno cdef const uint8_t* value cdef int value_length - cdef object value_in_result + cdef list value_in_result cdef dict result cdef index_t i cdef int j cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : value = obi_get_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i, &value_length) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIQual_int_NA : - value_in_result = None - else : + if value != OBIQual_int_NA : value_in_result = [] for j in range(value_length) : - value_in_result.append(value[j]) - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + value_in_result.append(value[j]) + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result @@ -171,24 +178,28 @@ cdef class Column_multi_elts_qual(Column_multi_elts): cpdef object get_str_line(self, index_t line_nb) : global obi_errno - cdef char* value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef char* value + cdef object value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : value = obi_get_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIQual_char_NA : - value_in_result = None - else : + if value != OBIQual_char_NA : 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 + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/seq.pyx b/python/obitools3/dms/column/typed_column/seq.pyx index 8f97776..eb5dceb 100644 --- a/python/obitools3/dms/column/typed_column/seq.pyx +++ b/python/obitools3/dms/column/typed_column/seq.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_seq_with_elt_name_and_col_p_in_view, \ obi_get_seq_with_elt_idx_and_col_p_in_view, \ obi_set_seq_with_elt_name_and_col_p_in_view, \ - obi_set_seq_with_elt_idx_and_col_p_in_view + obi_set_seq_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_SEQ, OBISeq_NA @@ -89,26 +92,30 @@ cdef class Column_multi_elts_seq(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef char* value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef char* value + cdef object value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_seq_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBISeq_NA : - value_in_result = None - else : + if value != OBISeq_NA : try: value_in_result = value finally: free(value) - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result diff --git a/python/obitools3/dms/column/typed_column/str.pyx b/python/obitools3/dms/column/typed_column/str.pyx index 1b4f263..5b0262f 100644 --- a/python/obitools3/dms/column/typed_column/str.pyx +++ b/python/obitools3/dms/column/typed_column/str.pyx @@ -12,7 +12,10 @@ from obitools3.utils cimport tobytes, \ from ...capi.obiview cimport obi_get_str_with_elt_name_and_col_p_in_view, \ obi_get_str_with_elt_idx_and_col_p_in_view, \ obi_set_str_with_elt_name_and_col_p_in_view, \ - obi_set_str_with_elt_idx_and_col_p_in_view + obi_set_str_with_elt_idx_and_col_p_in_view, \ + Obiview_p + +from ...capi.obidmscolumn cimport OBIDMS_column_p from ...capi.obitypes cimport OBI_STR, OBIStr_NA, const_char_p @@ -81,23 +84,27 @@ cdef class Column_multi_elts_str(Column_multi_elts): cpdef object get_line(self, index_t line_nb) : global obi_errno - cdef const_char_p value - cdef object value_in_result - cdef dict result - cdef index_t i - cdef bint all_NA + cdef const_char_p value + cdef object value_in_result + cdef dict result + cdef index_t i + cdef bint all_NA + cdef list elements_names + cdef Obiview_p view_p + cdef OBIDMS_column_p column_p result = {} all_NA = True + view_p = self._view.pointer() + column_p = self.pointer() + elements_names = self.elements_names for i in range(self.nb_elements_per_line) : - value = obi_get_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i) + value = obi_get_str_with_elt_idx_and_col_p_in_view(view_p, column_p, line_nb, i) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") - if value == OBIStr_NA : - value_in_result = None - else : - value_in_result = value - result[self.elements_names[i]] = value_in_result - if all_NA and (value_in_result is not None) : - all_NA = False + if value != OBIStr_NA : + value_in_result = value + result[elements_names[i]] = value_in_result + if all_NA : + all_NA = False if all_NA : result = None return result