(self, max_parallel_jobs=None)
| 316 | ) |
| 317 | |
| 318 | def generate_reports(self, max_parallel_jobs=None): |
| 319 | # type: (Optional[int]) -> Reports |
| 320 | |
| 321 | if not self.requests or not any(request.has_requirements for request in self.requests): |
| 322 | # Nothing to report. |
| 323 | return Reports() |
| 324 | |
| 325 | dest = safe_mkdtemp( |
| 326 | prefix="resolver_report.", dir=safe_mkdir(CacheDir.DOWNLOADS.path(".tmp")) |
| 327 | ) |
| 328 | |
| 329 | log_manager = PipLogManager.create( |
| 330 | self.pip_log, |
| 331 | download_targets=tuple(request.download_target for request in self.requests), |
| 332 | ) |
| 333 | if self.pip_log and not self.pip_log.user_specified: |
| 334 | TRACER.log( |
| 335 | "Preserving `pip install --dry-run` log at {log_path}".format( |
| 336 | log_path=self.pip_log.path |
| 337 | ), |
| 338 | V=ENV.PEX_VERBOSE, |
| 339 | ) |
| 340 | |
| 341 | spawn_report = functools.partial( |
| 342 | self._spawn_report, resolved_target_dir=dest, log_manager=log_manager |
| 343 | ) |
| 344 | with TRACER.timed( |
| 345 | "Resolving for:\n {}".format( |
| 346 | "\n ".join(request.render_description() for request in self.requests) |
| 347 | ) |
| 348 | ): |
| 349 | try: |
| 350 | return Reports( |
| 351 | reports=tuple( |
| 352 | Report.parse(download_request.download_target, report) |
| 353 | for download_request, report in zip( |
| 354 | self.requests, |
| 355 | execute_parallel( |
| 356 | inputs=self.requests, |
| 357 | spawn_func=spawn_report, |
| 358 | error_handler=Raise[DownloadRequest, str](Unsatisfiable), |
| 359 | max_jobs=max_parallel_jobs, |
| 360 | ), |
| 361 | ) |
| 362 | ) |
| 363 | ) |
| 364 | finally: |
| 365 | log_manager.finalize_log() |
| 366 | |
| 367 | def _spawn_report( |
| 368 | self, |
no test coverage detected