ERESTAPI: TBuckets: unsupported array element type : <looks like empty string>

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

ERESTAPI: TBuckets: unsupported array element type : <looks like empty string>

leledumbo
Administrator
I'm testing google cloud storage API with the following simple console program, just to list the buckets:

{$mode objfpc}{$H+}

uses
  googleservice,
  googleclient,
  googlestorage,
  openssl,
  jsonparser,
  fpjson,
  fpoauth2,
  fpwebclient,
  fphttpwebclient;

type
  TAuthHelper = class
    procedure DoUserConsent(const AURL: String; out AAuthCode: String);
  end;

procedure TAuthHelper.DoUserConsent(const AURL: String; out AAuthCode: String);
begin
  WriteLn('Open the following URL in browser:');
  WriteLn(AURL);
  Write('Writeback the resulting code here: ');
  ReadLn(AAuthCode);
end;

var
  AuthHelper: TAuthHelper;
  GClient: TGoogleClient;
  GStorageAPI: TStorageAPI;
  BucketsResource: TBucketsResource;
  BucketsListOptions: TBucketsListOptions;
  Buckets: TBuckets;
  i: Integer;
begin
  try
    // Register Tasks resources.
    TStorageAPI.RegisterAPIResources;

    // Set up google client.
    GClient := TGoogleClient.Create(nil);
    GClient.WebClient := TFPHTTPWebClient.Create(nil);
    GClient.WebClient.RequestSigner := GClient.AuthHandler;
    GClient.WebClient.LogFile := 'requests.log';
    GClient.AuthHandler.WebClient := GClient.WebClient;
    GClient.AuthHandler.Config.AccessType := atOffLine;

    // We want to enter a code.
    AuthHelper := TAuthHelper.Create;
    GClient.OnUserConsent := @AuthHelper.DoUserConsent;

    // Create a Tasks API and connect it to the client.
    GStorageAPI := TStorageAPI.Create(nil);
    GStorageAPI.GoogleClient := GClient;

    // Registered application needs tasks scope
    GClient.AuthHandler.Config.ClientID := '<my client id>';
    GClient.AuthHandler.Config.ClientSecret := '<my client secret>';
    GClient.AuthHandler.Config.AuthScope := 'https://www.googleapis.com/auth/devstorage.read_only';
    // We are offline.
    GClient.AuthHandler.Config.RedirectUri := 'urn:ietf:wg:oauth:2.0:oob';
    // Session data
    GClient.AuthHandler.Session.RefreshToken := '';
    GClient.AuthHandler.Session.AccessToken := '';
    GClient.AuthHandler.Session.AuthTokenType := '';
    GClient.AuthHandler.Session.AuthExpires := 0;
    GClient.AuthHandler.Session.AuthExpiryPeriod := 0;

    BucketsResource := GStorageAPI.CreateBucketsResource;
    BucketsListOptions.Project := '<my project number>';
    Buckets := BucketsResource.List(BucketsListOptions);
    if Assigned(Buckets) then
      for i := 0 to Length(Buckets.Items) - 1 do
        WriteLn(Buckets.Items[i].name + ': ' + Buckets.Items[i].selfLink)
    else
      WriteLn('Failed to list bucket');
  finally
    AuthHelper.Free;
    GStorageAPI.Free;
    GClient.Free;
  end;
end.

but I get "ERESTAPI: TBuckets: unsupported array element type : " on this line:

Buckets := BucketsResource.List(BucketsListOptions);

Last requests.log entry:
--------------------------------------------------------------------------------
Response : 200 : OK
Headers:
X-GUploader-UploadID: AEnB2UpzLb9Aty5k0H_WnHL49Osv0fAdVGnN6Xenh7DSV2kBiVLiqiCm84KgiRf_23h_5OEH7EPeuprz_s5mTNiOJKFyAjGqqg
Vary: Origin
Vary: X-Origin
Content-Type: application/json; charset=UTF-8
Expires: Sat, 24 Sep 2016 16:06:20 GMT
Date: Sat, 24 Sep 2016 16:06:20 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
Content-Length: 487
Server: UploadServer
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34,33,32"
Body:
{
 "kind": "storage#buckets",
 "items": [
  {
   "kind": "storage#bucket",
   "id": "savvy-courage-140719.appspot.com",
   "selfLink": "https://www.googleapis.com/storage/v1/b/savvy-courage-140719.appspot.com",
   "projectNumber": "594372726667",
   "name": "savvy-courage-140719.appspot.com",
   "timeCreated": "2016-08-18T19:40:29.031Z",
   "updated": "2016-08-18T19:40:29.031Z",
   "metageneration": "1",
   "location": "US",
   "storageClass": "STANDARD",
   "etag": "CAE="
  }
 ]
}

What did I miss?
Reply | Threaded
Open this post in threaded view
|

Re: ERESTAPI: TBuckets: unsupported array element type : <looks like empty string>

Michael Van Canneyt

What version of FPC are you using ? If it is trunk, there is currently a bug
which can cause this kind of behaviour, due to the changed RTTI.

Michael.

On Sat, 24 Sep 2016, leledumbo wrote:

