diff --git a/python/obitools3/commands/ls.pyx b/python/obitools3/commands/ls.pyx index 90b6dd8..d148c6f 100755 --- a/python/obitools3/commands/ls.pyx +++ b/python/obitools3/commands/ls.pyx @@ -3,7 +3,9 @@ from obitools3.uri.decode import open_uri from obitools3.apps.config import logger from obitools3.dms import DMS +from obitools3.dms.taxo.taxo cimport Taxonomy from obitools3.apps.optiongroups import addMinimalInputOption +from obitools3.utils cimport tostr __title__="Print a preview of a DMS, view, column...." @@ -11,6 +13,12 @@ __title__="Print a preview of a DMS, view, column...." def addOptions(parser): addMinimalInputOption(parser) + group = parser.add_argument_group('obi ls specific options') + + group.add_argument('-l', + action="store_true", dest="ls:longformat", + default=False, + help="Detailed list in long format with all metadata.") def run(config): @@ -23,6 +31,21 @@ def run(config): input = open_uri(config['obi']['inputURI']) if input is None: raise Exception("Could not read input") - - print(repr(input[1])) + if input[2] == DMS and not config['ls']['longformat']: + dms = input[0] + l = [] + for view in input[0]: + l.append(tostr(view) + "\t(Date created: " + tostr(dms[view].comments["Date created"])+")") + l.sort() + for v in l: + print(v) + else: + print(repr(input[1])) + if input[2] == DMS: + print("\n### Taxonomies:") + for t in Taxonomy.list_taxos(input[0]): + print("\t", tostr(t)) + if config['ls']['longformat'] and len(input[1].comments) > 0: + print("\n### Comments:") + print(str(input[1].comments)) diff --git a/python/obitools3/dms/taxo/taxo.pyx b/python/obitools3/dms/taxo/taxo.pyx index ec1cf21..d6c0b4e 100755 --- a/python/obitools3/dms/taxo/taxo.pyx +++ b/python/obitools3/dms/taxo/taxo.pyx @@ -1,7 +1,8 @@ #cython: language_level=3 from obitools3.utils cimport str2bytes, bytes2str, tobytes, tostr - +from ..capi.obidms cimport OBIDMS_p, obi_dms_get_full_path + from ..capi.obitaxonomy cimport obi_taxonomy_exists, \ obi_read_taxonomy, \ obi_read_taxdump, \ @@ -17,8 +18,9 @@ from ..capi.obitaxonomy cimport obi_taxonomy_exists, \ ecotx_t from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer - import tarfile +from pathlib import Path +from libc.stdlib cimport free cdef class Taxonomy(OBIWrapper) : @@ -36,7 +38,25 @@ cdef class Taxonomy(OBIWrapper) : % tostr(name)) else: return e + + + @staticmethod + def list_taxos(DMS dms): + cdef OBIDMS_p dms_p + cdef const char* path + + dms_p = dms.pointer() + path = obi_dms_get_full_path(dms_p, b"TAXONOMY") + if path == NULL: + raise RuntimeError("Cannot retrieve the taxonomy directory path") + + p = Path(bytes2str(path)) + free(path) + + for tax in p.glob("*") : + yield str2bytes(tax.stem) + @staticmethod def open(DMS dms, object name) : diff --git a/python/obitools3/dms/view/view.pyx b/python/obitools3/dms/view/view.pyx index a9bfcc6..1c57297 100755 --- a/python/obitools3/dms/view/view.pyx +++ b/python/obitools3/dms/view/view.pyx @@ -177,8 +177,7 @@ cdef class View(OBIWrapper) : @OBIWrapper.checkIsActive def __repr__(self) : - cdef str s = "#View name:\n{name:s}\n#Comments:\n{comments:s}\n#Line count:\n{line_count:d}\n#Columns:\n".format(name = bytes2str(self.name), - comments = str(self.comments), + cdef str s = "#View name:\n{name:s}\n#Line count:\n{line_count:d}\n#Columns:\n".format(name = bytes2str(self.name), line_count = self.line_count) for column_name in self.keys() : s = s + repr(self[column_name]) + '\n' diff --git a/src/obiview.c b/src/obiview.c index 6133178..4f74a54 100755 --- a/src/obiview.c +++ b/src/obiview.c @@ -1096,6 +1096,16 @@ static int finish_view(Obiview_p view) (column->header)->finished = true; } + // Add the time in the view comments + time_t t; + t = time(&t); + if (obi_view_add_comment(view, "Date created", strtok(ctime(&t), "\n")) < 0) + { + obi_set_errno(OBIVIEW_ERROR); + obidebug(1, "\nError adding the date of creation when finishing a view"); + return -1; + } + // Flag the view as finished (view->infos)->finished = true;