/** Fetches available package versions using JSON API of PyPI. */
 @NotNull
 private List<String> getPackageVersionsFromPyPI(@NotNull String packageName, boolean force)
     throws IOException {
   final PackageDetails details = refreshAndGetPackageDetailsFromPyPI(packageName, force);
   final List<String> result = details.getReleases();
   result.sort(PackageVersionComparator.VERSION_COMPARATOR.reversed());
   return Collections.unmodifiableList(result);
 }
 public void fillPackageDetails(
     @NotNull String packageName,
     @NotNull CatchingConsumer<PackageDetails.Info, Exception> callback) {
   ApplicationManager.getApplication()
       .executeOnPooledThread(
           () -> {
             try {
               final PackageDetails packageDetails =
                   refreshAndGetPackageDetailsFromPyPI(packageName, false);
               callback.consume(packageDetails.getInfo());
             } catch (IOException e) {
               callback.consume(e);
             }
           });
 }