> I'm testing google cloud storage API with the following simple console
> program, just to list the buckets:
>
> {$mode objfpc}{$H+}
>
> uses
>  googleservice,
>  googleclient,
>  googlestorage,
>  openssl,
>  jsonparser,
>  fpjson,
>  fpoauth2,
>  fpwebclient,
>  fphttpwebclient;
>
> type
>  TAuthHelper = class
>    procedure DoUserConsent(const AURL: String; out AAuthCode: String);
>  end;
>
> procedure TAuthHelper.DoUserConsent(const AURL: String; out AAuthCode:
> String);
> begin
>  WriteLn('Open the following URL in browser:');
>  WriteLn(AURL);
>  Write('Writeback the resulting code here: ');
>  ReadLn(AAuthCode);
> end;
>
> var
>  AuthHelper: TAuthHelper;
>  GClient: TGoogleClient;
>  GStorageAPI: TStorageAPI;
>  BucketsResource: TBucketsResource;
>  BucketsListOptions: TBucketsListOptions;
>  Buckets: TBuckets;
>  i: Integer;
> begin
>  try
>    // Register Tasks resources.
>    TStorageAPI.RegisterAPIResources;
>
>    // Set up google client.
>    GClient := TGoogleClient.Create(nil);
>    GClient.WebClient := TFPHTTPWebClient.Create(nil);
>    GClient.WebClient.RequestSigner := GClient.AuthHandler;
>    GClient.WebClient.LogFile := 'requests.log';
>    GClient.AuthHandler.WebClient := GClient.WebClient;
>    GClient.AuthHandler.Config.AccessType := atOffLine;
>
>    // We want to enter a code.
>    AuthHelper := TAuthHelper.Create;
>    GClient.OnUserConsent := @AuthHelper.DoUserConsent;
>
>    // Create a Tasks API and connect it to the client.
>    GStorageAPI := TStorageAPI.Create(nil);
>    GStorageAPI.GoogleClient := GClient;
>
>    // Registered application needs tasks scope
>    GClient.AuthHandler.Config.ClientID := '<my client id>';
>    GClient.AuthHandler.Config.ClientSecret := '<my client secret>';
>    GClient.AuthHandler.Config.AuthScope :=
> 'https://www.googleapis.com/auth/devstorage.read_only';
>    // We are offline.
>    GClient.AuthHandler.Config.RedirectUri := 'urn:ietf:wg:oauth:2.0:oob';
>    // Session data
>    GClient.AuthHandler.Session.RefreshToken := '';
>    GClient.AuthHandler.Session.AccessToken := '';
>    GClient.AuthHandler.Session.AuthTokenType := '';
>    GClient.AuthHandler.Session.AuthExpires := 0;
>    GClient.AuthHandler.Session.AuthExpiryPeriod := 0;
>
>    BucketsResource := GStorageAPI.CreateBucketsResource;
>    BucketsListOptions.Project := '<my project number>';
>    Buckets := BucketsResource.List(BucketsListOptions);
>    if Assigned(Buckets) then
>      for i := 0 to Length(Buckets.Items) - 1 do
>        WriteLn(Buckets.Items[i].name + ': ' + Buckets.Items[i].selfLink)
>    else
>      WriteLn('Failed to list bucket');
>  finally
>    AuthHelper.Free;
>    GStorageAPI.Free;
>    GClient.Free;
>  end;
> end.
>
> but I get "ERESTAPI: TBuckets: unsupported array element type : " on this
> line:
>
> Buckets := BucketsResource.List(BucketsListOptions);
>
> Last requests.log entry:
> --------------------------------------------------------------------------------
> Response : 200 : OK
> Headers:
> X-GUploader-UploadID:
> AEnB2UpzLb9Aty5k0H_WnHL49Osv0fAdVGnN6Xenh7DSV2kBiVLiqiCm84KgiRf_23h_5OEH7EPeuprz_s5mTNiOJKFyAjGqqg
> Vary: Origin
> Vary: X-Origin
> Content-Type: application/json; charset=UTF-8
> Expires: Sat, 24 Sep 2016 16:06:20 GMT
> Date: Sat, 24 Sep 2016 16:06:20 GMT
> Cache-Control: private, max-age=0, must-revalidate, no-transform
> Content-Length: 487
> Server: UploadServer
> Alt-Svc: quic=":443"; ma=2592000; v="36,35,34,33,32"
> Body:
> {
> "kind": "storage#buckets",
> "items": [
>  {
>   "kind": "storage#bucket",
>   "id": "savvy-courage-140719.appspot.com",
>   "selfLink":
> "https://www.googleapis.com/storage/v1/b/savvy-courage-140719.appspot.com",
>   "projectNumber": "594372726667",
>   "name": "savvy-courage-140719.appspot.com",
>   "timeCreated": "2016-08-18T19:40:29.031Z",
>   "updated": "2016-08-18T19:40:29.031Z",
>   "metageneration": "1",
>   "location": "US",
>   "storageClass": "STANDARD",
>   "etag": "CAE="
>  }
> ]
> }
>
> What did I miss?
>
>
>
> --
> View this message in context: http://free-pascal-general.1045716.n5.nabble.com/ERESTAPI-TBuckets-unsupported-array-element-type-looks-like-empty-string-tp5726387.html
> Sent from the Free Pascal - General mailing list archive at Nabble.com.
> _______________________________________________
> fpc-pascal maillist  -  [hidden email]
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: ERESTAPI: TBuckets: unsupported array element type : <looks like empty string>

leledumbo
Administrator
> What version of FPC are you using ? If it is trunk, there is currently a bug
which can cause this kind of behaviour, due to the changed RTTI.

Yes, it's trunk. OK, I'll refrain from using it for now, not really an urgent need, but I'm looking forward to using it for my website's cdn storage.