[Bio] / FigKernelPackages / FFserver.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/FFserver.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2, Thu Apr 30 20:33:41 2009 UTC revision 1.11, Thu May 21 21:53:17 2009 UTC
# Line 2  Line 2 
2  package FFserver;  package FFserver;
3    
4  use LWP::UserAgent;  use LWP::UserAgent;
 use FIG_Config;  
5  use Data::Dumper;  use Data::Dumper;
6    use YAML;
7    
8  use strict;  use strict;
9    
# Line 11  Line 11 
11  {  {
12      my($class, $server_url) = @_;      my($class, $server_url) = @_;
13    
14      $server_url = $FIG_Config::FFserver_url unless $server_url;      $server_url = "http://servers.nmpdr.org/figfam/server.cgi" unless $server_url;
     $server_url = "http://bio-macpro-1.mcs.anl.gov/~disz/FIG/figfam_server.cgi" unless $server_url;  
15    
16    
17      my $self = {      my $self = {
18          server_url => $server_url,          server_url => $server_url,
19          ua => LWP::UserAgent->new(),          ua => LWP::UserAgent->new(),
20      };      };
21        $self->{ua}->timeout(10 * 60);
22    
23      return bless $self, $class;      return bless $self, $class;
24  }  }
25    
26    sub members_of_families
27    {
28        my($self, @ids) = @_;
29        return $self->run_query('members_of_families', @ids);
30    }
31    
32    sub families_containing_peg
33    {
34        my($self, @ids) = @_;
35        return $self->run_query('families_containing_peg', @ids);
36    }
37    
38    sub function_of
39    {
40        my($self, @ids) = @_;
41        return $self->run_query('function_of', @ids);
42    }
43    
44    sub org_of
45    {
46        my($self, @ids) = @_;
47        return $self->run_query('org_of', @ids);
48    }
49    
50    sub seq_of
51    {
52        my($self, @ids) = @_;
53        return $self->run_query('seq_of', @ids);
54    }
55    
56    sub aliases_of
57    {
58        my($self, @ids) = @_;
59        return $self->run_query('aliases_of', @ids);
60    }
61    
62    sub families_implementing_role
63    {
64        my($self,@roles) = @_;
65        return $self->run_query('families_implementing_role', @roles);
66    }
67    
68    sub families_with_function
69    {
70        my($self,@functions) = @_;
71        return $self->run_query('families_with_function', @functions);
72    }
73    
74    sub families_in_genome
75    {
76        my($self,@genomes) = @_;
77        return $self->run_query('families_in_genome', @genomes);
78    }
79    
80    sub get_subsystem_based_figfams
81    {
82        my ($self) = @_;
83        return $self->run_query('get_subsystem_based_figfams');
84    }
85    
86    sub should_be_member
87    {
88        my($self, @id_seq_pairs) = @_;
89        return $self->run_query('should_be_member', @id_seq_pairs);
90    }
91    
92    sub all_families
93    {
94        my($self) = @_;
95        return $self->run_query('all_families');
96    }
97    
98    sub run_query
99    {
100        my($self, $function, @args ) = @_;
101        my $form = [function  => $function,
102                    args => YAML::Dump(@args),
103                    ];
104        return $self->run_query_form($form);
105    }
106    
107    sub run_query_form
108    {
109        my($self, $form) = @_;
110    
111        my $res = $self->{ua}->post($self->{server_url}, $form);
112    
113        if ($res->is_success)
114        {
115            return Load($res->content);
116        }
117        else
118        {
119            die "error on post " . $res->status_line . " " . $res->content;
120        }
121    }
122    
123  sub assign_function_to_prot  sub assign_function_to_prot
124  {  {
125      my($self, $input) = @_;      my($self, $input, $blast, $min_hits) = @_;
126    
127      my $wq;      my $wq;
128    
129        my $params = [blast => $blast, min_hits => $min_hits];
130    
131      if (ref($input) eq 'ARRAY')      if (ref($input) eq 'ARRAY')
132      {      {
133          $wq = SequenceListWorkQueue->new($input);          $wq = SequenceListWorkQueue->new($input);
# Line 38  Line 137 
137          $wq = FastaWorkQueue->new($input);          $wq = FastaWorkQueue->new($input);
138      }      }
139    
140      return ResultHandler->new($wq, $self->{server_url}, 'assign_function_to_prot', \&id_seq_pair_bundler, \&tab_delimited_output_parser);      my $req_bytes = $blast ? 1000 : 16000;
141    
142        return ResultHandler->new($wq, $self->{server_url}, 'assign_function_to_prot', \&id_seq_pair_bundler,
143                                  #\&tab_delimited_output_parser,
144                                  \&YAML::Load,
145                                  $params, $req_bytes);
146  }  }
147    
148  sub assign_functions_to_dna  sub assign_functions_to_dna
149  {  {
150      my($self, $input) = @_;      my($self, $input, $min_hits, $max_gap, $blast) = @_;
151    
152      my $wq;      my $wq;
153    
# Line 56  Line 160 
160          $wq = FastaWorkQueue->new($input);          $wq = FastaWorkQueue->new($input);
161      }      }
162    
163      return ResultHandler->new($wq, $self->{server_url}, 'assign_function_to_DNA', \&id_seq_pair_bundler, \&tab_delimited_dna_data_output_parser);      my $req_bytes = $blast ? 1000 : 16000;
164        my $params = [min_hits => $min_hits, max_gap => $max_gap, blast => $blast];
165        return ResultHandler->new($wq, $self->{server_url}, 'assign_functions_to_DNA',
166                                  \&id_seq_pair_bundler,
167                                  \&tab_delimited_output_parser, $params, $req_bytes);
168  }  }
169    
170  sub id_seq_pair_bundler  sub id_seq_pair_bundler
# Line 90  Line 198 
198    
199  sub new  sub new
200  {  {
201      my($class, $work_queue, $server_url, $function, $input_bundler, $output_parser) = @_;      my($class, $work_queue, $server_url, $function, $input_bundler, $output_parser, $form_vars, $req_bytes) = @_;
202    
203      my $self = {      my $self = {
204          work_queue => $work_queue,          work_queue => $work_queue,
# Line 100  Line 208 
208          output_parser => $output_parser,          output_parser => $output_parser,
209          ua => LWP::UserAgent->new(),          ua => LWP::UserAgent->new(),
210          cur_result => undef,          cur_result => undef,
211            form_vars => $form_vars ? $form_vars : [],
212            req_byts => ($req_bytes ? $req_bytes : 16000),
213      };      };
214      return bless $self, $class;      return bless $self, $class;
215  }  }
# Line 108  Line 218 
218  {  {
219      my($self) = @_;      my($self) = @_;
220    
221      if ($self->{cur_result})      my $res =  $self->get_next_from_result();
222    
223        if ($res)
224      {      {
225          return $self->get_next_from_result();          return $res;
226      }      }
227      else      else
228      {      {
229          my @inp = $self->{work_queue}->get_next_n_bytes(16000);          my @inp = $self->{work_queue}->get_next_n_bytes(16000);
230          if (@inp)          if (@inp)
231          {          {
232              my $form = [function => $self->{function},              my $form = [@{$self->{form_vars}}];
233                          map { &{$self->{input_bundler}}($_) } @inp ];              push(@$form, function => $self->{function},
234                             map { &{$self->{input_bundler}}($_) } @inp);
235              # print "Invoke " .Dumper($form);              # print "Invoke " .Dumper($form);
236    
237              my $res = $self->{ua}->post($self->{server_url}, $form);              my $res = $self->{ua}->post($self->{server_url}, $form);
238              if ($res->is_success)              if ($res->is_success)
239              {              {
240                  $self->{cur_result} = $res->content;                  $self->{cur_result} = [YAML::Load($res->content)];
241                  #print "res: $self->{cur_result}\n";                  #print "res: $self->{cur_result}\n";
242                  return $self->get_next_from_result();                  return $self->get_next_from_result();
243              }              }
244              else              else
245              {              {
246                  die "error on post " . $res->content;                  die "error " . $res->status_line . " on post " . $res->content;
247              }              }
248          }          }
249          else          else
# Line 143  Line 256 
256  sub get_next_from_result  sub get_next_from_result
257  {  {
258      my($self) = @_;      my($self) = @_;
259      if ($self->{cur_result} =~ s/^([^\n]*)\n//)      my $l = $self->{cur_result};
260        if ($l and @$l)
261        {
262            return shift(@$l);
263        }
264        else
265      {      {
266          return &{$self->{output_parser}}($1);          delete $self->{cur_result};
267            return undef;
268      }      }
269  }  }
270    

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.11

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3