Skip to content

Commit a9bded1

Browse files
committed
Also store extensions directly alongside the software
1 parent b3ed9e9 commit a9bded1

1 file changed

Lines changed: 59 additions & 36 deletions

File tree

scripts/process_eessi_software_metadata.py

Lines changed: 59 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def get_software_information_by_filename(file_metadata, original_path=None, tool
6565

6666
# 2) Construct the modulefile path
6767
before_arch, _, _ = original_path.partition(detected_arch)
68-
modulefile = before_arch + detected_arch + "/modules/all/" + file_metadata["module"]["full_module_name"] + '.lua'
68+
modulefile = before_arch + detected_arch + "/modules/all/" + file_metadata["module"]["full_module_name"] + ".lua"
6969
spider_cache = before_arch + detected_arch + "/.lmod/cache/spiderT.lua"
7070

7171
# 3) Substitute each architecture and test module file existence in spider cache
@@ -93,60 +93,77 @@ def get_software_information_by_filename(file_metadata, original_path=None, tool
9393
version_dict["versionsuffix"] = file_metadata["versionsuffix"]
9494
# No need for as we separate out the different types
9595
# version_dict['type'] = "application"
96-
software[file_metadata["name"]]["versions"].append(version_dict)
97-
# - Now extensions
96+
# - Now extensions, we keep them both separately for each type and
97+
# as dicts with extension types in the specific installation
98+
version_dict["extensions"] = []
9899
python_extensions = {}
99100
perl_extensions = {}
100101
r_extensions = {}
101102
octave_extensions = {}
102103
ruby_extensions = {}
103104
for ext in file_metadata["exts_list"]:
104-
version_dict = copy.deepcopy(base_version_dict)
105+
ext_version_dict = copy.deepcopy(base_version_dict)
105106
# (extensions are tuples beginning with name and version)
106-
version_dict["version"] = ext[1]
107-
version_dict["versionsuffix"] = ""
107+
ext_version_dict["version"] = ext[1]
108+
ext_version_dict["versionsuffix"] = ""
108109
# Add the parent software name so we can make a set for all versions
109-
version_dict["parent_software"] = {
110+
ext_version_dict["parent_software"] = {
110111
"name": file_metadata["name"],
111112
"version": file_metadata["version"],
112113
"versionsuffix": file_metadata["versionsuffix"],
113114
}
114115
# First we do a heuristic to figure out the type of extension
115116
if "pythonpackage.py" in file_metadata["easyblocks"]:
116-
version_dict["description"] = (
117-
f"""{ext[0]} is a Python package included in the software module for {version_dict['parent_software']['name']}"""
117+
# First add it to our list of extensions for the parent software
118+
version_dict["extensions"].append({"type": "python", "name": ext[0], "version": ext[1]})
119+
120+
# Now create the custom entry
121+
ext_version_dict["description"] = (
122+
f"""{ext[0]} is a Python package included in the software module for {ext_version_dict['parent_software']['name']}"""
118123
)
119124
python_extensions[ext[0]] = {"versions": [], "parent_software": set()}
120-
python_extensions[ext[0]]["versions"].append(version_dict)
121-
python_extensions[ext[0]]["parent_software"].add(version_dict["parent_software"]["name"])
125+
python_extensions[ext[0]]["versions"].append(ext_version_dict)
126+
python_extensions[ext[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
122127
elif "rpackage.py" in file_metadata["easyblocks"]:
123-
version_dict["description"] = (
124-
f"""{ext[0]} is an R package included in the software module for {version_dict['parent_software']['name']}"""
128+
# First add it to our list of extensions for the parent software
129+
version_dict["extensions"].append({"type": "r", "name": ext[0], "version": ext[1]})
130+
131+
ext_version_dict["description"] = (
132+
f"""{ext[0]} is an R package included in the software module for {ext_version_dict['parent_software']['name']}"""
125133
)
126134
r_extensions[ext[0]] = {"versions": [], "parent_software": set()}
127-
r_extensions[ext[0]]["versions"].append(version_dict)
128-
r_extensions[ext[0]]["parent_software"].add(version_dict["parent_software"]["name"])
135+
r_extensions[ext[0]]["versions"].append(ext_version_dict)
136+
r_extensions[ext[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
129137
elif "perlmodule.py" in file_metadata["easyblocks"]:
130-
version_dict["description"] = (
131-
f"""{ext[0]} is a Perl module package included in the software module for {version_dict['parent_software']['name']}"""
138+
# First add it to our list of extensions for the parent software
139+
version_dict["extensions"].append({"type": "perl", "name": ext[0], "version": ext[1]})
140+
141+
ext_version_dict["description"] = (
142+
f"""{ext[0]} is a Perl module package included in the software module for {ext_version_dict['parent_software']['name']}"""
132143
)
133144
perl_extensions[ext[0]] = {"versions": [], "parent_software": set()}
134-
perl_extensions[ext[0]]["versions"].append(version_dict)
135-
perl_extensions[ext[0]]["parent_software"].add(version_dict["parent_software"]["name"])
145+
perl_extensions[ext[0]]["versions"].append(ext_version_dict)
146+
perl_extensions[ext[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
136147
elif "octavepackage.py" in file_metadata["easyblocks"]:
137-
version_dict["description"] = (
138-
f"""{ext[0]} is an Octave package included in the software module for {version_dict['parent_software']['name']}"""
148+
# First add it to our list of extensions for the parent software
149+
version_dict["extensions"].append({"type": "octave", "name": ext[0], "version": ext[1]})
150+
151+
ext_version_dict["description"] = (
152+
f"""{ext[0]} is an Octave package included in the software module for {ext_version_dict['parent_software']['name']}"""
139153
)
140154
octave_extensions[ext[0]] = {"versions": [], "parent_software": set()}
141-
octave_extensions[ext[0]]["versions"].append(version_dict)
142-
octave_extensions[ext[0]]["parent_software"].add(version_dict["parent_software"]["name"])
155+
octave_extensions[ext[0]]["versions"].append(ext_version_dict)
156+
octave_extensions[ext[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
143157
elif "rubygem.py" in file_metadata["easyblocks"]:
144-
version_dict["description"] = (
145-
f"""{ext[0]} is an Ruby gem included in the software module for {version_dict['parent_software']['name']}"""
158+
# First add it to our list of extensions for the parent software
159+
version_dict["extensions"].append({"type": "ruby", "name": ext[0], "version": ext[1]})
160+
161+
ext_version_dict["description"] = (
162+
f"""{ext[0]} is an Ruby gem included in the software module for {ext_version_dict['parent_software']['name']}"""
146163
)
147164
ruby_extensions[ext[0]] = {"versions": [], "parent_software": set()}
148-
ruby_extensions[ext[0]]["versions"].append(version_dict)
149-
ruby_extensions[ext[0]]["parent_software"].add(version_dict["parent_software"]["name"])
165+
ruby_extensions[ext[0]]["versions"].append(ext_version_dict)
166+
ruby_extensions[ext[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
150167
else:
151168
raise ValueError(
152169
f"Only known extension types are R, Python and Perl! Easyblocks used by {original_path} were {file_metadata['easyblocks']}"
@@ -155,24 +172,30 @@ def get_software_information_by_filename(file_metadata, original_path=None, tool
155172
components = {}
156173
if "components" in file_metadata.keys():
157174
for component in file_metadata["components"]:
175+
# First add it to our list of extensions for the parent software
176+
version_dict["extensions"].append({"type": "component", "name": component[0], "version": component[1]})
177+
158178
# extensions are tuples beginning with name and version
159179
if component[0] not in components.keys():
160180
components[component[0]] = {"versions": [], "parent_software": set()}
161-
version_dict = copy.deepcopy(base_version_dict)
162-
version_dict["version"] = component[1]
163-
version_dict["versionsuffix"] = ""
181+
ext_version_dict = copy.deepcopy(base_version_dict)
182+
ext_version_dict["version"] = component[1]
183+
ext_version_dict["versionsuffix"] = ""
164184
# version_dict["type"] = "Component"
165-
version_dict["parent_software"] = {
185+
ext_version_dict["parent_software"] = {
166186
"name": file_metadata["name"],
167187
"version": file_metadata["version"],
168188
"versionsuffix": file_metadata["versionsuffix"],
169189
}
170-
version_dict["description"] = (
171-
f"""{component[0]} is a component included in the software module for {version_dict['parent_software']['name']}"""
190+
ext_version_dict["description"] = (
191+
f"""{component[0]} is a component included in the software module for {ext_version_dict['parent_software']['name']}"""
172192
)
173-
components[component[0]]["versions"].append(version_dict)
174-
components[component[0]]["parent_software"].add(version_dict["parent_software"]["name"])
175-
# print(f"Software: {software}, Python: {python_extensions}, Perl: {perl_extensions}, R: {r_extensions}, Component: {components}")
193+
components[component[0]]["versions"].append(ext_version_dict)
194+
components[component[0]]["parent_software"].add(ext_version_dict["parent_software"]["name"])
195+
196+
# Now that we've processed all the information let's add the entry
197+
software[file_metadata["name"]]["versions"].append(version_dict)
198+
176199
return software, {
177200
"python": python_extensions,
178201
"perl": perl_extensions,

0 commit comments

Comments
 (0)