Big refactoring 3

This commit is contained in:
2016-12-26 14:18:01 +01:00
parent e6db2086d5
commit 5156f6bb9e
2 changed files with 119 additions and 88 deletions

View File

@ -26,71 +26,61 @@ from .capi.obiview cimport Obiview_p, \
DEFINITION_COLUMN, \
QUALITY_COLUMN
from ._obidmscolumn cimport OBIDMS_column_p, \
OBIDMS_column
from ._obidms cimport OBIDMS
from obitools3.utils cimport tobytes, \
bytes2str, \
tostr
from .dms cimport DMS
cdef class OBIView:
cdef class View:
cdef OBIDMS _dms
cdef DMS _dms
cdef Obiview_p _pointer
cdef dict _columns
cdef __init_columns__(self)
cpdef OBIView clone(self,
view_name,
comments=*)
cpdef View clone(self,
object view_name,
object comments=*)
@staticmethod
cdef OBIView _new(OBIDMS dms,
bytes view_name,
bytes comments=*)
cdef View _new(DMS dms,
bytes view_name,
bytes comments=*)
@staticmethod
cdef OBIView _open(OBIDMS dms,
bytes view_name)
cdef View _open(DMS dms,
bytes view_name)
cpdef delete_column(self, column_name)
cpdef add_column(self,
str column_name,
obiversion_t version_number=*,
object alias=*,
object type=*,
index_t nb_lines=*,
index_t nb_elements_per_line=*,
list elements_names=*,
object indexer_name=*,
object associated_column_name=*,
obiversion_t associated_column_version=*,
object comments=*,
bint create=*
)
cpdef close(self)
cpdef delete_column(self,
object column_name)
cpdef rename_column(self,
object current_name,
object new_name)
cpdef change_column_alias(self, bytes current_alias, bytes new_alias)
cdef update_column_pointers(self)
cpdef OBIView_line_selection new_selection(self,
list lines=*)
cdef class OBIView_line_selection(list):
cdef class View_line_selection(list):
cdef OBIView _view
cdef str _view_name
cdef View _view
cdef index_t* __build_binary_list__(self)
cpdef OBIView materialize(self,
str view_name,
str comments=*)
cpdef View materialize(self,
object view_name,
object comments=*)
cdef class OBIView_line :
cdef class View_line :
cdef index_t _index
cdef OBIView _view
cdef View _view

View File

