Cython API: fixed problems with Column class

This commit is contained in:
Celine Mercier
2017-04-14 16:14:41 +02:00
parent 693859eec2
commit 2bbee64e57

View File

@ -63,24 +63,25 @@ cdef class Column(OBIWrapper) :
object column_name, object column_name,
obitype_t data_type, obitype_t data_type,
index_t nb_elements_per_line=1, index_t nb_elements_per_line=1,
object elements_names=None, list elements_names=None,
object comments=b""): object comments=b"",
object alias=b""):
# TODO indexer_name?
cdef bytes column_name_b = tobytes(column_name) cdef bytes column_name_b = tobytes(column_name)
cdef bytes comments_b cdef bytes alias_b = tobytes(alias)
cdef bytes comments_b = tobytes(comments)
cdef bytes elements_names_b cdef bytes elements_names_b
cdef char* elements_names_p cdef char* elements_names_p
if not view.active() : if not view.active() :
raise OBIObjectClosedInstance() raise OBIObjectClosedInstance()
if comments is not None: if alias_b == b"" :
comments_b = tobytes(comments) alias_b = column_name_b
else:
comments_b = b''
if elements_names is not None: if elements_names is not None:
elements_names_b = b''.join([tobytes(x) for x in elements_names]) elements_names_b = b';'.join([tobytes(x) for x in elements_names])
elements_names_p = elements_names_b elements_names_p = elements_names_b
else: else:
elements_names_p = NULL elements_names_p = NULL
@ -88,7 +89,7 @@ cdef class Column(OBIWrapper) :
if (obi_view_add_column(view = view.pointer(), if (obi_view_add_column(view = view.pointer(),
column_name = column_name_b, column_name = column_name_b,
version_number = -1, version_number = -1,
alias = NULL, alias = alias_b,
data_type = <obitype_t>data_type, data_type = <obitype_t>data_type,
nb_lines = len(view), nb_lines = len(view),
nb_elements_per_line = nb_elements_per_line, nb_elements_per_line = nb_elements_per_line,
@ -101,7 +102,7 @@ cdef class Column(OBIWrapper) :
raise RuntimeError("Cannot create column %s in view %s" % (bytes2str(column_name_b), raise RuntimeError("Cannot create column %s in view %s" % (bytes2str(column_name_b),
bytes2str(view.name))) bytes2str(view.name)))
return Column.open(view, column_name) return Column.open(view, alias_b)
@staticmethod @staticmethod
@ -130,6 +131,7 @@ cdef class Column(OBIWrapper) :
column_type = column_p.header.returned_data_type column_type = column_p.header.returned_data_type
column_class = Column.get_column_class(column_type, (column_p.header.nb_elements_per_line > 1)) column_class = Column.get_column_class(column_type, (column_p.header.nb_elements_per_line > 1))
column = OBIWrapper.new(column_class, column_pp) column = OBIWrapper.new(column_class, column_pp)
column._view = view column._view = view
column._alias = column_name_b column._alias = column_name_b
view.register(column) view.register(column)
@ -240,7 +242,7 @@ cdef class Column(OBIWrapper) :
return self._alias return self._alias
@name.setter @name.setter
def name(self, new_alias): # @DuplicatedSignature def name(self, new_alias): # @DuplicatedSignature
self._view.change_column_alias(self._alias, new_alias) self._view.rename_column(self._alias, new_alias)
# elements_names property getter # elements_names property getter
@property @property