Source code for galaxy.tools.toolbox.tags
""" Handle details of tool tagging - perhaps a deprecated feature.
"""
import logging
from abc import (
ABCMeta,
abstractmethod
)
import six
log = logging.getLogger(__name__)
[docs]def tool_tag_manager(app):
""" Build a tool tag manager according to app's configuration
and return it.
"""
if hasattr(app.config, "get_bool") and app.config.get_bool('enable_tool_tags', False):
return PersistentToolTagManager(app)
else:
return NullToolTagManager()
[docs]@six.add_metaclass(ABCMeta)
class AbstractToolTagManager(object):
[docs] @abstractmethod
def handle_tags(self, tool_id, tool_definition_source):
""" Parse out tags and persist them.
"""
[docs]class PersistentToolTagManager(AbstractToolTagManager):
def __init__(self, app):
self.app = app
self.sa_session = app.model.context
[docs] def reset_tags(self):
log.info("removing all tool tag associations (" + str(self.sa_session.query(self.app.model.ToolTagAssociation).count()) + ")")
self.sa_session.query(self.app.model.ToolTagAssociation).delete()
self.sa_session.flush()
[docs] def handle_tags(self, tool_id, tool_definition_source):
elem = tool_definition_source
if self.app.config.get_bool('enable_tool_tags', False):
tag_names = elem.get("tags", "").split(",")
for tag_name in tag_names:
if tag_name == '':
continue
tag = self.sa_session.query(self.app.model.Tag).filter_by(name=tag_name).first()
if not tag:
tag = self.app.model.Tag(name=tag_name)
self.sa_session.add(tag)
self.sa_session.flush()
tta = self.app.model.ToolTagAssociation(tool_id=tool_id, tag_id=tag.id)
self.sa_session.add(tta)
self.sa_session.flush()
else:
for tagged_tool in tag.tagged_tools:
if tagged_tool.tool_id == tool_id:
break
else:
tta = self.app.model.ToolTagAssociation(tool_id=tool_id, tag_id=tag.id)
self.sa_session.add(tta)
self.sa_session.flush()