diff --git a/metacat/db/dbobjects2.py b/metacat/db/dbobjects2.py index 960763f..649026f 100755 --- a/metacat/db/dbobjects2.py +++ b/metacat/db/dbobjects2.py @@ -1305,7 +1305,7 @@ def exists(db, namespace, name, transaction=None): @staticmethod @transactioned - def list(db, namespace=None, parent_namespace=None, parent_name=None, creator=None, namespaces=None, transaction=None): + def list(db, namespace=None, parent_namespace=None, parent_name=None, creator=None, namespaces=None, transaction=None, namelike=None): namespace = namespace.Name if isinstance(namespace, DBNamespace) else namespace parent_namespace = parent_namespace.Name if isinstance(parent_namespace, DBNamespace) else parent_namespace creator = creator.Username if isinstance(creator, DBUser) else creator @@ -1315,7 +1315,8 @@ def list(db, namespace=None, parent_namespace=None, parent_name=None, creator=No parent_namespace=parent_namespace, parent_name=parent_name, creator=creator, - namespace_names=namespaces or [] + namespace_names=namespaces or [], + namelike=namelike ) columns = DBDataset.columns("ds") @@ -1337,6 +1338,8 @@ def list(db, namespace=None, parent_namespace=None, parent_name=None, creator=No sql += " and ds.namespace=%(namespace)s" if namespaces is not None: sql += " and ds.namespace=any(%(namespace_names)s)" + if namelike: + sql += " and ds.name like %(namelike)s" #print(sql % params) transaction.execute(sql, params) diff --git a/webserver/gui_handler.py b/webserver/gui_handler.py index ac195cb..3ce2155 100755 --- a/webserver/gui_handler.py +++ b/webserver/gui_handler.py @@ -835,7 +835,7 @@ def make_page_links(self, npages, page, page_size, all_page_links, window=2): @sanitize() - def datasets(self, request, relpath, selection=None, page=0, page_size=1000, sort_by="Name", sort_asc="a", **args): + def datasets(self, request, relpath, selection=None, page=0, page_size=1000, sort_by="Name", sort_asc="a", namematch="", **args): user, auth_error = self.authenticated_user() if not user: self.redirect(self.scriptUri() + "/auth/login?redirect=" + self.scriptUri() + relpath) @@ -848,18 +848,22 @@ def datasets(self, request, relpath, selection=None, page=0, page_size=1000, sor owned_namespaces = [] other_namespaces = sorted(all_namespaces.keys()) selection = selection or ("user" if user is not None else None) or "all" - + + namelike = None + if namematch: + namelike = "%" + namematch.replace("?","_").replace("*","%") + "%" + if user is not None: owned_namespaces = sorted([ns.Name for ns in DBNamespace.list(db, owned_by_user=user.Username)]) other_namespaces = sorted([name for name in all_namespaces.keys() if name not in owned_namespaces]) if selection == "user": - datasets = DBDataset.list(db, namespaces=owned_namespaces) + datasets = DBDataset.list(db, namespaces=owned_namespaces, namelike=namelike) elif selection.startswith("namespace:"): ns = selection[len("namespace:"):] - datasets = DBDataset.list(db, namespace=ns) + datasets = DBDataset.list(db, namespace=ns, namelike=namelike) else: # assume selection == "all" - datasets = DBDataset.list(db) + datasets = DBDataset.list(db, namelike=namelike) sort_by_map = { "Name": lambda x: (x.Namespace, x.Name), @@ -867,7 +871,7 @@ def datasets(self, request, relpath, selection=None, page=0, page_size=1000, sor "Created": lambda x: x.CreatedTimestamp, "Files": lambda x: x.FileCount, } - + if not (sort_by in sort_by_map): sort_by = "Name" @@ -883,11 +887,11 @@ def datasets(self, request, relpath, selection=None, page=0, page_size=1000, sor ds.GUI_OwnerRole = ns.OwnerRole ds.GUI_Authorized = user is not None and (admin or self._namespace_authorized(db, ds.Namespace, user)) - all_page_links = [f"./datasets?selection={selection}&page_size={page_size}&page={p}&sort_by={sort_by}&sort_asc={sort_asc}" for p in range(npages)] + all_page_links = [f"./datasets?selection={selection}&page_size={page_size}&page={p}&sort_by={sort_by}&sort_asc={sort_asc}&namematch={namematch}" for p in range(npages)] page_links = self.make_page_links(npages, page, page_size, all_page_links, 2) return self.render_to_response("datasets.html", datasets=datasets, - page=page, npages=npages, page_links=page_links, + page=page, npages=npages, page_links=page_links, namematch=namematch, owned_namespaces = owned_namespaces, other_namespaces=other_namespaces, selection=selection, user=user, **self.messages(args)) diff --git a/webserver/templates/datasets.html b/webserver/templates/datasets.html index db44c4e..72ebdc9 100755 --- a/webserver/templates/datasets.html +++ b/webserver/templates/datasets.html @@ -32,6 +32,15 @@ +
Name⇓⇑ | +Name⇓⇑ | Namespace | - {% if logged_in %}Creator⇓⇑ | {% endif %} -Created⇓⇑ | - {% if logged_in %}Owner⇓⇑ | {% endif %} + {% if logged_in %}Creator⇓⇑ | {% endif %} +Created⇓⇑ | + {% if logged_in %}Owner⇓⇑ | {% endif %}Flags | -Files*⇓⇑ | +Files*⇓⇑ | Children | Subsets | Parents |
---|