annotate variant_effect_predictor/Bio/DB/Query/WebQuery.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: WebQuery.pm,v 1.5 2002/12/05 13:46:32 heikki Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::DB::WebQuery.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Lincoln Stein <lstein@cshl.org>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Lincoln Stein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Bio::DB::Query::WebQuery - Helper class for web-based sequence queryies
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 Do not use this class directly. See Bio::DB::QueryI and one of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 implementor classes (such as Bio::DB::GenBankQuery) for information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 Do not use this class directly. See Bio::DB::QueryI and one of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 implementor classes (such as Bio::DB::GenBankQuery) for information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 Those writing subclasses must define _get_params() and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 _parse_response(), and possibly override _request_method().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 User feedback is an integral part of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 evolution of this and other Bioperl modules. Send
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 of the Bioperl mailing lists. Your participation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 http://bioperl.org/MailList.shtml - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 Report bugs to the Bioperl bug tracking system to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 help us keep track the bugs and their resolution.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 Bug reports can be submitted via email or the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 =head1 AUTHOR - Lincoln Stein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 Email lstein@cshl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 The rest of the documentation details each of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 object methods. Internal methods are usually
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 package Bio::DB::Query::WebQuery;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 use URI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 use LWP::UserAgent;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 use HTTP::Request::Common;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 use Bio::DB::QueryI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 use vars qw(@ISA $VERSION);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 @ISA = qw(Bio::Root::Root Bio::DB::QueryI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 $VERSION = '0.1';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 Title : new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 Usage : $db = Bio::DB::WebQuery->new(@args)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 Function: create new query object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 Returns : new query object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 Args : -db database (e.g. 'protein')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 -ids array ref of ids (overrides query)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 -verbose turn on verbose debugging
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 This method creates a new query object. Typically you will specify a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 -db and a -query argument. The value of -query is a database-specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 If you provide an array reference of IDs in -ids, the query will be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 ignored and the list of IDs will be used when the query is passed to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 # Borrowed shamelessly from WebDBSeqI. Some of this code should be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 # refactored.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 my $self = $class->SUPER::new(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 my ($query,$ids,$verbose) = $self->_rearrange(['QUERY','IDS','VERBOSE'],@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 $self->throw('must provide one of the the -query or -ids arguments')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 unless defined($query) || defined($ids);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $query ||= join ',',ref($ids) ? @$ids : $ids;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 $query && $self->query($query);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 $verbose && $self->verbose($verbose);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 my $ua = new LWP::UserAgent;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 $ua->agent(ref($self) ."/$VERSION");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 $self->ua($ua);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 $self->{'_authentication'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 =head2 ua
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Title : ua
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Usage : my $ua = $self->ua or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 $self->ua($ua)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 Function: Get/Set a LWP::UserAgent for use
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 Returns : reference to LWP::UserAgent Object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 Args : $ua - must be a LWP::UserAgent
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 sub ua {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 my ($self, $ua) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 my $d = $self->{'_ua'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 if( defined $ua && $ua->isa("LWP::UserAgent") ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 $self->{'_ua'} = $ua;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 $d;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 =head2 proxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Title : proxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Usage : $httpproxy = $db->proxy('http') or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $db->proxy(['http','ftp'], 'http://myproxy' )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Function: Get/Set a proxy for use of proxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 Returns : a string indicating the proxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 Args : $protocol : an array ref of the protocol(s) to set/get
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 $proxyurl : url of the proxy to use for the specified protocol
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 $username : username (if proxy requires authentication)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 $password : password (if proxy requires authentication)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 sub proxy {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 my ($self,$protocol,$proxy,$username,$password) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 return undef if ( !defined $self->ua || !defined $protocol
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 || !defined $proxy );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 $self->authentication($username, $password)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 if ($username && $password);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 return $self->ua->proxy($protocol,$proxy);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 =head2 authentication
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Title : authentication
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Usage : $db->authentication($user,$pass)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 Function: Get/Set authentication credentials
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 Returns : Array of user/pass
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 Args : Array or user/pass
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 sub authentication{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 my ($self,$u,$p) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 if( defined $u && defined $p ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 $self->{'_authentication'} = [ $u,$p];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 return @{$self->{'_authentication'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 =head2 ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Title : ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Usage : @ids = $db->ids([@ids])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Function: get/set matching ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Returns : array of sequence ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Args : (optional) array ref with new set of ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 sub ids {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 my $d = $self->{'_ids'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 my $arg = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 $self->{'_ids'} = ref $arg ? $arg : [$arg];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 return $d ? @$d : ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 $self->_fetch_ids;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 return @{$self->{'_ids'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 =head2 query
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 Title : query
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Usage : $query = $db->query([$query])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 Function: get/set query string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Returns : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Args : (optional) new query string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 sub query {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 my $d = $self->{'_query'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 $self->{'_query'} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $d;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 =head2 _fetch_ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Title : _fetch_ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Usage : @ids = $db->_fetch_ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Function: run query, get ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Returns : array of sequence ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 sub _fetch_ids {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $self->_run_query;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 $self->_run_query(1) if $self->_truncated;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 $self->throw('Id list has been truncated even after maxids requested')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 if $self->_truncated;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 return @{$self->{'_ids'}} if $self->{'_ids'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 =head2 _run_query
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Title : _run_query
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Usage : $success = $db->_run_query
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Function: run query, parse results
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Returns : true if successful
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 sub _run_query {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 my $force = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 # allow the query to be run one extra time if truncated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 return $self->{'_ran_query'} if $self->{'_ran_query'}++ && !$force;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 my $request = $self->_get_request;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 $self->debug("request is ".$request->url) if $self->verbose;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 my $response = $self->ua->request($request);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 return unless $response->is_success;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 $self->debug("response is ".$response->content) if $self->verbose;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 $self->_parse_response($response->content);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 =head2 _truncated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 Title : _truncated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 Usage : $flag = $db->_truncated([$newflag])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 Function: get/set truncation flag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Returns : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Args : new flag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 Some databases will truncate output unless explicitly asked
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 not to. This flag allows a "two probe" attempt.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 sub _truncated {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 my $d = $self->{'_truncated'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 $self->{'_truncated'} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 $d;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 =head2 _get_request
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 Title : _get_request
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 Usage : $http_request = $db->_get_request(@params)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 Function: create an HTTP::Request with indicated parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 Returns : HTTP::Request object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 Args : CGI parameter list
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 sub _get_request {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 my ($method,$base,@params) = $self->_request_parameters;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 my $uri = URI->new($base);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 my $request;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 if ($method eq 'get') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 $uri->query_form(@params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 $request = GET $uri;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 $request = POST $uri,\@params;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 $request->proxy_authorization_basic($self->authentication)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 if $self->authentication;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 $request;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 =head2 _parse_response
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Title : _parse_response
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 Usage : $db->_parse_response($content)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 Function: parse out response
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 Returns : empty
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 Throws : 'unparseable output exception'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 NOTE: This method must be implemented by subclass.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 sub _parse_response {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $content = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 $self->throw_not_implemented;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 =head2 _request_parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 Title : _request_parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 Usage : ($method,$base,@params = $db->_request_parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 Function: return information needed to construct the request
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Returns : list of method, url base and key=>value pairs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 NOTE: This method must be implemented by subclass.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 sub _request_parameters {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 $self->throw_not_implemented;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 1;