Mercurial > pub > buggler
comparison translate.pl @ 7:29309bc8d932
initial objects to work with bugzilla web service
| author | cin |
|---|---|
| date | Fri, 04 Sep 2015 19:41:28 +0300 |
| parents | 2a5f38eb25a9 |
| children | cc7244ab1b9f |
comparison
equal
deleted
inserted
replaced
| 6:2a5f38eb25a9 | 7:29309bc8d932 |
|---|---|
| 120 $writer->endTag(); | 120 $writer->endTag(); |
| 121 | 121 |
| 122 close HIN; | 122 close HIN; |
| 123 finish($proc); | 123 finish($proc); |
| 124 | 124 |
| 125 #xalan( | 125 package BzRest; |
| 126 # in => \*OUT, | |
| 127 # out => \*STDOUT, | |
| 128 # params => [ | |
| 129 # | |
| 130 # ] | |
| 131 #); | |
| 132 | 126 |
| 133 sub xalan { | |
| 134 my @params = @_; | |
| 135 return system 'java', | |
| 136 -cp => join( ':', @ClassPath ), | |
| 137 "org.apache.xalan.xslt.Process", @params; | |
| 138 } | |
| 139 | 127 |
| 140 package BzRest; | |
| 141 use fields qw(url apikey); | |
| 142 use LWP::UserAgent; | |
| 143 use XMLRPC::Lite; | |
| 144 use YAML::XS qw(Dump); | |
| 145 | |
| 146 use constant { SELF => __PACKAGE__ }; | |
| 147 | |
| 148 sub new { | |
| 149 my $class = shift; | |
| 150 $class = ref $class || $class; | |
| 151 | |
| 152 my $inst = fields::new($class); | |
| 153 $inst->CTOR(@_); | |
| 154 | |
| 155 return $inst; | |
| 156 } | |
| 157 | |
| 158 sub CTOR { | |
| 159 my SELF $this = shift; | |
| 160 my %params = @_; | |
| 161 | |
| 162 $this->{url} = $params{url} or die "An url is required"; | |
| 163 $this->{apikey} = $params{apikey} if $params{apikey}; | |
| 164 } | |
| 165 | |
| 166 sub GetBug { | |
| 167 my SELF $this = shift; | |
| 168 my $id = shift; | |
| 169 my %params = @_; | |
| 170 | |
| 171 $params{api_key} = $this->{apikey}; | |
| 172 | |
| 173 my $bugurl = URI->new_abs( 'rest/bug/' . $id, $this->{url} ); | |
| 174 $bugurl->query_form( \%params ); | |
| 175 | |
| 176 my $agent = LWP::UserAgent->new(); | |
| 177 my $res = $agent->get($bugurl); | |
| 178 | |
| 179 return $this->_AssertResponse( $res, $bugurl ); | |
| 180 } | |
| 181 | |
| 182 sub GetBugs { | |
| 183 my SELF $this = shift; | |
| 184 | |
| 185 return $this->CallXMLRPC( 'Bug.get', shift )->{bugs}; | |
| 186 } | |
| 187 | |
| 188 sub CallXMLRPC { | |
| 189 my SELF $this = shift; | |
| 190 my ( $method, $params ) = @_; | |
| 191 | |
| 192 die "Method must be specified" unless $method; | |
| 193 $params ||= {}; | |
| 194 | |
| 195 $params->{api_key} = $this->{apikey}; | |
| 196 my $url = URI->new_abs( 'xmlrpc.cgi', $this->{url} ); | |
| 197 | |
| 198 my $result = XMLRPC::Lite->proxy($url)->call( $method, $params ); | |
| 199 | |
| 200 die $result->fault if $result->fault; | |
| 201 return $result->result; | |
| 202 } | |
| 203 | |
| 204 sub _AssertResponse { | |
| 205 my SELF $this = shift; | |
| 206 my ( $res, $url ) = @_; | |
| 207 | |
| 208 die "Failed to get any response: " . $url unless $res; | |
| 209 | |
| 210 die "Failed to fetch: " . $url . ": " . $res->code unless $res->is_success; | |
| 211 | |
| 212 my $bug = JSON->new()->utf8()->decode( $res->content ); | |
| 213 | |
| 214 die "Bugzilla failed: " . $bug->{message} if $bug->{error}; | |
| 215 | |
| 216 return $bug->{bugs}; | |
| 217 } | |
| 218 | 128 |
| 219 __END__ | 129 __END__ |
| 220 | 130 |
| 221 =pod | 131 =pod |
| 222 | 132 |
