Source code for util.import_candidates
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2009 Glencoe Software, Inc. All rights reserved.
# Use is subject to license terms supplied in LICENSE.txt
#
"""
Utility method for calling the equivalent of "omero import -f".
Results are parsed when using as_dictionary.
"""
import omero
from omero.util.temp_files import create_path, remove_path
from omero.cli import CLI
def _to_list(path):
"""
Guarantees that a list of strings will be returned.
Handles unicode caused by "%s" % path.path.
"""
if isinstance(path, str) or isinstance(path, str):
path = [str(path)]
return path
else:
path = [str(x) for x in path]
return path
[docs]
def as_stdout(path, readers="", extra_args=None):
"""Returns the import candidates for the given path.
you can pass more arguments to the `import` command through the
extra_args argument in the form of a list.
..code ::
>>> as_stdout("/my/dir/with_tifs", extra_args=["--depth", "6"])
"""
if extra_args is None:
extra_args = []
path = _to_list(path)
readers = str(readers)
cli = CLI()
cli.loadplugins()
if readers:
cli.invoke(["import", "-l"] + [readers,] + extra_args + ["-f"] + path)
else:
cli.invoke(["import"] + extra_args + ["-f"] + path)
if cli.rv != 0:
raise omero.InternalException(
None, None, "'import -f' exited with a rc=%s. "
"See console for more information" % cli.rv)
[docs]
def as_dictionary(path, readers="", extra_args=None):
"""
Run as_stdout, parses the output and returns a dictionary of the form:
```
{
some_file_in_group :
[
some_file_in_group
some_other_file_in_group
...
last_file_in_group
],
some_file_in_second_group : ...
}
```
you can pass more arguments to the `import` command through the
extra_args argument in the form of a list.
```
to_import = as_dictionary("/my/dir/with_tifs", extra_args=["--depth", "6"])
```
will go through the directories with a depth level of 6 instead of
the default 4. Arguments of interest might be: `debugging`,
`report`, `logback`. Note that the command runs locally so options
such as `--exclude` will not work as they need information from the server.
"""
t = create_path("candidates", "err")
path = _to_list(path)
path.insert(0, "---file=%s" % t)
try:
as_stdout(path, readers=readers, extra_args=extra_args)
f = open(str(t), "r")
output = f.readlines()
f.close()
finally:
remove_path(t)
gline = -1
key = None
groups = {}
for line in output:
line = line.strip()
if len(line) == 0:
continue
if line.startswith("#"):
gline = -1
else:
if gline == -1:
gline = 1
key = line
groups[key] = [line]
else:
groups[key].append(line)
return groups
if __name__ == "__main__":
import sys
as_stdout(sys.argv[1:])