Cython API: various improvements and checks
This commit is contained in:
@ -20,7 +20,7 @@ from ..capi.obiview cimport obi_view_add_column, \
|
||||
obi_view_get_pointer_on_column_in_view, \
|
||||
Obiview_p
|
||||
|
||||
from ..object cimport OBIObjectClosedInstance
|
||||
from ..object cimport OBIDeactivatedInstanceError
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
bytes2str, \
|
||||
@ -76,7 +76,7 @@ cdef class Column(OBIWrapper) :
|
||||
cdef char* elements_names_p
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
raise OBIDeactivatedInstanceError()
|
||||
|
||||
if alias_b == b"" :
|
||||
alias_b = column_name_b
|
||||
@ -117,7 +117,7 @@ cdef class Column(OBIWrapper) :
|
||||
cdef type column_class
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
raise OBIDeactivatedInstanceError()
|
||||
|
||||
column_pp = obi_view_get_pointer_on_column_in_view(view.pointer(),
|
||||
column_name_b)
|
||||
@ -139,16 +139,17 @@ cdef class Column(OBIWrapper) :
|
||||
|
||||
return column
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def add_to_view(self,
|
||||
View view,
|
||||
View view,
|
||||
object column_name=None) :
|
||||
|
||||
cdef bytes alias
|
||||
cdef OBIDMS_column_p column_p = self.pointer()
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
raise OBIDeactivatedInstanceError()
|
||||
|
||||
if (column_name is None):
|
||||
alias = self._alias
|
||||
@ -177,7 +178,8 @@ cdef class Column(OBIWrapper) :
|
||||
|
||||
view.register(self)
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __len__(self):
|
||||
'''
|
||||
implements the len() function for the Column class
|
||||
@ -186,7 +188,8 @@ cdef class Column(OBIWrapper) :
|
||||
'''
|
||||
return self.lines_used
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __sizeof__(self):
|
||||
'''
|
||||
returns the size of the C object wrapped by the Column instance
|
||||
@ -194,21 +197,26 @@ cdef class Column(OBIWrapper) :
|
||||
cdef OBIDMS_column_header_p header = self.pointer().header
|
||||
return header.header_size + header.data_size
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __iter__(self):
|
||||
cdef index_t line_nb
|
||||
for line_nb in range(self.lines_used):
|
||||
yield self.get_line(line_nb)
|
||||
|
||||
|
||||
|
||||
# TODO check time efficiency with and without
|
||||
@OBIWrapper.checkIsActive
|
||||
def __setitem__(self, index_t line_nb, object value):
|
||||
self.set_line(line_nb, value)
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return self.get_line(line_nb)
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __str__(self) :
|
||||
cdef str to_print
|
||||
cdef object line
|
||||
@ -217,14 +225,15 @@ cdef class Column(OBIWrapper) :
|
||||
to_print = to_print + str(line) + "\n"
|
||||
return to_print
|
||||
|
||||
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __repr__(self) :
|
||||
cdef bytes s
|
||||
s = self._alias + b", original name: " + self.original_name + b", version " + str2bytes(str(self.version)) + b", data type: " + self.data_type
|
||||
return bytes2str(s)
|
||||
|
||||
|
||||
cpdef close(self): # TODO discuss, can't be called bc then bug when closing view that tries to close it in C
|
||||
def close(self): # TODO discuss, can't be called bc then bug when closing view that tries to close it in C
|
||||
|
||||
cdef OBIDMS_column_p pointer
|
||||
|
||||
@ -239,54 +248,76 @@ cdef class Column(OBIWrapper) :
|
||||
# Column alias property getter and setter
|
||||
@property
|
||||
def name(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self._alias
|
||||
@name.setter
|
||||
def name(self, object new_alias): # @DuplicatedSignature
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
self._view.rename_column(self._alias, new_alias)
|
||||
|
||||
# elements_names property getter
|
||||
@property
|
||||
def elements_names(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return obi_get_elements_names(self.pointer()).split(b';')
|
||||
|
||||
# nb_elements_per_line property getter
|
||||
@property
|
||||
def nb_elements_per_line(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.nb_elements_per_line
|
||||
|
||||
# data_type property getter
|
||||
@property
|
||||
def data_type(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return name_data_type(self.data_type_int)
|
||||
|
||||
# data_type integer code property getter
|
||||
@property
|
||||
def data_type_int(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.returned_data_type
|
||||
|
||||
# original_name property getter
|
||||
@property
|
||||
def original_name(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.name
|
||||
|
||||
# version property getter
|
||||
@property
|
||||
def version(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.version
|
||||
|
||||
# lines_used property getter
|
||||
@property
|
||||
def lines_used(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.lines_used
|
||||
|
||||
# comments property getter
|
||||
@property
|
||||
def comments(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return self.pointer().header.comments
|
||||
|
||||
# creation_date property getter
|
||||
@property
|
||||
def creation_date(self):
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
return obi_format_date(self.pointer().header.creation_date)
|
||||
|
||||
|
||||
@ -295,10 +326,14 @@ cdef class Column(OBIWrapper) :
|
||||
|
||||
cdef class Column_multi_elts(Column) :
|
||||
|
||||
@OBIWrapper.checkIsActive
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return Column_line(self, line_nb)
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object values):
|
||||
cdef object element_name
|
||||
if not self.active() :
|
||||
raise OBIDeactivatedInstanceError()
|
||||
if values is None :
|
||||
for element_name in self.elements_names :
|
||||
self.set_item(line_nb, element_name, None)
|
||||
|
Reference in New Issue
Block a user