Column API: improvements to be more flexible when referring to elements
in columns with several elements per line.
This commit is contained in:
@ -39,7 +39,7 @@ cdef class Column_line:
|
|||||||
cdef Column _column
|
cdef Column _column
|
||||||
cdef index_t _index
|
cdef index_t _index
|
||||||
|
|
||||||
cpdef update(self, data)
|
cpdef update(self, object data)
|
||||||
|
|
||||||
|
|
||||||
cdef register_column_class(obitype_t obitype,
|
cdef register_column_class(obitype_t obitype,
|
||||||
|
@ -80,24 +80,33 @@ cdef class Column(OBIWrapper) :
|
|||||||
object alias=b""):
|
object alias=b""):
|
||||||
# TODO indexer_name?
|
# TODO indexer_name?
|
||||||
|
|
||||||
cdef bytes column_name_b = tobytes(column_name)
|
cdef bytes column_name_b = tobytes(column_name)
|
||||||
cdef bytes alias_b = tobytes(alias)
|
cdef bytes alias_b = tobytes(alias)
|
||||||
cdef bytes comments_b = tobytes(comments)
|
cdef bytes comments_b = tobytes(comments)
|
||||||
cdef bytes elements_names_b
|
cdef list elements_names_s
|
||||||
cdef char* elements_names_p
|
cdef bytes elements_names_b
|
||||||
|
cdef char* elements_names_p
|
||||||
|
cdef object elt_name
|
||||||
|
cdef str elt_name_s
|
||||||
|
|
||||||
if not view.active() :
|
if not view.active() :
|
||||||
raise OBIDeactivatedInstanceError()
|
raise OBIDeactivatedInstanceError()
|
||||||
|
|
||||||
if alias_b == b"" :
|
if alias_b == b"" :
|
||||||
alias_b = column_name_b
|
alias_b = column_name_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_s = []
|
||||||
|
for elt_name in elements_names :
|
||||||
|
if type(elt_name) != bytes and type(elt_name) != str :
|
||||||
|
elements_names_s.append(str(elt_name))
|
||||||
|
else :
|
||||||
|
elements_names_s.append(elt_name)
|
||||||
|
elements_names_b = b';'.join([tobytes(x) for x in elements_names_s])
|
||||||
elements_names_p = elements_names_b
|
elements_names_p = elements_names_b
|
||||||
else:
|
else:
|
||||||
elements_names_p = NULL
|
elements_names_p = NULL
|
||||||
|
|
||||||
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,
|
||||||
@ -342,15 +351,17 @@ cdef class Column_multi_elts(Column) :
|
|||||||
return Column_line(self, line_nb)
|
return Column_line(self, line_nb)
|
||||||
|
|
||||||
cpdef set_line(self, index_t line_nb, object values):
|
cpdef set_line(self, index_t line_nb, object values):
|
||||||
cdef object element_name
|
cdef object value_ref
|
||||||
|
cdef object values_iter
|
||||||
if not self.active() :
|
if not self.active() :
|
||||||
raise OBIDeactivatedInstanceError()
|
raise OBIDeactivatedInstanceError()
|
||||||
if values is None :
|
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)
|
self.set_item(line_nb, element_name, None)
|
||||||
else :
|
else :
|
||||||
for element_name in values :
|
values_iter = xrange(len(values)) if isinstance(values, list) else values
|
||||||
self.set_item(line_nb, element_name, values[element_name])
|
for value_ref in values_iter :
|
||||||
|
self.set_item(line_nb, value_ref, values[value_ref])
|
||||||
|
|
||||||
|
|
||||||
######################################################################################################
|
######################################################################################################
|
||||||
@ -395,7 +406,11 @@ cdef class Column_line :
|
|||||||
elements_names = self._column.elements_names
|
elements_names = self._column.elements_names
|
||||||
for element_name in elements_names :
|
for element_name in elements_names :
|
||||||
yield element_name
|
yield element_name
|
||||||
|
|
||||||
|
|
||||||
|
def keys(self): # TODO Discuss if keys with None values should be returned too
|
||||||
|
return self._column.elements_names
|
||||||
|
|
||||||
|
|
||||||
# column property getter
|
# column property getter
|
||||||
@property
|
@property
|
||||||
@ -408,7 +423,7 @@ cdef class Column_line :
|
|||||||
return self._index
|
return self._index
|
||||||
|
|
||||||
|
|
||||||
cpdef update(self, data): # TODO ?????
|
cpdef update(self, object data):
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
data=data.items()
|
data=data.items()
|
||||||
for key,value in data:
|
for key,value in data:
|
||||||
|
Reference in New Issue
Block a user