@@ -63,36 +63,16 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
63
63
)
64
64
65
65
# corresponding metadata JSON does not exist, so handle this meta.yaml
66
- elif package_data . purl :
67
- package = models . Package . from_package_data (
66
+ else :
67
+ yield from cls . assemble_from_meta_yaml_only (
68
68
package_data = package_data ,
69
- datafile_path = resource .path ,
70
- )
71
- package .populate_license_fields ()
72
- yield package
73
-
74
- dependent_packages = package_data .dependencies
75
- if dependent_packages :
76
- yield from models .Dependency .from_dependent_packages (
77
- dependent_packages = dependent_packages ,
78
- datafile_path = resource .path ,
79
- datasource_id = package_data .datasource_id ,
80
- package_uid = package .package_uid ,
81
- )
82
-
83
- CondaMetaYamlHandler .assign_package_to_resources (
84
- package = package ,
85
69
resource = resource ,
86
70
codebase = codebase ,
87
71
package_adder = package_adder ,
88
72
)
89
- yield resource
90
73
91
74
return
92
75
93
- # For a conda metadata JSON, try to find the corresponding meta.yaml and
94
- # assemble a single package out of these if it exists
95
- conda_meta_yaml = cls .find_conda_meta_yaml_resource (resource , codebase )
96
76
if not package_data .purl :
97
77
yield resource
98
78
return
@@ -101,27 +81,12 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
101
81
package_data = package_data ,
102
82
datafile_path = resource .path ,
103
83
)
104
- if conda_meta_yaml :
105
- conda_meta_yaml_package_data , = conda_meta_yaml .package_data
106
- package .update (
107
- package_data = conda_meta_yaml_package_data ,
108
- datafile_path = conda_meta_yaml .path ,
109
- )
110
- cls .assign_package_to_resources (
111
- package = package ,
112
- resource = conda_meta_yaml ,
113
- codebase = codebase ,
114
- package_adder = package_adder ,
115
- )
116
- meta_yaml_package_data = models .PackageData .from_dict (conda_meta_yaml_package_data )
117
- if meta_yaml_package_data .dependencies :
118
- yield from models .Dependency .from_dependent_packages (
119
- dependent_packages = meta_yaml_package_data .dependencies ,
120
- datafile_path = conda_meta_yaml .path ,
121
- datasource_id = meta_yaml_package_data .datasource_id ,
122
- package_uid = package .package_uid ,
123
- )
124
- yield conda_meta_yaml
84
+ yield from cls .get_and_assmeble_from_meta_yaml (
85
+ package = package ,
86
+ resource = resource ,
87
+ codebase = codebase ,
88
+ package_adder = package_adder ,
89
+ )
125
90
126
91
package .populate_license_fields ()
127
92
yield package
@@ -136,8 +101,27 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
136
101
# we yield this as we do not want this further processed
137
102
yield resource
138
103
139
- # Get the file paths present in the metadata JSON and assign them to
140
- # the package created from it
104
+ cls .assign_packages_to_resources_from_metadata_json (
105
+ package = package ,
106
+ package_data = package_data ,
107
+ resource = resource ,
108
+ codebase = codebase ,
109
+ package_adder = package_adder ,
110
+ )
111
+
112
+ @classmethod
113
+ def assign_packages_to_resources_from_metadata_json (
114
+ cls ,
115
+ package ,
116
+ package_data ,
117
+ resource ,
118
+ codebase ,
119
+ package_adder = models .add_to_package ,
120
+ ):
121
+ """
122
+ Get the file paths present in the `package_data` of a metadata JSON `resource`
123
+ and assign them to the `package` created from the manifest.
124
+ """
141
125
extracted_package_dir = package_data .extra_data .get ('extracted_package_dir' )
142
126
files = package_data .extra_data .get ('files' )
143
127
@@ -175,7 +159,7 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
175
159
codebase = codebase ,
176
160
package_adder = package_adder ,
177
161
)
178
-
162
+
179
163
for file_path in files :
180
164
full_file_path = f"{ conda_root_dir .path } /{ file_path } "
181
165
file_resource = codebase .get_resource (path = full_file_path )
@@ -187,6 +171,71 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
187
171
package_adder = package_adder ,
188
172
)
189
173
174
+ @classmethod
175
+ def get_and_assmeble_from_meta_yaml (cls , package , resource , codebase , package_adder = models .add_to_package ):
176
+ """
177
+ For a conda metadata JSON `resource`, try to find the corresponding meta.yaml and
178
+ update the `package` from it. Also yield dependencies present in the meta.yaml,
179
+ and the `resource` to complete assembling from this manifest.
180
+ """
181
+ conda_meta_yaml = cls .find_conda_meta_yaml_resource (resource , codebase )
182
+
183
+ if conda_meta_yaml :
184
+ conda_meta_yaml_package_data , = conda_meta_yaml .package_data
185
+ package .update (
186
+ package_data = conda_meta_yaml_package_data ,
187
+ datafile_path = conda_meta_yaml .path ,
188
+ )
189
+ cls .assign_package_to_resources (
190
+ package = package ,
191
+ resource = conda_meta_yaml ,
192
+ codebase = codebase ,
193
+ package_adder = package_adder ,
194
+ )
195
+ meta_yaml_package_data = models .PackageData .from_dict (conda_meta_yaml_package_data )
196
+ if meta_yaml_package_data .dependencies :
197
+ yield from models .Dependency .from_dependent_packages (
198
+ dependent_packages = meta_yaml_package_data .dependencies ,
199
+ datafile_path = conda_meta_yaml .path ,
200
+ datasource_id = meta_yaml_package_data .datasource_id ,
201
+ package_uid = package .package_uid ,
202
+ )
203
+
204
+ yield conda_meta_yaml
205
+
206
+ @classmethod
207
+ def assemble_from_meta_yaml_only (cls , package_data , resource , codebase , package_adder = models .add_to_package ):
208
+ """
209
+ Assemble and yeild package, dependencies and the meta YAML `resource` from
210
+ it's `package_data`, and also assign resources to the package.
211
+ """
212
+ if not package_data .purl :
213
+ return
214
+
215
+ package = models .Package .from_package_data (
216
+ package_data = package_data ,
217
+ datafile_path = resource .path ,
218
+ )
219
+ package .populate_license_fields ()
220
+ yield package
221
+
222
+ dependent_packages = package_data .dependencies
223
+ if dependent_packages :
224
+ yield from models .Dependency .from_dependent_packages (
225
+ dependent_packages = dependent_packages ,
226
+ datafile_path = resource .path ,
227
+ datasource_id = package_data .datasource_id ,
228
+ package_uid = package .package_uid ,
229
+ )
230
+
231
+ CondaMetaYamlHandler .assign_package_to_resources (
232
+ package = package ,
233
+ resource = resource ,
234
+ codebase = codebase ,
235
+ package_adder = package_adder ,
236
+ )
237
+ yield resource
238
+
190
239
@classmethod
191
240
def check_valid_packages_dir_name (cls , package_dir_resource , resource , codebase ):
192
241
"""
0 commit comments