comparison env/lib/python3.9/site-packages/galaxy/tool_util/deps/dependencies.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 from galaxy.tool_util.deps.requirements import ToolRequirements
2 from galaxy.util import bunch
3 from .mulled.mulled_build import DEFAULT_CHANNELS
4
5
6 class AppInfo:
7
8 def __init__(
9 self,
10 galaxy_root_dir=None,
11 default_file_path=None,
12 tool_data_path=None,
13 shed_tool_data_path=None,
14 outputs_to_working_directory=False,
15 container_image_cache_path=None,
16 library_import_dir=None,
17 enable_mulled_containers=False,
18 containers_resolvers_config_file=None,
19 involucro_path=None,
20 involucro_auto_init=True,
21 mulled_channels=DEFAULT_CHANNELS,
22 ):
23 self.galaxy_root_dir = galaxy_root_dir
24 self.default_file_path = default_file_path
25 self.tool_data_path = tool_data_path
26 self.shed_tool_data_path = shed_tool_data_path
27 # TODO: Vary default value for docker_volumes based on this...
28 self.outputs_to_working_directory = outputs_to_working_directory
29 self.container_image_cache_path = container_image_cache_path
30 self.library_import_dir = library_import_dir
31 self.enable_mulled_containers = enable_mulled_containers
32 self.containers_resolvers_config_file = containers_resolvers_config_file
33 self.involucro_path = involucro_path
34 self.involucro_auto_init = involucro_auto_init
35 self.mulled_channels = mulled_channels
36
37
38 class ToolInfo:
39 # TODO: Introduce tool XML syntax to annotate the optional environment
40 # variables they can consume (e.g. JVM options, license keys, etc..)
41 # and add these to env_path_through
42
43 def __init__(self, container_descriptions=None, requirements=None, requires_galaxy_python_environment=False, env_pass_through=None, guest_ports=None, tool_id=None, tool_version=None, profile=-1):
44 if env_pass_through is None:
45 env_pass_through = ["GALAXY_SLOTS"]
46 if container_descriptions is None:
47 container_descriptions = []
48 if requirements is None:
49 requirements = []
50 self.container_descriptions = container_descriptions
51 self.requirements = requirements
52 self.requires_galaxy_python_environment = requires_galaxy_python_environment
53 self.env_pass_through = env_pass_through
54 self.guest_ports = guest_ports
55 self.tool_id = tool_id
56 self.tool_version = tool_version
57 self.profile = profile
58
59
60 class JobInfo:
61
62 def __init__(
63 self, working_directory, tool_directory, job_directory, tmp_directory, home_directory, job_directory_type,
64 ):
65 self.working_directory = working_directory
66 # Tool files may be remote staged - so this is unintuitively a property
67 # of the job not of the tool.
68 self.tool_directory = tool_directory
69 self.job_directory = job_directory
70 self.tmp_directory = tmp_directory
71 self.home_directory = home_directory
72 self.job_directory_type = job_directory_type # "galaxy" or "pulsar"
73
74
75 class DependenciesDescription:
76 """ Capture (in a readily serializable way) context related a tool
77 dependencies - both the tool's listed requirements and the tool shed
78 related context required to resolve dependencies via the
79 ToolShedPackageDependencyResolver.
80
81 This is meant to enable remote resolution of dependencies, by the Pulsar or
82 other potential remote execution mechanisms.
83 """
84
85 def __init__(self, requirements=None, installed_tool_dependencies=None):
86 requirements = requirements or ToolRequirements()
87 if installed_tool_dependencies is None:
88 installed_tool_dependencies = []
89 self.requirements = requirements
90 # tool shed installed tool dependencies...
91 self.installed_tool_dependencies = installed_tool_dependencies
92
93 def to_dict(self):
94 return dict(
95 requirements=[r.to_dict() for r in self.requirements],
96 installed_tool_dependencies=[DependenciesDescription._toolshed_install_dependency_to_dict(d) for d in self.installed_tool_dependencies]
97 )
98
99 @staticmethod
100 def from_dict(as_dict):
101 if as_dict is None:
102 return None
103
104 requirements_dicts = as_dict.get('requirements', [])
105 requirements = ToolRequirements.from_list(requirements_dicts)
106 installed_tool_dependencies_dicts = as_dict.get('installed_tool_dependencies', [])
107 installed_tool_dependencies = list(map(DependenciesDescription._toolshed_install_dependency_from_dict, installed_tool_dependencies_dicts))
108 return DependenciesDescription(
109 requirements=requirements,
110 installed_tool_dependencies=installed_tool_dependencies
111 )
112
113 @staticmethod
114 def _toolshed_install_dependency_from_dict(as_dict):
115 # Rather than requiring full models in Pulsar, just use simple objects
116 # containing only properties and associations used to resolve
117 # dependencies for tool execution.
118 repository_object = bunch.Bunch(
119 name=as_dict['repository_name'],
120 owner=as_dict['repository_owner'],
121 installed_changeset_revision=as_dict['repository_installed_changeset'],
122 )
123 dependency_object = bunch.Bunch(
124 name=as_dict['dependency_name'],
125 version=as_dict['dependency_version'],
126 type=as_dict['dependency_type'],
127 tool_shed_repository=repository_object,
128 )
129 return dependency_object
130
131 @staticmethod
132 def _toolshed_install_dependency_to_dict(tool_dependency):
133 tool_shed_repository = tool_dependency.tool_shed_repository
134 return dict(
135 dependency_name=tool_dependency.name,
136 dependency_version=tool_dependency.version,
137 dependency_type=tool_dependency.type,
138 repository_name=tool_shed_repository.name,
139 repository_owner=tool_shed_repository.owner,
140 repository_installed_changeset=tool_shed_repository.installed_changeset_revision,
141 )