1515import readme_renderer .markdown
1616import readme_renderer .rst
1717import readme_renderer .txt
18+ import simple_repository
1819from 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+
156165async 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