def get(self, request, *args, **kwargs): recipe, error = XhrCustomRecipeId._get_ci_recipe(kwargs['recipe_id']) if error: return error # If no package_id then list all the current packages if not kwargs['package_id']: total_size = 0 packages = recipe.get_all_packages().values( "id", "name", "version", "size") for package in packages: package['size_formatted'] = \ filtered_filesizeformat(package['size']) total_size += package['size'] return JsonResponse({ "error": "ok", "packages": list(packages), "total": len(packages), "total_size": total_size, "total_size_formatted": filtered_filesizeformat(total_size) }) else: package, error = XhrCustomRecipePackages._get_package( kwargs['package_id']) if error: return error all_current_packages = recipe.get_all_packages() # Dependencies for package which aren't satisfied by the # current packages in the custom image recipe deps = package.package_dependencies_source.for_target_or_none( recipe.name)['packages'].annotate( name=F('depends_on__name'), pk=F('depends_on__pk'), size=F('depends_on__size'), ).values("name", "pk", "size").filter( # There are two depends types we don't know why (Q(dep_type=Package_Dependency.TYPE_TRDEPENDS) | Q(dep_type=Package_Dependency.TYPE_RDEPENDS)) & ~Q(pk__in=all_current_packages)) # Reverse dependencies which are needed by packages that are # in the image. Recursive search providing all dependents, # not just immediate dependents. reverse_deps = self._get_all_dependents(kwargs['package_id'], all_current_packages) total_size_deps = 0 total_size_reverse_deps = 0 for dep in deps: dep['size_formatted'] = \ filtered_filesizeformat(dep['size']) total_size_deps += dep['size'] for dep in reverse_deps: dep['size_formatted'] = \ filtered_filesizeformat(dep['size']) total_size_reverse_deps += dep['size'] return JsonResponse({ "error": "ok", "id": package.pk, "name": package.name, "version": package.version, "unsatisfied_dependencies": list(deps), "unsatisfied_dependencies_size": total_size_deps, "unsatisfied_dependencies_size_formatted": filtered_filesizeformat(total_size_deps), "reverse_dependencies": list(reverse_deps), "reverse_dependencies_size": total_size_reverse_deps, "reverse_dependencies_size_formatted": filtered_filesizeformat(total_size_reverse_deps) })
def get(self, request, *args, **kwargs): recipe, error = XhrCustomRecipeId._get_ci_recipe( kwargs['recipe_id']) if error: return error # If no package_id then list all the current packages if not kwargs['package_id']: total_size = 0 packages = recipe.get_all_packages().values("id", "name", "version", "size") for package in packages: package['size_formatted'] = \ filtered_filesizeformat(package['size']) total_size += package['size'] return JsonResponse({"error": "ok", "packages": list(packages), "total": len(packages), "total_size": total_size, "total_size_formatted": filtered_filesizeformat(total_size)}) else: package, error = XhrCustomRecipePackages._get_package( kwargs['package_id']) if error: return error all_current_packages = recipe.get_all_packages() # Dependencies for package which aren't satisfied by the # current packages in the custom image recipe deps = package.package_dependencies_source.for_target_or_none( recipe.name)['packages'].annotate( name=F('depends_on__name'), pk=F('depends_on__pk'), size=F('depends_on__size'), ).values("name", "pk", "size").filter( # There are two depends types we don't know why (Q(dep_type=Package_Dependency.TYPE_TRDEPENDS) | Q(dep_type=Package_Dependency.TYPE_RDEPENDS)) & ~Q(pk__in=all_current_packages) ) # Reverse dependencies which are needed by packages that are # in the image. Recursive search providing all dependents, # not just immediate dependents. reverse_deps = self._get_all_dependents(kwargs['package_id'], all_current_packages) total_size_deps = 0 total_size_reverse_deps = 0 for dep in deps: dep['size_formatted'] = \ filtered_filesizeformat(dep['size']) total_size_deps += dep['size'] for dep in reverse_deps: dep['size_formatted'] = \ filtered_filesizeformat(dep['size']) total_size_reverse_deps += dep['size'] return JsonResponse( {"error": "ok", "id": package.pk, "name": package.name, "version": package.version, "unsatisfied_dependencies": list(deps), "unsatisfied_dependencies_size": total_size_deps, "unsatisfied_dependencies_size_formatted": filtered_filesizeformat(total_size_deps), "reverse_dependencies": list(reverse_deps), "reverse_dependencies_size": total_size_reverse_deps, "reverse_dependencies_size_formatted": filtered_filesizeformat(total_size_reverse_deps)})