Added cython subclasses for columns with _writable or _read for each

data type. Trying to set a value on a _read subclass raises an
exception.
This commit is contained in:
Celine Mercier
2015-08-26 15:34:12 +02:00
parent 95dbeb25a0
commit fdc3b96beb
6 changed files with 116 additions and 51 deletions

View File

@ -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"

View File

@ -5,10 +5,19 @@ from .capidmscolumn_bool cimport *
cdef class OBIDMS_column_bool(OBIDMS_column) :
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'))
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)

View File

@ -5,10 +5,19 @@ from .capidmscolumn_char cimport *
cdef class OBIDMS_column_char(OBIDMS_column) :
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]
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'))

View File

@ -5,9 +5,18 @@ from .capidmscolumn_float cimport *
cdef class OBIDMS_column_float(OBIDMS_column) :
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'))
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)

View File

@ -5,9 +5,17 @@ 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'))
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)

View File

@ -5,10 +5,18 @@ 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')
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)