Skip to content

Commit 65a9b8c

Browse files
committed
Allow packages through which cause metadata injector to raise (e.g. /browse/project/distance/0.1.3/files)
1 parent 8c8b21d commit 65a9b8c

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

simple_repository_browser/fetch_description.py

Lines changed: 19 additions & 9 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,6 +155,13 @@ 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,
@@ -163,21 +172,22 @@ async def _fetch_metadata_resource(
163172
if not file.dist_info_metadata:
164173
# No metadata available for this file type (e.g., .egg files)
165174
# Return a minimal distribution object with basic info
166-
class MinimalDistribution(pkginfo.Distribution):
167-
def __init__(self, name: str, filename: str):
168-
super().__init__() # Get all the default None values
169-
self.name = name
170-
ext = filename.split(".")[-1] if "." in filename else "unknown"
171-
self.summary = f"Legacy package format ({ext}) - metadata not available"
172-
173-
minimal_dist = MinimalDistribution(project_name, file.filename)
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)
174178
return file, minimal_dist
175179

176180
resource_name = file.filename + ".metadata"
177181

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

180-
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
181191

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

0 commit comments

Comments
 (0)