diff --git a/python/obitools3/dms/obiseq.pxd b/python/obitools3/dms/obiseq.pxd index c4c5df4..f74d7ac 100755 --- a/python/obitools3/dms/obiseq.pxd +++ b/python/obitools3/dms/obiseq.pxd @@ -39,4 +39,6 @@ cdef class Nuc_Seq_Stored(Seq_Stored) : cpdef set_quality_char(self, object new_qual, int offset=*) cpdef object build_quality_array(self, list quality) cpdef bytes build_reverse_complement(self) - cpdef str get_str(self) \ No newline at end of file + cpdef str get_str(self) + cpdef repr_bytes(self) + \ No newline at end of file diff --git a/python/obitools3/dms/obiseq.pyx b/python/obitools3/dms/obiseq.pyx index 75970eb..6541073 100755 --- a/python/obitools3/dms/obiseq.pyx +++ b/python/obitools3/dms/obiseq.pyx @@ -431,9 +431,12 @@ cdef class Nuc_Seq_Stored(Seq_Stored) : return len(self._view.get_column(NUC_SEQUENCE_COLUMN).get_line(self.index)) def __repr__(self): + return bytes2str(self.repr_bytes()) + + cpdef repr_bytes(self): if self.quality is None: formatter = FastaFormat() else: formatter = FastqFormat() - return bytes2str(formatter(self)) + return formatter(self) diff --git a/python/obitools3/dms/view/view.pxd b/python/obitools3/dms/view/view.pxd index b535bd1..1595fb6 100755 --- a/python/obitools3/dms/view/view.pxd +++ b/python/obitools3/dms/view/view.pxd @@ -20,6 +20,10 @@ cdef class View(OBIWrapper): cdef DMS _dms cdef inline Obiview_p pointer(self) + + cpdef print_to_output(self, + object output, + bint noprogressbar=*) cpdef delete_column(self, object column_name, @@ -61,6 +65,8 @@ cdef class Line : cdef index_t _index cdef View _view + cpdef repr_bytes(self) + cdef register_view_class(bytes view_type_name, type view_class) diff --git a/python/obitools3/dms/view/view.pyx b/python/obitools3/dms/view/view.pyx index 300c753..28433f8 100755 --- a/python/obitools3/dms/view/view.pyx +++ b/python/obitools3/dms/view/view.pyx @@ -6,6 +6,8 @@ cdef dict __VIEW_CLASS__= {} from libc.stdlib cimport malloc +from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport + from ..capi.obiview cimport Alias_column_pair_p, \ obi_new_view, \ obi_open_view, \ @@ -48,10 +50,13 @@ from ..capi.obidms cimport obi_import_view from obitools3.format.tab import TabFormat +from cpython.exc cimport PyErr_CheckSignals + import importlib import inspect import pkgutil import json +import sys cdef class View(OBIWrapper) : @@ -184,7 +189,31 @@ cdef class View(OBIWrapper) : for column_name in self.keys() : s = s + repr(self[column_name]) + '\n' return s - + + + cpdef print_to_output(self, object output, bint noprogressbar=False): + + cdef int i + cdef Line entry + + self.checkIsActive(self) + + # Initialize the progress bar + if noprogressbar == False: + pb = ProgressBar(len(self)) + else: + pb = None + i=0 + for entry in self: + PyErr_CheckSignals() + if pb is not None: + pb(i) + output.write(entry.repr_bytes()+b"\n") + i+=1 + if pb is not None: + pb(len(self), force=True) + print("", file=sys.stderr) + def keys(self): @@ -757,8 +786,12 @@ cdef class Line : def __repr__(self): + return bytes2str(self).repr_bytes() + + + cpdef repr_bytes(self): formatter = TabFormat(header=False) - return bytes2str(formatter(self)) + return formatter(self) # View property getter