@Override
  public void fetchPackageDetails(
      final String packageName, final CatchingConsumer<String, Exception> consumer) {
    PyPIPackageUtil.INSTANCE.fillPackageDetails(
        packageName,
        new AsyncCallback() {
          @Override
          public void handleResult(Object result, URL url, String method) {
            final Hashtable details = (Hashtable) result;
            PyPIPackageUtil.INSTANCE.addPackageDetails(packageName, details);
            consumer.consume(formatPackageDetails(details));
          }

          @Override
          public void handleError(Exception exception, URL url, String method) {
            consumer.consume(exception);
          }
        });
  }