15
15
import readme_renderer .markdown
16
16
import readme_renderer .rst
17
17
import readme_renderer .txt
18
+ import simple_repository
18
19
from simple_repository import SimpleRepository , model
20
+ import simple_repository .errors
19
21
20
22
21
23
@dataclasses .dataclass
@@ -153,6 +155,13 @@ def _create_files_info_mapping(
153
155
return files_info
154
156
155
157
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
+
156
165
async def _fetch_metadata_resource (
157
166
repository : SimpleRepository ,
158
167
project_name : str ,
@@ -163,21 +172,22 @@ async def _fetch_metadata_resource(
163
172
if not file .dist_info_metadata :
164
173
# No metadata available for this file type (e.g., .egg files)
165
174
# 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 )
174
178
return file , minimal_dist
175
179
176
180
resource_name = file .filename + ".metadata"
177
181
178
182
logging .debug (f"Downloading metadata for { file .filename } from { resource_name } " )
179
183
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
181
191
182
192
if isinstance (resource , model .TextResource ):
183
193
with open (tmp_file_path , "wb" ) as tmp :
0 commit comments