Cython view API: added NUC_SEQS views and sequence classes + changed
cloning API
This commit is contained in:
@ -9,6 +9,7 @@ from libc.stdlib cimport malloc
|
||||
from ..capi.obiview cimport Alias_column_pair_p, \
|
||||
obi_new_view, \
|
||||
obi_open_view, \
|
||||
obi_clone_view, \
|
||||
obi_save_and_close_view, \
|
||||
obi_view_get_pointer_on_column_in_view, \
|
||||
obi_view_delete_column, \
|
||||
@ -26,6 +27,8 @@ from ..object cimport OBIObjectClosedInstance
|
||||
|
||||
from ..column.column cimport Column
|
||||
|
||||
from obitools3.dms.view import typed_view
|
||||
|
||||
from ..capi.obitypes cimport only_ATGC, \
|
||||
OBI_BOOL, \
|
||||
OBI_CHAR, \
|
||||
@ -34,27 +37,16 @@ from ..capi.obitypes cimport only_ATGC, \
|
||||
OBI_QUAL, \
|
||||
OBI_SEQ, \
|
||||
OBI_STR
|
||||
|
||||
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
|
||||
|
||||
cdef class View(OBIWrapper) :
|
||||
|
||||
cdef inline Obiview_p pointer(self) :
|
||||
return <Obiview_p>(self._pointer)
|
||||
|
||||
|
||||
@staticmethod
|
||||
cdef register_view_class(bytes view_type_name,
|
||||
type view_class):
|
||||
'''
|
||||
Each sub class of `dms.View` needs to be registered after its declaration
|
||||
to declare its relationship with an `OBIType_t`
|
||||
'''
|
||||
global __VIEW_CLASS__
|
||||
|
||||
assert issubclass(view_class, View)
|
||||
|
||||
__VIEW_CLASS__[view_type_name] = view_class
|
||||
|
||||
return <Obiview_p>(self._pointer)
|
||||
|
||||
@staticmethod
|
||||
cdef type get_view_class(bytes view_type):
|
||||
@ -65,8 +57,7 @@ cdef class View(OBIWrapper) :
|
||||
@staticmethod
|
||||
def new(DMS dms,
|
||||
object view_name,
|
||||
object comments=None,
|
||||
type view_class=View):
|
||||
object comments=None):
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef bytes comments_b
|
||||
@ -74,7 +65,7 @@ cdef class View(OBIWrapper) :
|
||||
cdef void* pointer
|
||||
|
||||
cdef View view # @DuplicatedSignature
|
||||
|
||||
|
||||
if comments is not None:
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
@ -90,7 +81,7 @@ cdef class View(OBIWrapper) :
|
||||
message = "Error : Cannot create view %s" % bytes2str(view_name_b)
|
||||
raise RuntimeError(message)
|
||||
|
||||
view = OBIWrapper.new(view_class, pointer)
|
||||
view = OBIWrapper.new(View, pointer)
|
||||
view._dms = dms
|
||||
dms.register(view)
|
||||
|
||||
@ -115,11 +106,11 @@ cdef class View(OBIWrapper) :
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = <void*> obi_new_view(self._dms.pointer(),
|
||||
view_name_b,
|
||||
self.pointer(),
|
||||
NULL,
|
||||
comments_b)
|
||||
pointer = <void*> obi_clone_view(self._dms.pointer(),
|
||||
self.pointer(),
|
||||
view_name_b,
|
||||
NULL,
|
||||
comments_b)
|
||||
|
||||
if pointer == NULL :
|
||||
raise RuntimeError("Error : Cannot clone view %s into view %s"
|
||||
@ -485,13 +476,13 @@ cdef class Line_selection(list):
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = obi_new_view(self._view._dms.pointer(),
|
||||
view_name_b,
|
||||
self._view.pointer(),
|
||||
self.__build_binary_list__(),
|
||||
comments_b)
|
||||
|
||||
|
||||
pointer = obi_clone_view(self._view._dms.pointer(),
|
||||
self._view.pointer(),
|
||||
view_name_b,
|
||||
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),
|
||||
@ -504,3 +495,28 @@ cdef class Line_selection(list):
|
||||
|
||||
return view
|
||||
|
||||
|
||||
#############################################################
|
||||
|
||||
|
||||
cdef register_view_class(bytes view_type_name,
|
||||
type view_class):
|
||||
'''
|
||||
Each subclass of `dms.view` needs to be registered after its declaration
|
||||
'''
|
||||
global __VIEW_CLASS__
|
||||
|
||||
assert issubclass(view_class, View)
|
||||
|
||||
__VIEW_CLASS__[view_type_name] = view_class
|
||||
|
||||
|
||||
cdef register_all_view_classes() :
|
||||
|
||||
x = list(pkgutil.walk_packages(typed_view.__path__, prefix="obitools3.dms.view.typed_view."))
|
||||
all_modules = [importlib.import_module(a[1]) for a in x]
|
||||
for mod in all_modules :
|
||||
getattr(mod, 'register_class')()
|
||||
|
||||
|
||||
register_all_view_classes()
|
||||
|
Reference in New Issue
Block a user