def compose__import_images(request, release_id, composeinfo, image_manifest): release_obj = release_models.Release.objects.get(release_id=release_id) ci = common_hacks.composeinfo_from_str(composeinfo) im = common_hacks.images_from_str(image_manifest) compose_date = "%s-%s-%s" % (ci.compose.date[:4], ci.compose.date[4:6], ci.compose.date[6:]) compose_type = models.ComposeType.objects.get(name=ci.compose.type) compose_obj, _ = models.Compose.objects.get_or_create( release=release_obj, compose_id=ci.compose.id, compose_date=compose_date, compose_type=compose_type, compose_respin=ci.compose.respin, compose_label=ci.compose.label or None, ) for variant in ci.get_variants(recursive=True): _link_compose_to_integrated_product(compose_obj, variant) variant_type = release_models.VariantType.objects.get(name=variant.type) variant_obj, _ = models.Variant.objects.get_or_create( compose=compose_obj, variant_id=variant.id, variant_uid=variant.uid, variant_name=variant.name, variant_type=variant_type ) for arch in variant.arches: arch_obj = common_models.Arch.objects.get(name=arch) var_arch_obj, created = models.VariantArch.objects.get_or_create(arch=arch_obj, variant=variant_obj) for i in im.images.get(variant.uid, {}).get(arch, []): # TODO: handle properly try: image = package_models.Image.objects.get(file_name=os.path.basename(i.path), sha256=i.checksums["sha256"]) except package_models.Image.DoesNotExist: image = package_models.Image() image.file_name = os.path.basename(i.path) image.image_format_id = package_models.ImageFormat.get_cached_id(i.format) image.image_type_id = package_models.ImageType.get_cached_id(i.type) image.disc_number = i.disc_number image.disc_count = i.disc_count image.arch = i.arch image.mtime = i.mtime image.size = i.size image.bootable = i.bootable image.implant_md5 = i.implant_md5 image.volume_id = i.volume_id image.md5 = i.checksums.get("md5", None) image.sha1 = i.checksums.get("sha1", None) image.sha256 = i.checksums.get("sha256", None) image.save() # TODO: path to ComposeImage mi, created = models.ComposeImage.objects.get_or_create( variant_arch=var_arch_obj, image=image)
def compose__import_images(request, release_id, composeinfo, image_manifest): release_obj = release_models.Release.objects.get(release_id=release_id) ci = common_hacks.composeinfo_from_str(composeinfo) im = common_hacks.images_from_str(image_manifest) compose_date = "%s-%s-%s" % (ci.compose.date[:4], ci.compose.date[4:6], ci.compose.date[6:]) compose_type = models.ComposeType.objects.get(name=ci.compose.type) compose_obj, created = lib._logged_get_or_create( request, models.Compose, release=release_obj, compose_id=ci.compose.id, compose_date=compose_date, compose_type=compose_type, compose_respin=ci.compose.respin, compose_label=ci.compose.label or None, ) if created and hasattr(request._request, '_messagings'): # add message _add_compose_create_msg(request, compose_obj) add_to_changelog = [] imported_images = 0 for variant in ci.get_variants(recursive=True): _link_compose_to_integrated_product(request, compose_obj, variant) variant_type = release_models.VariantType.objects.get(name=variant.type) variant_obj, created = models.Variant.objects.get_or_create( compose=compose_obj, variant_id=variant.id, variant_uid=variant.uid, variant_name=variant.name, variant_type=variant_type ) if created: add_to_changelog.append(variant_obj) for arch in variant.arches: arch_obj = common_models.Arch.objects.get(name=arch) var_arch_obj, created = models.VariantArch.objects.get_or_create(arch=arch_obj, variant=variant_obj) for i in im.images.get(variant.uid, {}).get(arch, []): path, file_name = os.path.split(i.path) path_id = models.Path.get_cached_id(path, create=True) image, _ = package_models.Image.objects.get_or_create( file_name=file_name, sha256=i.checksums["sha256"], defaults={ 'image_format_id': package_models.ImageFormat.get_cached_id(i.format), 'image_type_id': package_models.ImageType.get_cached_id(i.type), 'disc_number': i.disc_number, 'disc_count': i.disc_count, 'arch': i.arch, 'mtime': i.mtime, 'size': i.size, 'bootable': i.bootable, 'implant_md5': i.implant_md5, 'volume_id': i.volume_id, 'md5': i.checksums.get("md5", None), 'sha1': i.checksums.get("sha1", None), } ) mi, created = models.ComposeImage.objects.get_or_create( variant_arch=var_arch_obj, image=image, path_id=path_id) imported_images += 1 for obj in add_to_changelog: lib._maybe_log(request, True, obj) request.changeset.add('notice', 0, 'null', json.dumps({ 'compose': compose_obj.compose_id, 'num_linked_images': imported_images, }))