Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2016-09

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

3 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

leledumbo

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 by email

Michael Van Canneyt
to leledumbo

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.

leledumbo wrote 140 lines
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 . _______________________________________________ fpc-pascal maillist - http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

leledumbo
to 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.

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.

Reply by email