Some change in the way to manage access to special items of the

dictionary like sequence or quality
This commit is contained in:
2016-12-13 12:49:34 +01:00
parent fc55fc117d
commit 06cb7a9a58
2 changed files with 50 additions and 18 deletions

View File

@ -11,9 +11,11 @@ cdef class OBI_Seq(dict) :
cdef class OBI_Nuc_Seq(OBI_Seq) : cdef class OBI_Nuc_Seq(OBI_Seq) :
cdef object _quality cdef object _quality
#cpdef object reverse_complement(self) cpdef object get_str_quality(self)
#cpdef object reverse_complement(self)
cdef class OBI_Nuc_Seq_Stored(OBIView_line) : cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
cpdef object get_str_quality(self) cpdef object get_str_quality(self)
#cpdef object reverse_complement(self) #cpdef object reverse_complement(self)

View File

@ -8,14 +8,31 @@ from .capi.obiview cimport NUC_SEQUENCE_COLUMN, \
QUALITY_COLUMN QUALITY_COLUMN
cdef str __str__ID_COLUMN__ = bytes2str(ID_COLUMN)
cdef str __str__DEFINITION_COLUMN__ = bytes2str(DEFINITION_COLUMN)
cdef str __str__QUALITY_COLUMN__ = bytes2str(QUALITY_COLUMN)
cdef str __str__NUC_SEQUENCE_COLUMN__ = bytes2str(NUC_SEQUENCE_COLUMN)
cdef class OBI_Seq(dict) : cdef class OBI_Seq(dict) :
def __init__(self, str id, object seq, object definition=None) : def __init__(self, str id,
object seq,
str definition=None,
dict attributes=None) :
self.id = id self.id = id
self.seq = seq self.seq = seq
if definition is not None : if definition is not None :
self.definition = definition self.definition = definition
def __getitem__(self,str key):
if key == __str__ID_COLUMN__:
return self._id
elif key == __str__DEFINITION_COLUMN__:
return self._definition
else:
return dict.__getitem__(self,key)
# sequence id property getter and setter # sequence id property getter and setter
@property @property
def id(self): # @ReservedAssignment def id(self): # @ReservedAssignment
@ -23,7 +40,6 @@ cdef class OBI_Seq(dict) :
@id.setter @id.setter
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
self._id = new_id self._id = new_id
self[bytes2str(ID_COLUMN)] = new_id
# sequence property getter and setter # sequence property getter and setter
@property @property
@ -32,7 +48,7 @@ cdef class OBI_Seq(dict) :
@seq.setter @seq.setter
def seq(self, object new_seq): # @DuplicatedSignature def seq(self, object new_seq): # @DuplicatedSignature
self._seq = new_seq self._seq = new_seq
self["SEQ"] = new_seq # TODO discuss # self["SEQ"] = new_seq # TODO discuss
# sequence definition property getter and setter # sequence definition property getter and setter
@property @property
@ -41,11 +57,21 @@ cdef class OBI_Seq(dict) :
@definition.setter @definition.setter
def definition(self, object new_definition): # @DuplicatedSignature def definition(self, object new_definition): # @DuplicatedSignature
self._definition = new_definition self._definition = new_definition
self[bytes2str(DEFINITION_COLUMN)] = new_definition
cdef class OBI_Nuc_Seq(OBI_Seq) : cdef class OBI_Nuc_Seq(OBI_Seq) :
def __getitem__(self,str key):
if key == __str__NUC_SEQUENCE_COLUMN__:
return self._id
elif key == __str__QUALITY_COLUMN__:
return self._quality
else:
return OBI_Seq.__getitem__(self,key)
cpdef object get_str_quality(self) : # TODO not ideal. Make quality_int and quality_str properties
return self._quality
# nuc sequence property getter and setter # nuc sequence property getter and setter
@property @property
def seq(self): def seq(self):
@ -53,7 +79,7 @@ cdef class OBI_Nuc_Seq(OBI_Seq) :
@seq.setter @seq.setter
def seq(self, object new_seq): # @DuplicatedSignature def seq(self, object new_seq): # @DuplicatedSignature
self._seq = new_seq self._seq = new_seq
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq # self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq
# sequence quality property getter and setter # sequence quality property getter and setter
@property @property
@ -62,7 +88,7 @@ cdef class OBI_Nuc_Seq(OBI_Seq) :
@quality.setter @quality.setter
def quality(self, object new_quality): # @DuplicatedSignature def quality(self, object new_quality): # @DuplicatedSignature
self._quality = new_quality self._quality = new_quality
self[bytes2str(QUALITY_COLUMN)] = new_quality # self[bytes2str(QUALITY_COLUMN)] = new_quality
# cpdef str reverse_complement(self) : TODO in C ? # cpdef str reverse_complement(self) : TODO in C ?
# pass # pass
@ -75,40 +101,44 @@ cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
# sequence id property getter and setter # sequence id property getter and setter
@property @property
def id(self): # @ReservedAssignment @DuplicatedSignature def id(self): # @ReservedAssignment @DuplicatedSignature
return self[bytes2str(ID_COLUMN)] return self[__str__ID_COLUMN__]
@id.setter @id.setter
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
self[bytes2str(ID_COLUMN)] = new_id self[__str__ID_COLUMN__] = new_id
# sequence definition property getter and setter # sequence definition property getter and setter
@property @property
def definition(self): def definition(self):
return self[bytes2str(DEFINITION_COLUMN)] return self[__str__DEFINITION_COLUMN__]
@definition.setter @definition.setter
def definition(self, str new_def): # @DuplicatedSignature def definition(self, str new_def): # @DuplicatedSignature
self[bytes2str(DEFINITION_COLUMN)] = new_def self[__str__DEFINITION_COLUMN__] = new_def
# nuc_seq property getter and setter # nuc_seq property getter and setter
@property @property
def nuc_seq(self): def nuc_seq(self):
return self[bytes2str(NUC_SEQUENCE_COLUMN)] return self[__str__NUC_SEQUENCE_COLUMN__]
@nuc_seq.setter @nuc_seq.setter
def nuc_seq(self, object new_seq): # @DuplicatedSignature def nuc_seq(self, object new_seq): # @DuplicatedSignature
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq self[__str__NUC_SEQUENCE_COLUMN__] = new_seq
# quality property getter and setter # quality property getter and setter
@property @property
def quality(self): def quality(self):
return self[bytes2str(QUALITY_COLUMN)] return self[__str__QUALITY_COLUMN__]
@quality.setter @quality.setter
def quality(self, object new_qual): # @DuplicatedSignature def quality(self, object new_qual): # @DuplicatedSignature
if (type(new_qual) == list) or (new_qual is None) : # TODO check that quality column exists if (type(new_qual) == list) or (new_qual is None) : # TODO check that quality column exists
self[bytes2str(QUALITY_COLUMN)] = new_qual self[__str__QUALITY_COLUMN__] = new_qual
else : # Quality is in str form else : # Quality is in str form
(((self._view).columns)[bytes2str(QUALITY_COLUMN)]).set_str_line(self._index, new_qual) (((self._view).columns)[__str__QUALITY_COLUMN__]).set_str_line(self._index, new_qual)
cpdef object get_str_quality(self) : # TODO not ideal. Make quality_int and quality_str properties cpdef object get_str_quality(self) : # TODO not ideal. Make quality_int and quality_str properties
return ((self._view).columns)[bytes2str(QUALITY_COLUMN)].get_str_line(self._index) return ((self._view).columns)[__str__QUALITY_COLUMN__].get_str_line(self._index)
# cpdef str reverse_complement(self) : TODO in C ? # cpdef str reverse_complement(self) : TODO in C ?
# pass # pass