@ -1,60 +1,52 @@
#cython: language_level=3
cdef class OBIView :
cdef class View :
def __init__(self,dms,int __internalCall__):
if __internalCall__!=987654:
raise RuntimeError('OBIView constructor cannot be called directly')
self._dms = dms
self._pointer = NULL
self._columns = {}
cdef __init_columns__(self):
cdef size_t i
cdef bytes col_alias
cdef OBIDMS_column_p column_p
cdef Obiview_p pointer = self._pointer
self._columns = {}
for i in range(pointer.infos.column_count) :
col_alias = pointer.infos.column_references[i].alias
column_p = <OBIDMS_column_p> (pointer.columns)[i]
subclass = OBIDMS_column.get_subclass_type(column_p)
self._columns[col_alias] = subclass(self, col_alias)
cpdef OBIView clone(self,
view_name,
comments=b""):
cpdef View clone(self,
object view_name,
object comments=None):
cdef OBIView view = OBIView(self._dms,
987654)
cdef bytes view_name_b = tobytes(view_name)
cdef bytes comments_b
cdef View view = View(self._dms,
987654)
if comments is not None:
comments_b = tobytes(comments)
else:
comments_b = b''
view._pointer = obi_new_view(self._pointer.dms,
tobytes(view_name),
view_name_b,
self._pointer,
NULL,
tobytes(comments))
comments_b)
if view._pointer == NULL :
raise RuntimeError("Error : Cannot clone view %s into view %s"
% (str(self.name),
tobytes(view_name))
bytes2str(view_name_b))
)
view.__init_columns__()
return view
@staticmethod
cdef OBIView _new(OBIDMS dms,
bytes view_name,
bytes comments=b""):
cdef View _new(DMS dms,
bytes view_name,
bytes comments=b""):
cdef OBIView view = OBIView(dms,
987654) # @DuplicatedSignature
cdef View view = OBIView(dms,
987654) # @DuplicatedSignature
view._pointer = obi_new_view(dms._pointer,
view_name,
@ -64,24 +56,34 @@ cdef class OBIView :
if view._pointer == NULL :
raise RuntimeError("Error : Cannot create view %s" % view_name)
view.__init_columns__()
return view
@staticmethod
def new(OBIDMS dms,
view_name,
comments=b""):
return OBIView._new(dms,tobytes(view_name),tobytes(comments))
object view_name,
object comments=None):
cdef bytes view_name_b = tobytes(view_name)
cdef bytes comments_b
if comments is not None:
comments_b = tobytes(comments)
else:
comments_b = b''
return View._new(dms,
view_name_b,
comments_b)
@staticmethod
cdef OBIView _open(OBIDMS dms,
bytes view_name):
cdef View _open(DMS dms,
bytes view_name):
cdef OBIView view = OBIView(dms,
987654) # @DuplicatedSignature
cdef View view = View(dms,
987654) # @DuplicatedSignature
view._pointer = obi_open_view(dms._pointer,
view_name)
@ -89,19 +91,22 @@ cdef class OBIView :
if view._pointer == NULL :
raise RuntimeError("Error : Cannot open view %s" % bytes2str(view_name))
view.__init_columns__()
return view
@staticmethod
def open(OBIDMS dms, # @ReservedAssignment
view_name):
return OBIView._open(dms,tobytes(view_name))
def open(DMS dms, # @ReservedAssignment
object view_name):
def __dealloc__(self):
cdef bytes view_name_b = tobytes(view_name)
return View._open(dms,view_name_b)
cpdef close(self):
if (obi_save_and_close_view(self._pointer) < 0) :
raise Exception("Problem closing a view")
def __dealloc__(self):
self.close()
def __repr__(self) :
cdef str s
@ -400,4 +405,40 @@ cdef class OBIView_line :
return str(line)
cpdef dict get_view_infos(self, str view_name) :
cdef Obiview_infos_p view_infos_p
cdef dict view_infos_d
cdef Alias_column_pair_p column_refs
cdef int i, j
cdef str column_name
view_infos_p = obi_view_map_file(self._pointer,
tobytes(view_name))
view_infos_d = {}
view_infos_d["name"] = bytes2str(view_infos_p.name)
view_infos_d["comments"] = bytes2str(view_infos_p.comments)
view_infos_d["view_type"] = bytes2str(view_infos_p.view_type)
view_infos_d["column_count"] = <int> view_infos_p.column_count
view_infos_d["line_count"] = <int> view_infos_p.line_count
view_infos_d["created_from"] = bytes2str(view_infos_p.created_from)
view_infos_d["creation_date"] = bytes2str(obi_format_date(view_infos_p.creation_date))
if (view_infos_p.all_lines) :
view_infos_d["line_selection"] = None
else :
view_infos_d["line_selection"] = {}
view_infos_d["line_selection"]["column_name"] = bytes2str((view_infos_p.line_selection).column_name)
view_infos_d["line_selection"]["version"] = <int> (view_infos_p.line_selection).version
view_infos_d["column_references"] = {}
column_references = view_infos_p.column_references
for j in range(view_infos_d["column_count"]) :
column_name = bytes2str((column_references[j]).alias)
view_infos_d["column_references"][column_name] = {}
view_infos_d["column_references"][column_name]["original_name"] = bytes2str((column_references[j]).column_refs.column_name)
view_infos_d["column_references"][column_name]["version"] = (column_references[j]).column_refs.version
obi_view_unmap_file(self._pointer, view_infos_p)
return view_infos_d