@@ -210,6 +210,15 @@ def package(pkg):
210210
211211 dependents = list (queries .dependents (db , package ))
212212
213+ query = queries .build_dependencies (db , package )
214+ query = query .options (eagerload ('status_obj' ))
215+ query = query .options (subqueryload ('collection_packages' ))
216+ query = query .options (subqueryload ('collection_packages.links' ))
217+ query = query .options (eagerload ('collection_packages.status_obj' ))
218+ build_dependencies = list (query )
219+
220+ build_dependents = list (queries .build_dependents (db , package ))
221+
213222 return render_template (
214223 'package.html' ,
215224 breadcrumbs = (
@@ -221,8 +230,11 @@ def package(pkg):
221230 dependencies = dependencies ,
222231 dependents = dependents ,
223232 deptree = [(package , gen_deptree (dependencies ))],
224- len_dependencies = len (dependencies ),
225233 dependencies_status_counts = get_status_counts (dependencies ),
234+ build_dependencies = build_dependencies ,
235+ build_dependents = build_dependents ,
236+ build_deptree = [(package , gen_deptree (build_dependencies , run_time = False , build_time = True ))],
237+ build_dependencies_status_counts = get_status_counts (build_dependencies ),
226238 )
227239
228240
@@ -258,21 +270,24 @@ def group(grp):
258270 grp = group ,
259271 packages = packages ,
260272 len_packages = len (packages ),
261- deptree = list (gen_deptree (seed_groups )),
273+ deptree = list (gen_deptree (seed_groups , run_time = True , build_time = True )),
262274 status_counts = get_status_counts (packages ),
263275 )
264276
265277
266- def gen_deptree (base , * , seen = None ):
278+ def gen_deptree (base , * , seen = None , run_time = True , build_time = False ):
267279 seen = seen or set ()
268280 base = tuple (base )
269281 for pkg in base :
270282 if pkg in seen or pkg .status in {'idle' } | DONE_STATUSES :
271283 yield pkg , []
272284 else :
273- reqs = sorted (pkg .requirements ,
274- key = lambda p : (- p .status_obj .weight , p .name ))
275- yield pkg , gen_deptree (reqs , seen = seen | {pkg })
285+ reqs = sorted (
286+ set ((pkg .run_time_requirements if run_time else []) +
287+ (pkg .build_time_requirements if build_time else [])),
288+ key = lambda p : (- p .status_obj .weight , p .name ))
289+ yield pkg , gen_deptree (reqs , seen = seen | {pkg },
290+ run_time = run_time , build_time = build_time )
276291 seen .add (pkg )
277292
278293
@@ -347,7 +362,7 @@ def graph_json(grp=None, pkg=None):
347362 if grp :
348363 query = query .join (tables .GroupPackage )
349364 query = query .filter (tables .GroupPackage .group_ident == grp )
350- query = query .options (joinedload (tables .Package .requirers ))
365+ query = query .options (joinedload (tables .Package .run_time_requirers ))
351366 packages = list (query )
352367 else :
353368 query = db .query (tables .Package )
@@ -360,20 +375,21 @@ def graph_json(grp=None, pkg=None):
360375 package = todo .pop ()
361376 if package not in requirements :
362377 requirements .add (package )
363- todo .update (p for p in package .requirements
378+ todo .update (p for p in package .run_time_requirements
364379 if p .status not in DONE_STATUSES )
365380 todo = {root_package }
366381 requirers = set ()
367382 while todo :
368383 package = todo .pop ()
369384 if package not in requirers :
370385 requirers .add (package )
371- todo .update (p for p in package .requirers
386+ todo .update (p for p in package .run_time_requirers
372387 if p .status not in DONE_STATUSES )
373388 packages = list (requirements | requirers | {root_package })
374389
375390 package_names = {p .name for p in packages }
376391 query = db .query (tables .Dependency )
392+ query = query .filter (tables .Dependency .run_time )
377393 linked_pairs = {(d .requirer_name , d .requirement_name )
378394 for d in query
379395 if d .requirer_name in package_names
0 commit comments