diff --git a/python/obitools3/dms/column/column.pxd b/python/obitools3/dms/column/column.pxd index 6af1f84..a636a6a 100644 --- a/python/obitools3/dms/column/column.pxd +++ b/python/obitools3/dms/column/column.pxd @@ -18,10 +18,11 @@ cdef class Column(OBIWrapper) : cdef View _view cdef bytes _alias - cdef list elements_names + cdef list _elements_names cdef inline OBIDMS_column_p pointer(self) - + cdef read_elements_names(self) + @staticmethod cdef type get_column_class(obitype_t obitype, bint multi_elts, bint tuples) diff --git a/python/obitools3/dms/column/column.pyx b/python/obitools3/dms/column/column.pyx index 2f80863..d867f41 100644 --- a/python/obitools3/dms/column/column.pyx +++ b/python/obitools3/dms/column/column.pyx @@ -160,7 +160,7 @@ cdef class Column(OBIWrapper) : column._view = view column._alias = column_name_b - column.elements_names = column._elements_names + column._elements_names = column.read_elements_names() view.register(column) return column @@ -274,6 +274,19 @@ cdef class Column(OBIWrapper) : # raise Exception("Problem closing column %s" % bytes2str(self.name)) + cdef read_elements_names(self): + cdef char* elts_names_b + cdef list elts_names_list + if not self.active() : + raise OBIDeactivatedInstanceError() + elts_names_b = obi_get_elements_names(self.pointer()) + if elts_names_b == NULL: + raise Exception("Error reading the elements names of a column") + elts_names_list = elts_names_b.split(b';') + free(elts_names_b) + return elts_names_list + + # Column alias property getter and setter @property def name(self): @@ -285,20 +298,11 @@ cdef class Column(OBIWrapper) : if not self.active() : raise OBIDeactivatedInstanceError() self._view.rename_column(self._alias, new_alias) - + # elements_names property getter @property - def _elements_names(self): - cdef char* elts_names_b - cdef list elts_names_list - if not self.active() : - raise OBIDeactivatedInstanceError() - elts_names_b = obi_get_elements_names(self.pointer()) - if elts_names_b == NULL: - raise Exception("Error reading the elements names of a column") - elts_names_list = elts_names_b.split(b';') - free(elts_names_b) - return elts_names_list + def elements_names(self): + return self._elements_names # nb_elements_per_line property getter @property @@ -386,7 +390,7 @@ cdef class Column_multi_elts(Column) : if not self.active() : raise OBIDeactivatedInstanceError() if values is None or len(values) == 0 : - for element_name in self.elements_names : + for element_name in self._elements_names : self.set_item(line_nb, element_name, None) else : values_iter = xrange(len(values)) if isinstance(values, list) else values @@ -427,7 +431,7 @@ cdef class Column_line : if type(elt_id) == int: return elt_id < self._column.nb_elements_per_line else: - return (tobytes(elt_id) in self._column.elements_names) + return (tobytes(elt_id) in self._column._elements_names) def __repr__(self) : @@ -437,13 +441,13 @@ cdef class Column_line : def __iter__(self) : cdef list elements_names cdef bytes element_name - elements_names = self._column.elements_names + elements_names = self._column._elements_names for element_name in elements_names : yield element_name def keys(self): # TODO Discuss if keys with None values should be returned too - return self._column.elements_names + return self._column._elements_names # column property getter diff --git a/python/obitools3/dms/column/column_idx.pyx b/python/obitools3/dms/column/column_idx.pyx index b59cac9..76a68ac 100644 --- a/python/obitools3/dms/column/column_idx.pyx +++ b/python/obitools3/dms/column/column_idx.pyx @@ -78,7 +78,7 @@ cdef class Column_multi_elts_idx(Column_multi_elts): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + elements_names = self._elements_names for i in range(self.nb_elements_per_line) : value = obi_get_index_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") @@ -106,7 +106,7 @@ cdef class Column_multi_elts_idx(Column_multi_elts): cpdef set_line_idx(self, index_t line_nb, object values): if values is None : - for element_name in self.elements_names : + for element_name in self._elements_names : self.set_item_idx(line_nb, element_name, None) else : for element_name in values : diff --git a/python/obitools3/dms/column/typed_column/bool.pyx b/python/obitools3/dms/column/typed_column/bool.pyx index e309ee9..d73a187 100644 --- a/python/obitools3/dms/column/typed_column/bool.pyx +++ b/python/obitools3/dms/column/typed_column/bool.pyx @@ -99,7 +99,7 @@ cdef class Column_multi_elts_bool(Column_multi_elts): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/column/typed_column/char.pyx b/python/obitools3/dms/column/typed_column/char.pyx index fe06d7e..ec46246 100644 --- a/python/obitools3/dms/column/typed_column/char.pyx +++ b/python/obitools3/dms/column/typed_column/char.pyx @@ -101,7 +101,7 @@ cdef class Column_multi_elts_char(Column_multi_elts): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/column/typed_column/float.pyx b/python/obitools3/dms/column/typed_column/float.pyx index 160582d..7af578c 100644 --- a/python/obitools3/dms/column/typed_column/float.pyx +++ b/python/obitools3/dms/column/typed_column/float.pyx @@ -98,7 +98,7 @@ cdef class Column_multi_elts_float(Column_multi_elts): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/column/typed_column/int.pyx b/python/obitools3/dms/column/typed_column/int.pyx index 41489ba..4b1fbc6 100644 --- a/python/obitools3/dms/column/typed_column/int.pyx +++ b/python/obitools3/dms/column/typed_column/int.pyx @@ -102,7 +102,7 @@ cdef class Column_multi_elts_int(Column_multi_elts): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/column/typed_column/qual.pyx b/python/obitools3/dms/column/typed_column/qual.pyx index 92c630b..3ecfc46 100644 --- a/python/obitools3/dms/column/typed_column/qual.pyx +++ b/python/obitools3/dms/column/typed_column/qual.pyx @@ -164,7 +164,7 @@ cdef class Column_multi_elts_qual(Column_multi_elts_idx): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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") @@ -194,7 +194,7 @@ cdef class Column_multi_elts_qual(Column_multi_elts_idx): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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, offset) obi_errno_to_exception(obi_errno, line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column") diff --git a/python/obitools3/dms/column/typed_column/seq.pyx b/python/obitools3/dms/column/typed_column/seq.pyx index f663871..f067b30 100644 --- a/python/obitools3/dms/column/typed_column/seq.pyx +++ b/python/obitools3/dms/column/typed_column/seq.pyx @@ -116,7 +116,7 @@ cdef class Column_multi_elts_seq(Column_multi_elts_idx): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/column/typed_column/str.pyx b/python/obitools3/dms/column/typed_column/str.pyx index 4fd9585..848af6f 100644 --- a/python/obitools3/dms/column/typed_column/str.pyx +++ b/python/obitools3/dms/column/typed_column/str.pyx @@ -112,7 +112,7 @@ cdef class Column_multi_elts_str(Column_multi_elts_idx): all_NA = True view_p = self._view.pointer() column_p = self.pointer() - elements_names = self.elements_names + 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(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") diff --git a/python/obitools3/dms/view/view.pyx b/python/obitools3/dms/view/view.pyx index 3495c7f..36c28d0 100644 --- a/python/obitools3/dms/view/view.pyx +++ b/python/obitools3/dms/view/view.pyx @@ -279,7 +279,7 @@ cdef class View(OBIWrapper) : new_nb_elements_per_line = old_column.nb_elements_per_line if new_elements_names is None : - new_elements_names = old_column.elements_names + new_elements_names = old_column._elements_names new_column = Column.new_column(self, old_column.pointer().header.name, new_data_type, nb_elements_per_line=new_nb_elements_per_line, elements_names=new_elements_names, @@ -337,7 +337,7 @@ cdef class View(OBIWrapper) : col.original_name, col.data_type_int, nb_elements_per_line = col.nb_elements_per_line, - elements_names = col.elements_names, + elements_names = col._elements_names, tuples = col.tuples, to_eval = col.to_eval, comments = col.comments,