@@ -938,14 +938,14 @@ def assemble(cls, package_data, resource, codebase, package_adder=add_to_package
938
938
if not package .license_expression :
939
939
package .license_expression = cls .compute_normalized_license (package )
940
940
941
+ yield package
942
+
941
943
cls .assign_package_to_resources (
942
944
package = package ,
943
945
resource = resource ,
944
946
codebase = codebase ,
945
947
package_adder = package_adder ,
946
948
)
947
-
948
- yield package
949
949
else :
950
950
# we have no package, so deps are not for a specific package uid
951
951
package_uid = None
@@ -1047,6 +1047,12 @@ def assemble_from_many(cls, pkgdata_resources, codebase, package_adder=add_to_pa
1047
1047
1048
1048
# process each package in sequence. The first item creates a package and
1049
1049
# the other only update
1050
+ # We are saving the Packages, Dependencies, and Resources in lists until
1051
+ # after we go through `pkgdata_resources` for all Package data, then we
1052
+ # yield Packages, then Dependencies, then Resources.
1053
+ dependencies = []
1054
+ resources = []
1055
+ resources_from_package = []
1050
1056
for package_data , resource in pkgdata_resources :
1051
1057
if not base_resource :
1052
1058
base_resource = resource
@@ -1059,8 +1065,6 @@ def assemble_from_many(cls, pkgdata_resources, codebase, package_adder=add_to_pa
1059
1065
datafile_path = resource .path ,
1060
1066
)
1061
1067
package_uid = package .package_uid
1062
- if package_uid :
1063
- package_adder (package_uid , resource , codebase )
1064
1068
else :
1065
1069
# FIXME: What is the package_data is NOT for the same package as package?
1066
1070
# FIXME: What if the update did not do anything? (it does return True or False)
@@ -1069,31 +1073,40 @@ def assemble_from_many(cls, pkgdata_resources, codebase, package_adder=add_to_pa
1069
1073
package_data = package_data ,
1070
1074
datafile_path = resource .path ,
1071
1075
)
1072
- if package_uid :
1073
- package_adder (package_uid , resource , codebase )
1076
+
1077
+ if package_uid :
1078
+ resources_from_package .append ((package_uid , resource ,))
1074
1079
1075
1080
# in all cases yield possible dependencies
1076
1081
dependent_packages = package_data .dependencies
1077
1082
if dependent_packages :
1078
- yield from Dependency .from_dependent_packages (
1083
+ p_deps = Dependency .from_dependent_packages (
1079
1084
dependent_packages = dependent_packages ,
1080
1085
datafile_path = resource .path ,
1081
1086
datasource_id = package_data .datasource_id ,
1082
1087
package_uid = package_uid ,
1083
1088
)
1089
+ dependencies .extend (list (p_deps ))
1084
1090
1085
1091
# we yield this as we do not want this further processed
1086
- yield resource
1087
-
1088
- # the whole parent subtree of the base_resource is for this package
1089
- if package_uid :
1090
- for res in base_resource .walk (codebase ):
1091
- package_adder (package_uid , res , codebase )
1092
+ resources .append (resource )
1092
1093
1094
+ # Yield Packages, Dependencies, and Resources
1093
1095
if package :
1094
1096
if not package .license_expression :
1095
1097
package .license_expression = cls .compute_normalized_license (package )
1096
1098
yield package
1099
+ yield from dependencies
1100
+ yield from resources
1101
+
1102
+ # Associate Package to Resources once they have been yielded
1103
+ for package_uid , resource in resources_from_package :
1104
+ package_adder (package_uid , resource , codebase )
1105
+
1106
+ # the whole parent subtree of the base_resource is for this package
1107
+ if package_uid :
1108
+ for res in base_resource .walk (codebase ):
1109
+ package_adder (package_uid , res , codebase )
1097
1110
1098
1111
@classmethod
1099
1112
def assemble_from_many_datafiles (
0 commit comments