Cython API: fixed bug when deleting a column from a view where the
Cython wrapper wasn't closed, and fixed the Line selection materialization
This commit is contained in:
@ -210,16 +210,23 @@ cdef class View(OBIWrapper) :
|
|||||||
cpdef delete_column(self,
|
cpdef delete_column(self,
|
||||||
object column_name) :
|
object column_name) :
|
||||||
|
|
||||||
|
cdef bytes column_name_b = tobytes(column_name)
|
||||||
|
|
||||||
if not self.active() :
|
if not self.active() :
|
||||||
raise OBIObjectClosedInstance()
|
raise OBIObjectClosedInstance()
|
||||||
|
|
||||||
cdef bytes column_name_b = tobytes(column_name)
|
# Close the cython instance first
|
||||||
|
col = self[column_name]
|
||||||
|
col.close()
|
||||||
|
|
||||||
|
# Remove the column from the view which closes the C structure
|
||||||
if obi_view_delete_column(self.pointer(), column_name_b) < 0 :
|
if obi_view_delete_column(self.pointer(), column_name_b) < 0 :
|
||||||
raise Exception("Problem deleting column %s from a view",
|
raise Exception("Problem deleting column %s from a view",
|
||||||
bytes2str(column_name_b))
|
bytes2str(column_name_b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cpdef rename_column(self,
|
cpdef rename_column(self,
|
||||||
object current_name,
|
object current_name,
|
||||||
object new_name):
|
object new_name):
|
||||||
@ -466,20 +473,34 @@ cdef class Line_selection(list):
|
|||||||
object view_name,
|
object view_name,
|
||||||
object comments=""):
|
object comments=""):
|
||||||
|
|
||||||
cdef View view = View(987654)
|
cdef bytes view_name_b = tobytes(view_name)
|
||||||
cdef bytes view_name_b=tobytes(view_name)
|
cdef bytes comments_b
|
||||||
|
cdef Obiview_p pointer
|
||||||
|
cdef View view
|
||||||
|
|
||||||
view._pointer = obi_new_view(self._view._dms.pointer(),
|
if not self._view.active() :
|
||||||
view_name_b,
|
raise OBIObjectClosedInstance()
|
||||||
self._view.pointer(),
|
|
||||||
self.__build_binary_list__(),
|
|
||||||
tobytes(comments))
|
|
||||||
|
|
||||||
if view._pointer == NULL :
|
if comments is not None:
|
||||||
raise RuntimeError("Error : Cannot clone view %s into view %s"
|
comments_b = tobytes(comments)
|
||||||
% (str(self._view_name),
|
else:
|
||||||
view_name)
|
comments_b = b''
|
||||||
|
|
||||||
|
pointer = obi_new_view(self._view._dms.pointer(),
|
||||||
|
view_name_b,
|
||||||
|
self._view.pointer(),
|
||||||
|
self.__build_binary_list__(),
|
||||||
|
comments_b)
|
||||||
|
|
||||||
|
if pointer == NULL :
|
||||||
|
raise RuntimeError("Error : Cannot clone view %s into view %s with new line selection"
|
||||||
|
% (str(self._view.name),
|
||||||
|
bytes2str(view_name_b))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
view = OBIWrapper.new(type(self._view), pointer)
|
||||||
|
view._dms = self._view._dms
|
||||||
|
view._dms.register(view)
|
||||||
|
|
||||||
return view
|
return view
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user