Skip to content

Commit 952bfdc

Browse files
committed
Rewrite metadata extraction function to take in a file object
1 parent 2a40538 commit 952bfdc

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

pulp_python/app/utils.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def parse_metadata(project, version, distribution):
162162
return package
163163

164164

165-
def get_project_metadata_from_artifact(filename, artifact):
165+
def get_project_metadata_from_file(file):
166166
"""
167167
Gets the metadata of a Python Package.
168168
@@ -171,32 +171,33 @@ def get_project_metadata_from_artifact(filename, artifact):
171171
extensions = list(DIST_EXTENSIONS.keys())
172172
# Iterate through extensions since splitext does not support things like .tar.gz
173173
# If no supported extension is found, ValueError is raised here
174-
pkg_type_index = [filename.endswith(ext) for ext in extensions].index(True)
174+
pkg_type_index = [file.name.endswith(ext) for ext in extensions].index(True)
175175
packagetype = DIST_EXTENSIONS[extensions[pkg_type_index]]
176-
# Copy file to a temp directory under the user provided filename, we do this
177-
# because pkginfo validates that the filename has a valid extension before
178-
# reading it
179-
with tempfile.NamedTemporaryFile("wb", dir=".", suffix=filename) as temp_file:
180-
shutil.copyfileobj(artifact.file, temp_file)
181-
temp_file.flush()
182-
metadata = DIST_TYPES[packagetype](temp_file.name)
183-
metadata.packagetype = packagetype
184-
if packagetype == "sdist":
185-
metadata.python_version = "source"
186-
else:
187-
pyver = ""
188-
regex = DIST_REGEXES[extensions[pkg_type_index]]
189-
if bdist_name := regex.match(filename):
190-
pyver = bdist_name.group("pyver") or ""
191-
metadata.python_version = pyver
192-
return metadata
176+
177+
metadata = DIST_TYPES[packagetype](file.name)
178+
metadata.packagetype = packagetype
179+
if packagetype == "sdist":
180+
metadata.python_version = "source"
181+
else:
182+
pyver = ""
183+
regex = DIST_REGEXES[extensions[pkg_type_index]]
184+
if bdist_name := regex.match(file.name):
185+
pyver = bdist_name.group("pyver") or ""
186+
metadata.python_version = pyver
187+
return metadata
193188

194189

195190
def artifact_to_python_content_data(filename, artifact, domain=None):
196191
"""
197192
Takes the artifact/filename and returns the metadata needed to create a PythonPackageContent.
198193
"""
199-
metadata = get_project_metadata_from_artifact(filename, artifact)
194+
# Copy file to a temp directory under the user provided filename, we do this
195+
# because pkginfo validates that the filename has a valid extension before
196+
# reading it
197+
with tempfile.NamedTemporaryFile("wb", dir=".", suffix=filename) as temp_file:
198+
shutil.copyfileobj(artifact.file, temp_file)
199+
temp_file.flush()
200+
metadata = get_project_metadata_from_file(temp_file)
200201
data = parse_project_metadata(vars(metadata))
201202
data["sha256"] = artifact.sha256
202203
data["filename"] = filename

0 commit comments

Comments
 (0)