Files
obitools3/python/obitools3/obidms/_obidmscolumn_char.pyx

78 lines
3.0 KiB
Cython
Raw Normal View History

2015-09-28 13:51:35 +02:00
#cython: language_level=3
2016-02-18 10:38:51 +01:00
from .capi.obidmscolumn cimport obi_truncate_and_close_column, \
obi_column_get_obichar_with_elt_name_in_view, \
obi_column_get_obichar_with_elt_idx_in_view, \
obi_column_set_obichar_with_elt_name_in_view, \
obi_column_set_obichar_with_elt_idx_in_view
2015-09-28 13:51:35 +02:00
from .capi.obierrno cimport obi_errno
2016-02-18 10:38:51 +01:00
from .capi.obitypes cimport OBIChar_NA, obichar_t
2015-09-28 13:51:35 +02:00
from obitools3.utils cimport str2bytes, bytes2str
2015-09-28 13:51:35 +02:00
cdef class OBIDMS_column_char(OBIDMS_column):
cpdef object get_line(self, index_t line_nb):
cdef obichar_t value
cdef object result
2016-02-18 10:38:51 +01:00
value = obi_column_get_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
if obi_errno > 0 :
raise IndexError(line_nb)
if value == OBIChar_NA :
result = None
else :
result = bytes2str(value)
return result
cpdef set_line(self, index_t line_nb, object value):
2016-02-18 10:38:51 +01:00
if value is None :
value = OBIChar_NA
if obi_column_set_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, str2bytes(value)[0]) < 0:
raise Exception("Problem setting a value in a column")
2016-02-18 10:38:51 +01:00
cdef class OBIDMS_column_multi_elts_char(OBIDMS_column_multi_elts):
cpdef object get_item(self, index_t line_nb, str element_name):
cdef obichar_t value
2015-09-28 13:51:35 +02:00
cdef object result
2016-02-18 10:38:51 +01:00
value = obi_column_get_obichar_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
2015-09-28 13:51:35 +02:00
if obi_errno > 0 :
raise IndexError(line_nb, element_name)
if value == OBIChar_NA :
result = None
else :
result = bytes2str(value)
2015-09-28 13:51:35 +02:00
return result
2016-02-18 10:38:51 +01:00
cpdef object get_line(self, index_t line_nb) :
cdef obichar_t value
2016-02-18 10:38:51 +01:00
cdef object value_in_result
cdef dict result
cdef index_t i
cdef bint all_NA
result = {}
all_NA = True
for i in range(self.nb_elements_per_line) :
2016-02-18 10:38:51 +01:00
value = obi_column_get_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
if obi_errno > 0 :
2016-02-18 10:38:51 +01:00
raise IndexError(line_nb)
if value == OBIChar_NA :
value_in_result = None
else :
value_in_result = bytes2str(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
2015-09-28 13:51:35 +02:00
2016-02-18 10:38:51 +01:00
cpdef set_item(self, index_t line_nb, str element_name, object value):
if value is None :
value = OBIChar_NA
if obi_column_set_obichar_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), str2bytes(value)[0]) < 0:
2015-09-28 13:51:35 +02:00
raise Exception("Problem setting a value in a column")