Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/galaxy/tool_util/deps/resolvers/brewed_tool_shed_packages.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 """ | |
2 This dependency resolver resolves tool shed dependencies (those defined | |
3 tool_dependencies.xml) installed using Platform Homebrew and converted | |
4 via shed2tap (e.g. https://github.com/jmchilton/homebrew-toolshed). | |
5 """ | |
6 import logging | |
7 import os | |
8 | |
9 from galaxy.util import parse_xml | |
10 from . import ( | |
11 DependencyResolver, | |
12 NullDependency | |
13 ) | |
14 from .resolver_mixins import ( | |
15 UsesHomebrewMixin, | |
16 UsesInstalledRepositoriesMixin, | |
17 UsesToolDependencyDirMixin, | |
18 ) | |
19 | |
20 log = logging.getLogger(__name__) | |
21 | |
22 | |
23 class HomebrewToolShedDependencyResolver( | |
24 DependencyResolver, | |
25 UsesHomebrewMixin, | |
26 UsesToolDependencyDirMixin, | |
27 UsesInstalledRepositoriesMixin, | |
28 ): | |
29 resolver_type = "tool_shed_tap" | |
30 | |
31 def __init__(self, dependency_manager, **kwds): | |
32 self._init_homebrew(**kwds) | |
33 self._init_base_path(dependency_manager, **kwds) | |
34 | |
35 def resolve(self, requirement, **kwds): | |
36 name, version, type = requirement.name, requirement.version, requirement.type | |
37 if type != "package": | |
38 return NullDependency(version=version, name=name) | |
39 if version is None: | |
40 return NullDependency(version=version, name=name) | |
41 | |
42 return self._find_tool_dependencies(name, version, type, **kwds) | |
43 | |
44 def _find_tool_dependencies(self, name, version, type, **kwds): | |
45 installed_tool_dependency = self._get_installed_dependency(name, type, version=version, **kwds) | |
46 if installed_tool_dependency: | |
47 return self._resolve_from_installed_tool_dependency(name, version, installed_tool_dependency) | |
48 | |
49 if "tool_dir" in kwds: | |
50 tool_directory = os.path.abspath(kwds["tool_dir"]) | |
51 tool_depenedencies_path = os.path.join(tool_directory, "tool_dependencies.xml") | |
52 if os.path.exists(tool_depenedencies_path): | |
53 return self._resolve_from_tool_dependencies_path(name, version, tool_depenedencies_path) | |
54 | |
55 return NullDependency(version=version, name=name) | |
56 | |
57 def _resolve_from_installed_tool_dependency(self, name, version, installed_tool_dependency): | |
58 tool_shed_repository = installed_tool_dependency.tool_shed_repository | |
59 recipe_name = build_recipe_name( | |
60 package_name=name, | |
61 package_version=version, | |
62 repository_owner=tool_shed_repository.owner, | |
63 repository_name=tool_shed_repository.name, | |
64 ) | |
65 return self._find_dep_default(recipe_name, None) | |
66 | |
67 def _resolve_from_tool_dependencies_path(self, name, version, tool_dependencies_path): | |
68 try: | |
69 raw_dependencies = RawDependencies(tool_dependencies_path) | |
70 except Exception: | |
71 log.debug("Failed to parse dependencies in file %s" % tool_dependencies_path) | |
72 return NullDependency(version=version, name=name) | |
73 | |
74 raw_dependency = raw_dependencies.find(name, version) | |
75 if not raw_dependency: | |
76 return NullDependency(version=version, name=name) | |
77 | |
78 recipe_name = build_recipe_name( | |
79 package_name=name, | |
80 package_version=version, | |
81 repository_owner=raw_dependency.repository_owner, | |
82 repository_name=raw_dependency.repository_name | |
83 ) | |
84 dep = self._find_dep_default(recipe_name, None) | |
85 return dep | |
86 | |
87 | |
88 class RawDependencies: | |
89 | |
90 def __init__(self, dependencies_file): | |
91 self.root = parse_xml(dependencies_file).getroot() | |
92 dependencies = [] | |
93 package_els = self.root.findall("package") or [] | |
94 for package_el in package_els: | |
95 repository_el = package_el.find("repository") | |
96 if repository_el is None: | |
97 continue | |
98 dependency = RawDependency(self, package_el, repository_el) | |
99 dependencies.append(dependency) | |
100 self.dependencies = dependencies | |
101 | |
102 def find(self, package_name, package_version): | |
103 target_dependency = None | |
104 | |
105 for dependency in self.dependencies: | |
106 if dependency.package_name == package_name and dependency.package_version == package_version: | |
107 target_dependency = dependency | |
108 break | |
109 return target_dependency | |
110 | |
111 | |
112 class RawDependency: | |
113 | |
114 def __init__(self, dependencies, package_el, repository_el): | |
115 self.dependencies = dependencies | |
116 self.package_el = package_el | |
117 self.repository_el = repository_el | |
118 | |
119 def __repr__(self): | |
120 temp = "Dependency[package_name=%s,version=%s,dependent_package=%s]" | |
121 return temp % ( | |
122 self.package_el.attrib["name"], | |
123 self.package_el.attrib["version"], | |
124 self.repository_el.attrib["name"] | |
125 ) | |
126 | |
127 @property | |
128 def repository_owner(self): | |
129 return self.repository_el.attrib["owner"] | |
130 | |
131 @property | |
132 def repository_name(self): | |
133 return self.repository_el.attrib["name"] | |
134 | |
135 @property | |
136 def package_name(self): | |
137 return self.package_el.attrib["name"] | |
138 | |
139 @property | |
140 def package_version(self): | |
141 return self.package_el.attrib["version"] | |
142 | |
143 | |
144 def build_recipe_name(package_name, package_version, repository_owner, repository_name): | |
145 # TODO: Consider baking package_name and package_version into name? (would be more "correct") | |
146 owner = repository_owner.replace("-", "") | |
147 name = repository_name | |
148 name = name.replace("_", "").replace("-", "") | |
149 base = f"{owner}_{name}" | |
150 return base | |
151 | |
152 | |
153 __all__ = ('HomebrewToolShedDependencyResolver', ) |