Skip to content

Commit 3a6e4dd

Browse files
committed
tmp fix
1 parent 60d5ccd commit 3a6e4dd

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

pulp_python/app/migrations/0019_create_missing_metadata_artifacts.py

Lines changed: 33 additions & 16 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,39 @@ 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
)
136-
skipped_pkgs = []
138+
skipped_pkgs = 0
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:
142-
filename = package.filename
143-
144145
# Get the main artifact for package
145-
main_artifact = package.contentartifact_set.get().artifact
146+
main_artifact = package._artifacts.get()
146147

148+
filename = package.filename
147149
metadata_digests = {"sha256": package.metadata_sha256}
148-
metadata_artifact, mismatched_sha256 = artifact_to_metadata_artifact(
150+
result = artifact_to_metadata_artifact(
149151
filename, main_artifact, metadata_digests, temp_dir, Artifact
150152
)
151-
if not metadata_artifact:
152-
# Failed to build metadata artifact
153-
skipped_pkgs.append(package.pk)
153+
if result == "extraction_failed":
154+
# Unset metadata_sha256 when metadata extraction fails
155+
package.metadata_sha256 = None
156+
packages_batch.append(package)
157+
skipped_pkgs += 1
154158
continue
159+
if result is None:
160+
# Failed to build metadata artifact (init_and_validate failed)
161+
skipped_pkgs += 1
162+
continue
163+
metadata_artifact, mismatched_sha256 = result
155164
if mismatched_sha256:
156165
# Fix the package if its metadata_sha256 differs from the actual value
157166
package.metadata_sha256 = mismatched_sha256
158-
package.save()
167+
packages_batch.append(package)
159168

160169
contentartifact = ContentArtifact(
161170
artifact=metadata_artifact,
@@ -170,14 +179,22 @@ def create_missing_metadata_artifacts(apps, schema_editor):
170179
ContentArtifact.objects.bulk_create(contentartifact_batch, batch_size=BATCH_SIZE)
171180
artifact_batch.clear()
172181
contentartifact_batch.clear()
182+
if len(packages_batch) == BATCH_SIZE:
183+
PythonPackageContent.objects.bulk_update(
184+
packages_batch, ["metadata_sha256"], batch_size=BATCH_SIZE
185+
)
186+
packages_batch.clear()
173187

174188
if artifact_batch:
175189
Artifact.objects.bulk_create(artifact_batch, batch_size=BATCH_SIZE)
176190
ContentArtifact.objects.bulk_create(contentartifact_batch, batch_size=BATCH_SIZE)
191+
if packages_batch:
192+
PythonPackageContent.objects.bulk_update(
193+
packages_batch, ["metadata_sha256"], batch_size=BATCH_SIZE
194+
)
177195

178-
print(
179-
f"Skipped creation of missing metadata artifacts for the following packages: {skipped_pkgs}"
180-
)
196+
if skipped_pkgs > 0:
197+
print(f"Skipped creation of missing metadata artifacts for {skipped_pkgs} packages")
181198

182199

183200
class Migration(migrations.Migration):

0 commit comments

Comments
 (0)