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 index_t _index
|
||||
|
||||
cpdef update(self, data)
|
||||
cpdef update(self, object data)
|
||||
|
||||
|
||||
cdef register_column_class(obitype_t obitype,
|
||||
|
@ -80,11 +80,14 @@ cdef class Column(OBIWrapper) :
|
||||
object alias=b""):
|
||||
# TODO indexer_name?
|
||||
|
||||
cdef bytes column_name_b = tobytes(column_name)
|
||||
cdef bytes alias_b = tobytes(alias)
|
||||
cdef bytes comments_b = tobytes(comments)
|
||||
cdef bytes elements_names_b
|
||||
cdef char* elements_names_p
|
||||
cdef bytes column_name_b = tobytes(column_name)
|
||||
cdef bytes alias_b = tobytes(alias)
|
||||
cdef bytes comments_b = tobytes(comments)
|
||||
cdef list elements_names_s
|
||||
cdef bytes elements_names_b
|
||||
cdef char* elements_names_p
|
||||
cdef object elt_name
|
||||
cdef str elt_name_s
|
||||
|
||||
if not view.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
@ -93,7 +96,13 @@ cdef class Column(OBIWrapper) :
|
||||
alias_b = column_name_b
|
||||
|
||||
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
|
||||
else:
|
||||
elements_names_p = NULL
|
||||
@ -342,15 +351,17 @@ cdef class Column_multi_elts(Column) :
|
||||
return Column_line(self, line_nb)
|
||||
|
||||
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() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
if values is None :
|
||||
if values is None or len(values) == 0 :
|
||||
for element_name in self.elements_names :
|
||||
self.set_item(line_nb, element_name, None)
|
||||
else :
|
||||
for element_name in values :
|
||||
self.set_item(line_nb, element_name, values[element_name])
|
||||
values_iter = xrange(len(values)) if isinstance(values, list) else values
|
||||
for value_ref in values_iter :
|
||||
self.set_item(line_nb, value_ref, values[value_ref])
|
||||
|
||||
|
||||
######################################################################################################
|
||||
@ -397,6 +408,10 @@ cdef class Column_line :
|
||||
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
|
||||
@property
|
||||
def column(self):
|
||||
@ -408,7 +423,7 @@ cdef class Column_line :
|
||||
return self._index
|
||||
|
||||
|
||||
cpdef update(self, data): # TODO ?????
|
||||
cpdef update(self, object data):
|
||||
if isinstance(data, dict):
|
||||
data=data.items()
|
||||
for key,value in data:
|
||||
|
Reference in New Issue
Block a user