Skip to content

Commit 464d142

Browse files
committed
tmp fix
1 parent 60d5ccd commit 464d142

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

pulp_python/app/migrations/0019_create_missing_metadata_artifacts.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def init_and_validate(file, artifact_model, expected_digests):
6868
def extract_wheel_metadata(filename):
6969
"""
7070
Extract the metadata file content from a wheel file.
71-
Returns the raw metadata content as bytes or None if metadata cannot be extracted.
71+
Return the raw metadata content as bytes or None if metadata cannot be extracted.
7272
"""
7373
import zipfile
7474

@@ -84,7 +84,9 @@ def extract_wheel_metadata(filename):
8484

8585
def artifact_to_metadata_artifact(filename, artifact, md_digests, tmp_dir, artifact_model):
8686
"""
87-
Creates artifact for metadata from the provided wheel artifact.
87+
Create artifact for metadata from the provided wheel artifact.
88+
Return (artifact, mismatched_sha256) on success, "extraction_failed" when metadata extraction
89+
fails, or None on init_and_validate failure.
8890
"""
8991
import shutil
9092
import tempfile
@@ -97,7 +99,7 @@ def artifact_to_metadata_artifact(filename, artifact, md_digests, tmp_dir, artif
9799

98100
metadata_content = extract_wheel_metadata(temp_wheel_path)
99101
if not metadata_content:
100-
return None
102+
return "extraction_failed"
101103

102104
with tempfile.NamedTemporaryFile(
103105
"wb", dir=tmp_dir, suffix=".metadata", delete=False
@@ -130,32 +132,40 @@ def create_missing_metadata_artifacts(apps, schema_editor):
130132
contentartifact__relative_path=models.F("filename"),
131133
)
132134
.exclude(metadata_sha256="")
133-
.prefetch_related("contentartifact_set")
135+
.prefetch_related("_artifacts")
134136
.only("filename", "metadata_sha256")
135137
)
136138
skipped_pkgs = []
137139
artifact_batch = []
138140
contentartifact_batch = []
141+
packages_batch = []
139142

140143
with tempfile.TemporaryDirectory(dir=settings.WORKING_DIRECTORY) as temp_dir:
141144
for package in packages:
142145
filename = package.filename
143146

144147
# Get the main artifact for package
145-
main_artifact = package.contentartifact_set.get().artifact
148+
main_artifact = package._artifacts.get()
146149

147150
metadata_digests = {"sha256": package.metadata_sha256}
148-
metadata_artifact, mismatched_sha256 = artifact_to_metadata_artifact(
151+
result = artifact_to_metadata_artifact(
149152
filename, main_artifact, metadata_digests, temp_dir, Artifact
150153
)
151-
if not metadata_artifact:
152-
# Failed to build metadata artifact
154+
if result == "extraction_failed":
155+
# Unset metadata_sha256 when metadata extraction fails
156+
package.metadata_sha256 = None
157+
packages_batch.append(package)
158+
skipped_pkgs.append(package.pk)
159+
continue
160+
if result is None:
161+
# Failed to build metadata artifact (init_and_validate failed)
153162
skipped_pkgs.append(package.pk)
154163
continue
164+
metadata_artifact, mismatched_sha256 = result
155165
if mismatched_sha256:
156166
# Fix the package if its metadata_sha256 differs from the actual value
157167
package.metadata_sha256 = mismatched_sha256
158-
package.save()
168+
packages_batch.append(package)
159169

160170
contentartifact = ContentArtifact(
161171
artifact=metadata_artifact,
@@ -170,14 +180,24 @@ def create_missing_metadata_artifacts(apps, schema_editor):
170180
ContentArtifact.objects.bulk_create(contentartifact_batch, batch_size=BATCH_SIZE)
171181
artifact_batch.clear()
172182
contentartifact_batch.clear()
183+
if len(packages_batch) == BATCH_SIZE:
184+
PythonPackageContent.objects.bulk_update(
185+
packages_batch, ["metadata_sha256"], batch_size=BATCH_SIZE
186+
)
187+
packages_batch.clear()
173188

174189
if artifact_batch:
175190
Artifact.objects.bulk_create(artifact_batch, batch_size=BATCH_SIZE)
176191
ContentArtifact.objects.bulk_create(contentartifact_batch, batch_size=BATCH_SIZE)
192+
if packages_batch:
193+
PythonPackageContent.objects.bulk_update(
194+
packages_batch, ["metadata_sha256"], batch_size=BATCH_SIZE
195+
)
177196

178-
print(
179-
f"Skipped creation of missing metadata artifacts for the following packages: {skipped_pkgs}"
180-
)
197+
if skipped_pkgs:
198+
print(
199+
f"Skipped creation of missing metadata artifacts for the following packages: {skipped_pkgs}"
200+
)
181201

182202

183203
class Migration(migrations.Migration):

0 commit comments

Comments
 (0)