| 367 | |
| 368 | |
| 369 | class VSCMarketplace(object): |
| 370 | |
| 371 | def __init__(self, insider, prerelease, version, session): |
| 372 | self.insider = insider |
| 373 | self.prerelease = prerelease |
| 374 | self.version = version |
| 375 | self.session = session |
| 376 | self.backoff = 1 |
| 377 | |
| 378 | def get_recommendations(self, destination, totalrecommended): |
| 379 | recommendations = self.search_top_n(totalrecommended) |
| 380 | # recommended_old = self.get_recommendations_old(destination) |
| 381 | |
| 382 | # for extension in recommendations: |
| 383 | # # If the extension has already been found then prevent it from being collected again when processing the old recommendation list |
| 384 | # if extension.identity in recommended_old.keys(): |
| 385 | # del recommended_old[extension.identity] |
| 386 | |
| 387 | # for packagename in recommended_old: |
| 388 | # extension = self.search_by_extension_name(packagename) |
| 389 | # if extension: |
| 390 | # recommendations.append(extension) |
| 391 | # else: |
| 392 | # log.debug( |
| 393 | # f'get_recommendations failed finding a recommended extension by name for {packagename}. This extension has likely been removed.') |
| 394 | |
| 395 | prereleasecount = 0 |
| 396 | for recommendation in recommendations: |
| 397 | recommendation.set_recommended() |
| 398 | # If the found extension is a prerelease version search for the next available release version |
| 399 | if not self.prerelease and recommendation.isprerelease(): |
| 400 | prereleasecount += 1 |
| 401 | extension = self.search_release_by_extension_id( |
| 402 | recommendation.extensionId) |
| 403 | if extension: |
| 404 | recommendation.versions = extension.get_latest_release_versions() |
| 405 | return recommendations |
| 406 | |
| 407 | def get_recommendations_old(self, destination): |
| 408 | result = self.session.get(vsc.URL_RECOMMENDATIONS, |
| 409 | allow_redirects=True, timeout=vsc.TIMEOUT) |
| 410 | if result.status_code != 200: |
| 411 | log.warning( |
| 412 | f"get_recommendations failed accessing url {vsc.URL_RECOMMENDATIONS}, unhandled status code {result.status_code}") |
| 413 | return {} # Return an empty dictionary instead of False |
| 414 | |
| 415 | jresult = result.json() |
| 416 | with open(os.path.join(destination, 'recommendations.json'), 'w') as outfile: |
| 417 | json.dump(jresult, outfile, cls=vsc.MagicJsonEncoder, indent=4) |
| 418 | |
| 419 | # To dict to remove duplicates |
| 420 | packages = {} |
| 421 | for recommendation in jresult['workspaceRecommendations']: |
| 422 | for package in recommendation['recommendations']: |
| 423 | packages[package] = None |
| 424 | |
| 425 | return packages |
| 426 | |