PageRenderTime 65ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/direct_spore_plainauth.pl

https://bitbucket.org/Mekk/perl-webservice_bitbucket
Perl | 105 lines | 78 code | 15 blank | 12 comment | 8 complexity | 80286202a16901becc8df1c9ca74e4fa MD5 | raw file
  1. #!/usr/bin/perl -w
  2. #
  3. # Example directly using spore specs. No auth.
  4. #
  5. use strict;
  6. use warnings;
  7. use feature ('say');
  8. use Net::HTTP::Spore;
  9. use Try::Tiny;
  10. use Data::Dumper;
  11. my $USER = 'Mekk';
  12. my $PASS = '***';
  13. die "It does not work, bb does not handle plain auth\n";
  14. sub display_repos_reply {
  15. my $repos = shift;
  16. # print Dumper($repos);
  17. say "next:", $repos->{next} if $repos->{next};
  18. say "size:", $repos->{size};
  19. say "page:", $repos->{page};
  20. foreach my $val (@{$repos->{values}}) {
  21. say "Repo ", $val->{name}, "(scm: $val->{scm}, language: $val->{language}, owner: $val->{owner}->{username}, size: $val->{size}, private: $val->{is_private})";
  22. # say Dumper($val->{owner}); username, uuid, display_name, links
  23. # description
  24. # has_wiki, has_issues, fork_policy
  25. # updated_on, created_on
  26. say " full_name: ", $val->{full_name};
  27. say " fork_parent: ", $val->{parent} if $val->{parent};
  28. print " clone: "; #, Dumper($val->{links}->{clone});
  29. foreach my $link (@{$val->{links}->{clone}}) {
  30. print "[$link->{name}] $link->{href} ";
  31. }
  32. print "\n";
  33. }
  34. }
  35. try {
  36. my $client = Net::HTTP::Spore->new_from_spec(
  37. '../share/bitbucket-spore.json',
  38. # trace=>1, # Or SPORE_TRACE=1 in environment
  39. );
  40. # $client->enable()
  41. $client->enable('Format::JSON');
  42. $client->enable('Redirection', max_redirect => 3);
  43. $client->enable('Auth::Basic', username => $USER, password => $PASS);
  44. $client->enable(sub {
  45. my $self = shift;
  46. my $request = shift;
  47. # say "Issuing request ", ref($request);
  48. say "* Issuing request to: ", $request->uri;
  49. $self->response_cb(sub {
  50. my $res = shift;
  51. say "* Obtained response, status: ", $res->status, ", content type: ", $res->content_type, ", size: ", $res->content_length;
  52. });
  53. });
  54. say "*** USER INFO ***";
  55. my $result;
  56. $result = $client->user();
  57. my $user = $result->body;
  58. say Dumper($user);
  59. say "*** OWNED REPOSITORIES ***";
  60. $result = $client->repositories();
  61. my $repos = $result->body;
  62. display_repos_reply($repos);
  63. $result = $client->repositories(page=>"2");
  64. $repos = $result->body;
  65. display_repos_reply($repos);
  66. while( $repos->{next} ) {
  67. if($repos->{next} =~ /page=(\d+)/) {
  68. last if $1 > 10;
  69. $result = $client->repositories(page=>$1);
  70. $repos = $result->body;
  71. display_repos_reply($repos);
  72. } else {
  73. last;
  74. }
  75. }
  76. }
  77. catch {
  78. say "Unexpected error caught [" . ref($_) . "]: $_";
  79. if(ref($_) eq 'Net::HTTP::Spore::Response') {
  80. my $body = $_->body;
  81. my $error = $body;
  82. if(ref($error)) {
  83. $error = $error->{error};
  84. }
  85. if(ref($error)) {
  86. $error = $error->{message};
  87. }
  88. say $error;
  89. }
  90. };