Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 31 additions & 4 deletions odm_sdk/files_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class FilesUtil(Application):
ALIGNED_READS = 'com.genestack.bio.files.IAlignedReads'
VARIATION_FILE = 'com.genestack.bio.files.IVariationFile'
APPLICATION_PAGE_FILE = 'com.genestack.api.files.IApplicationPageFile'
DICTIONARY_FILE = 'com.genestack.api.files.IDictionaryFile'
REFERENCE_GENOME = 'com.genestack.bio.files.IReferenceGenome'
AUXILIARY_FILE = 'com.genestack.api.files.IAuxiliaryFile'
INDEX_FILE = 'com.genestack.api.files.IIndexFile'
Expand Down Expand Up @@ -366,7 +367,33 @@ def load_info(self, accessions):
"""
return self.invoke('loadInfo', accessions)

def search_files(self, accession):
return self.invoke('searchFiles',
accession, # type: str
{}, [], 100, 0, None, False)
def search_files(self, search_string, parameters=None, data_types=None,
max_on_page=100, page_num=0, sort_order=None, ascending=False):
"""
Search for files.

:param search_string: search string (e.g. accession)
:type search_string: str
:param parameters: dictionary of search parameters
:type parameters: dict[str, str]
:param data_types: list of Java class names for file types
:type data_types: list[str]
:param max_on_page: maximum number of results per page
:param page_num: page number
:param sort_order: sort order (see SortOrder class)
:param ascending: sort direction
:return: list of file infos
"""
parameters = parameters or {}
data_types = data_types or []

return self.invoke(
'searchFiles',
search_string, # type: str
parameters, # type: dict
data_types, # type: list
max_on_page, # type: int
page_num, # type: int
sort_order, # type: str
ascending # type: bool
)
46 changes: 25 additions & 21 deletions odm_sdk/scripts/dictionaries/load_init_share_dictionaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
from odm_sdk.scripts.utils import colored, GREEN, BLUE, RED


def load_dictionary(connection, data, parent_dictionary=None, replace=True,
reuse_old_version=False, metainfo=None):
def load_dictionary(connection, data, parent_dictionary=None, replace=False, metainfo=None):

if metainfo:
metainfo.add_string(Metainfo.DESCRIPTION, data.get('description'))
Expand All @@ -32,29 +31,32 @@ def load_dictionary(connection, data, parent_dictionary=None, replace=True,
term_type = data.get('term_type')

fu = FilesUtil(connection)
parent = fu.get_folder(
fu.get_special_folder(SpecialFolders.CREATED),
'Data samples',
'Dictionaries',
create=True)

di = DataImporter(connection)
old_dictionary_version = fu.find_file_by_name(name, parent=parent)
if old_dictionary_version:

search_dictionaries = fu.search_files(
search_string=name,
parameters={'type': FilesUtil.DICTIONARY_FILE, 'name': name, 'obsolete': 'false'})
if search_dictionaries['count'] > 0:
if replace:
print('Old version of dictionary %s / %s is removed'
% (colored(old_dictionary_version, GREEN), colored(name, BLUE)))
fu.mark_obsolete(old_dictionary_version)
fu.unlink_file(old_dictionary_version, parent)
# Mark all existing dictionaries as obsolete
for dictionary_file in search_dictionaries['files']:
accession = dictionary_file['accessions'][0]
fu.mark_obsolete(accession)
print('Old version of dictionary %s / %s is marked as obsolete'
% (colored(accession, GREEN), colored(name, BLUE)))
else:
if reuse_old_version:
print('Dictionary %s / %s already exists and will be reused'
% (colored(old_dictionary_version, GREEN), colored(name, BLUE)))
return old_dictionary_version
existing_accessions = []
for dictionary_file in search_dictionaries['files']:
existing_accessions.extend(dictionary_file['accessions'])
raise GenestackException(
"Dictionary %s / %s already exists, set replace=True to replace it"
% (colored(old_dictionary_version, GREEN), colored(name, BLUE)))
"Dictionary %s already exists with accessions: %s. Use --replace flag to overwrite it"
% (colored(name, BLUE), ', '.join([colored(acc, GREEN) for acc in existing_accessions])))

parent = fu.get_folder(
fu.get_special_folder(SpecialFolders.CREATED),
'Data samples',
'Dictionaries',
create=True)
accession = di.create_dictionary(
parent=parent,
name=name,
Expand Down Expand Up @@ -103,7 +105,7 @@ def main():
connection = get_connection(args)
with open(args.file_with_dictionaries, 'r') as data_file:
dictionaries = json.load(data_file)
accessions = [load_dictionary(connection, data) for data in dictionaries]
accessions = [load_dictionary(connection, data, replace=args.replace) for data in dictionaries]
initialization(connection, accessions)
sharing(connection, accessions)

Expand All @@ -117,6 +119,8 @@ def get_arguments():
group.add_argument('--file_with_dictionaries', metavar='<file_with_dictionaries>',
default="dictionaries.json",
help='dictionaries to load', required=True)
parser.add_argument('--replace', action='store_true', default=False,
help='replace existing dictionaries')
args = parser.parse_args()
return args

Expand Down