diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py index f6a69c8a533..dd46b56626d 100644 --- a/lib/galaxy/datatypes/registry.py +++ b/lib/galaxy/datatypes/registry.py @@ -75,6 +75,7 @@ class Registry(object): self.xml_filename = None self._edam_formats_mapping = None self._edam_data_mapping = None + self._converters_by_datatype = {} # Build sites self.build_sites = {} self.display_sites = {} @@ -797,16 +798,18 @@ class Registry(object): def get_converters_by_datatype(self, ext): """Returns available converters by source type""" - converters = odict() - source_datatype = type(self.get_datatype_by_extension(ext)) - for ext2, converters_dict in self.datatype_converters.items(): - converter_datatype = type(self.get_datatype_by_extension(ext2)) - if issubclass(source_datatype, converter_datatype): - converters.update(converters_dict) - # Ensure ext-level converters are present - if ext in self.datatype_converters.keys(): - converters.update(self.datatype_converters[ext]) - return converters + if ext not in self._converters_by_datatype: + converters = odict() + source_datatype = type(self.get_datatype_by_extension(ext)) + for ext2, converters_dict in self.datatype_converters.items(): + converter_datatype = type(self.get_datatype_by_extension(ext2)) + if issubclass(source_datatype, converter_datatype): + converters.update(converters_dict) + # Ensure ext-level converters are present + if ext in self.datatype_converters.keys(): + converters.update(self.datatype_converters[ext]) + self._converters_by_datatype[ext] = converters + return self._converters_by_datatype[ext] def get_converter_by_target_type(self, source_ext, target_ext): """Returns a converter based on source and target datatypes""" diff --git a/lib/galaxy/work/context.py b/lib/galaxy/work/context.py index 5c35315d07f..02306dbf0e8 100644 --- a/lib/galaxy/work/context.py +++ b/lib/galaxy/work/context.py @@ -22,6 +22,7 @@ class WorkRequestContext(ProvidesAppContext, ProvidesUserContext, ProvidesHistor self.app = app self.security = app.security self.__user = user + self.__user_current_roles = None self.__history = history self.api_inherit_admin = False self.workflow_building_mode = workflow_building_mode @@ -40,6 +41,12 @@ class WorkRequestContext(ProvidesAppContext, ProvidesUserContext, ProvidesHistor """Return the current user if logged in or None.""" return self.__user + def get_current_user_roles(self): + if not self.__user_current_roles: + if self.__user: + self.__user_current_roles = self.__user.all_roles() + return self.__user_current_roles + def set_user(self, user): """Set the current user.""" raise NotImplementedError("Cannot change users from a work request context.")