Skip to content

Commit 4f65636

Browse files
authored
Merge pull request #21 from simple-repository/feature/egg-handling
Handle error scenarios for metadata extraction
2 parents 4515e98 + 65a9b8c commit 4f65636

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

simple_repository_browser/fetch_description.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import readme_renderer.markdown
1616
import readme_renderer.rst
1717
import readme_renderer.txt
18+
import simple_repository
1819
from simple_repository import SimpleRepository, model
20+
import simple_repository.errors
1921

2022

2123
@dataclasses.dataclass
@@ -153,21 +155,39 @@ def _create_files_info_mapping(
153155
return files_info
154156

155157

158+
class MinimalDistribution(pkginfo.Distribution):
159+
def __init__(self, name: str, summary: str):
160+
super().__init__() # Get all the default None values
161+
self.name = name
162+
self.summary = summary
163+
164+
156165
async def _fetch_metadata_resource(
157166
repository: SimpleRepository,
158167
project_name: str,
159168
file: model.File,
160169
tmp_file_path: str,
161170
) -> tuple[model.File, pkginfo.Distribution]:
162171
"""Fetch metadata resource and return updated file and package info."""
163-
if file.dist_info_metadata:
164-
resource_name = file.filename + ".metadata"
165-
else:
166-
raise ValueError(f"Metadata not available for {file}")
172+
if not file.dist_info_metadata:
173+
# No metadata available for this file type (e.g., .egg files)
174+
# Return a minimal distribution object with basic info
175+
ext = file.filename.rsplit(".", 1)[-1]
176+
reason = f"Legacy package format ({ext}) - metadata not available"
177+
minimal_dist = MinimalDistribution(project_name, summary=reason)
178+
return file, minimal_dist
179+
180+
resource_name = file.filename + ".metadata"
167181

168182
logging.debug(f"Downloading metadata for {file.filename} from {resource_name}")
169183

170-
resource = await repository.get_resource(project_name, resource_name)
184+
try:
185+
resource = await repository.get_resource(project_name, resource_name)
186+
except simple_repository.errors.ResourceUnavailable as err:
187+
reason = f"Unable to retrieve metadata for {file.filename} ({err})"
188+
minimal_dist = MinimalDistribution(project_name, summary=reason)
189+
logging.exception(reason)
190+
return file, minimal_dist
171191

172192
if isinstance(resource, model.TextResource):
173193
with open(tmp_file_path, "wb") as tmp:

0 commit comments

Comments
 (0)