obi import: fixed bugs when rewriting a column: a bug with new elements

names ignoring previous elements names found, a bug with the global
obi_errno being reset too late, and a bug with the column dictionary
used by obi import not being updated after rewriting a column
This commit is contained in:
Celine Mercier
2017-07-07 15:33:43 +02:00
parent 906343187b
commit 740d021276

View File

@ -192,7 +192,7 @@ def run(config):
qual_col[i] = seq['quality'] qual_col[i] = seq['quality']
for tag in seq['tags'] : for tag in seq['tags'] :
value = seq['tags'][tag] value = seq['tags'][tag]
if tag not in dcols : if tag not in dcols :
@ -234,7 +234,7 @@ def run(config):
dcols[tag][0][i] = value dcols[tag][0][i] = value
except IndexError : except IndexError :
value_type = type(value) value_type = type(value)
old_column = dcols[tag][0] old_column = dcols[tag][0]
old_nb_elements_per_line = old_column.nb_elements_per_line old_nb_elements_per_line = old_column.nb_elements_per_line
@ -248,7 +248,7 @@ def run(config):
if value_type == dict : # Check dictionary keys if value_type == dict : # Check dictionary keys
for k in value : for k in value :
if k not in old_elements_names : if k not in old_elements_names :
new_elements_names = list(value) new_elements_names = list(set(old_elements_names+[tobytes(k) for k in value]))
rewrite = True rewrite = True
break break
@ -263,18 +263,22 @@ def run(config):
if new_nb_elements_per_line == 0 and new_elements_names is not None : if new_nb_elements_per_line == 0 and new_elements_names is not None :
new_nb_elements_per_line = len(new_elements_names) new_nb_elements_per_line = len(new_elements_names)
# Reset obierrno
obi_errno = 0
dcols[tag] = (view.rewrite_column_with_diff_attributes(old_column.name, dcols[tag] = (view.rewrite_column_with_diff_attributes(old_column.name,
new_data_type=new_type, new_data_type=new_type,
new_nb_elements_per_line=new_nb_elements_per_line, new_nb_elements_per_line=new_nb_elements_per_line,
new_elements_names=new_elements_names), new_elements_names=new_elements_names),
value_obitype) value_obitype)
# Reset obierrno # Update the dictionary:
obi_errno = 0 for t in dcols :
dcols[t] = (view[t], dcols[t][1])
# Fill value # Fill value
dcols[tag][0][i] = value dcols[tag][0][i] = value
i+=1 i+=1
print("\n") print("\n")