diff --git a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx b/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx index dd22d3e..ffba429 100644 --- a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx +++ b/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx @@ -1,11 +1,11 @@ #cython: language_level=3 from .capidmscolumn cimport * -from obitools3.obidms.obidmscolumn.obidmscolumn_int.capidmscolumn_int import OBIDMS_column_int -from obitools3.obidms.obidmscolumn.obidmscolumn_float.capidmscolumn_float import OBIDMS_column_float -from obitools3.obidms.obidmscolumn.obidmscolumn_bool.capidmscolumn_bool import OBIDMS_column_bool -from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char import OBIDMS_column_char -from obitools3.obidms.obidmscolumn.obidmscolumn_idx.capidmscolumn_idx import OBIDMS_column_idx +from obitools3.obidms.obidmscolumn.obidmscolumn_int.capidmscolumn_int import * +from obitools3.obidms.obidmscolumn.obidmscolumn_float.capidmscolumn_float import * +from obitools3.obidms.obidmscolumn.obidmscolumn_bool.capidmscolumn_bool import * +from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char import * +from obitools3.obidms.obidmscolumn.obidmscolumn_idx.capidmscolumn_idx import * cdef class OBIDMS_column: @@ -88,39 +88,61 @@ cdef class OBIDMS_column: type = obi_column_get_data_type_from_name(dms, column_name_b) if type == 1 : - column = OBIDMS_column_int(dms_name, column_name, - create, clone, clone_data, - version_number, type, - nb_lines, nb_elements_per_line, - elements_names) + if (create or clone) : + column = OBIDMS_column_int_writable(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) + else : + column = OBIDMS_column_int_read(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) + elif type == 2 : - column = OBIDMS_column_float(dms_name, column_name, - create, clone, clone_data, - version_number, type, - nb_lines, nb_elements_per_line, - elements_names) + if (create or clone) : + column = OBIDMS_column_float_writable(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) + else : + column = OBIDMS_column_float_read(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) elif type == 3 : - column = OBIDMS_column_bool(dms_name, column_name, - create, clone, clone_data, - version_number, type, - nb_lines, nb_elements_per_line, - elements_names) + if (create or clone) : + column = OBIDMS_column_bool_writable(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) + else : + column = OBIDMS_column_bool_read(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) elif type == 4 : - column = OBIDMS_column_char(dms_name, column_name, - create, clone, clone_data, - version_number, type, - nb_lines, nb_elements_per_line, - elements_names) - - elif type == 5 : - column = OBIDMS_column_idx(dms_name, column_name, - create, clone, clone_data, - version_number, type, - nb_lines, nb_elements_per_line, - elements_names) + if (create or clone) : + column = OBIDMS_column_char_writable(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) + else : + column = OBIDMS_column_char_read(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_lines, nb_elements_per_line, + elements_names) else : "Problem with the data type" diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx index b0f99db..f38b903 100644 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_bool/capidmscolumn_bool.pyx @@ -4,11 +4,20 @@ from .capidmscolumn_bool cimport * cdef class OBIDMS_column_bool(OBIDMS_column) : + + def get_item(self, line_nb, element_name): + return obi_column_get_bool_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) + + +cdef class OBIDMS_column_bool_read(OBIDMS_column_bool) : + + def set_item(self, line_nb, element_name, value): + raise Exception('Column is read-only') + + +cdef class OBIDMS_column_bool_writable(OBIDMS_column_bool) : def set_item(self, line_nb, element_name, value): return obi_column_set_bool_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - def get_item(self, line_nb, element_name): - return obi_column_get_bool_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx index 563b092..76a1cbc 100644 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx @@ -4,11 +4,20 @@ from .capidmscolumn_char cimport * cdef class OBIDMS_column_char(OBIDMS_column) : - + + def get_item(self, line_nb, element_name): + return (obi_column_get_char_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'))).decode(encoding='utf-8')[:1] + +cdef class OBIDMS_column_char_read(OBIDMS_column_char) : + + def set_item(self, line_nb, element_name, value): + raise Exception('Column is read-only') + + +cdef class OBIDMS_column_char_writable(OBIDMS_column_char) : + def set_item(self, line_nb, element_name, value): return obi_column_set_char_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value.encode('utf-8')) - def get_item(self, line_nb, element_name): - return (obi_column_get_char_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'))).decode(encoding='utf-8')[:1] \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx index ced654a..b48a616 100644 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_float/capidmscolumn_float.pyx @@ -4,10 +4,19 @@ from .capidmscolumn_float cimport * cdef class OBIDMS_column_float(OBIDMS_column) : - + + def get_item(self, line_nb, element_name): + return obi_column_get_float_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) + +cdef class OBIDMS_column_float_read(OBIDMS_column_float) : + + def set_item(self, line_nb, element_name, value): + raise Exception('Column is read-only') + + +cdef class OBIDMS_column_float_writable(OBIDMS_column_float) : + def set_item(self, line_nb, element_name, value): return obi_column_set_float_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - def get_item(self, line_nb, element_name): - return obi_column_get_float_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx index 51babcf..e93b267 100644 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx @@ -4,10 +4,18 @@ from .capidmscolumn_idx cimport * cdef class OBIDMS_column_idx(OBIDMS_column) : - - def set_item(self, line_nb, element_name, value): - return obi_column_set_idx_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - + def get_item(self, line_nb, element_name): return obi_column_get_idx_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) - \ No newline at end of file + +cdef class OBIDMS_column_idx_read(OBIDMS_column_idx) : + + def set_item(self, line_nb, element_name, value): + raise Exception('Column is read-only') + + +cdef class OBIDMS_column_idx_writable(OBIDMS_column_idx) : + + def set_item(self, line_nb, element_name, value): + return obi_column_set_idx_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) + \ No newline at end of file diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx index bcb5960..447962f 100644 --- a/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_int/capidmscolumn_int.pyx @@ -4,11 +4,19 @@ from .capidmscolumn_int cimport * cdef class OBIDMS_column_int(OBIDMS_column) : - - def set_item(self, line_nb, element_name, value): - return obi_column_set_int_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) - + def get_item(self, line_nb, element_name): return obi_column_get_int_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8')) + + +cdef class OBIDMS_column_int_read(OBIDMS_column_int) : + + def set_item(self, line_nb, element_name, value): + raise Exception('Column is read-only') + - \ No newline at end of file +cdef class OBIDMS_column_int_writable(OBIDMS_column_int) : + + def set_item(self, line_nb, element_name, value): + return obi_column_set_int_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value) + \ No newline at end of file