Bio-CIPRES

 view release on metacpan or  search on metacpan

lib/Bio/CIPRES/Output.pm  view on Meta::CPAN

package Bio::CIPRES::Output;

use 5.012;
use strict;
use warnings;

use Carp;
use XML::LibXML;
use Scalar::Util qw/blessed weaken/;

use Bio::CIPRES::Error;

sub new {

    my ($class, %args) = @_;

    my $self = bless {}, $class;

    croak "Must define user agent" if (! defined $args{agent});
    croak "Agent must be an LWP::UserAgent object"
        if ( blessed($args{agent}) ne 'LWP::UserAgent' );
    $self->{agent} = $args{agent};
    weaken( $self->{agent} );

    croak "Must define initial status" if (! defined $args{dom});
    $self->_parse_dom( $args{dom} );

    return $self;


}

sub size  { return $_[0]->{length}       };
sub name  { return $_[0]->{filename}     };
sub group { return $_[0]->{group}        };
sub url   { return $_[0]->{url_download} };

sub download {

    my ($self, %args) = @_;

    # don't overwrite existing files unless told to
    if (
        defined $args{out}
        && ! $args{overwrite}
        && -e $args{out}
    ) {
        die "Output file exists and 'overwrite' not given";
    };
        
    my @a = $self->{url_download};
    push @a, ':content_file', $args{out}
        if (defined $args{out});

    my $res = $self->{agent}->get(@a)
        or croak "LWP internal error: $@";

    die Bio::CIPRES::Error->new( $res->content )
        if (! $res->is_success);
    die "Unspecified error on download"
        if ($res->header('X-Died')
        || $res->header('Client-Aborted'));

    if (defined $args{out}) {
        croak "Error saving file to disk: missing output"
            if (! -e $args{out});
        croak "Downloaded file wrong size"
            if (-s $args{out} != $self->size);
    }
    else {
        croak "Downloaded content wrong size"
            if (length($res->content) != $self->size);
    }

    return defined $args{out}
        ? 1
        : $res->content;

}

sub _parse_dom {

    my ($self, $dom) = @_;



( run in 0.736 second using v1.01-cache-2.11-cpan-39bf76dae61 )