IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6588


Ignore:
Timestamp:
Mar 14, 2006, 5:30:51 PM (20 years ago)
Author:
jhoblitt
Message:

add DataStore::File->request (sans tests)

Location:
trunk/DataStore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/DataStore/Build.PL

    r6486 r6588  
    1212        'Data::Validate::URI'   => '0.01',
    1313        'LWP::UserAgent'        => 0,
     14        'POSIX'                 => 0,
    1415        'Params::Validate'      => '0.77',
    1516        'Regexp::Common'        => '2.113',
  • trunk/DataStore/lib/DataStore/File.pm

    r6543 r6588  
    11# Copyright (C) 2006  Joshua Hoblitt
    22#
    3 # $Id: File.pm,v 1.2 2006-03-08 02:12:17 jhoblitt Exp $
     3# $Id: File.pm,v 1.3 2006-03-15 03:30:51 jhoblitt Exp $
    44
    55package DataStore::File;
     
    1313use base qw( DataStore::Record );
    1414
     15use Carp qw( carp );
     16use Digest::MD5::File qw( file_md5_hex );
     17use POSIX;
    1518use Params::Validate qw( validate SCALAR );
    1619
     
    8386}
    8487
     88=back
     89
     90=head3 Object Methods
     91
     92=over 4
     93
     94=item * C<request()>
     95
     96=cut
     97
     98sub request
     99{
     100    my $self = shift;
     101
     102    my %p = validate(@_,
     103        {
     104            filename    => {
     105                type        => SCALAR,
     106                regex       => qr/\S+/, # string with atleast 1 non WS char
     107                callbacks   => {
     108                    'write access' => sub {
     109                        POSIX::access($_[0], &POSIX::W_OK);
     110                    },
     111                },
     112            },
     113        },
     114    );
     115
     116    # make request
     117    my $ua = LWP::UserAgent->new;
     118    my $request = HTTP::Request->new(GET => $self->uri);
     119    my $response = $ua->request($request, $p{filename});
     120
     121    if (! $response->is_success) {
     122        carp $response->status_line;
     123        return;
     124    }
     125
     126    if (defined $self->bytes) {
     127        my $size = stat($p{filename})->size;
     128        if (! $self->bytes == $size) {
     129            unlink $p{filename};
     130            carp "uri: ", $self->uri,
     131                 " - expected size: ", $self->bytes,
     132                 " got: ", $size;
     133            return;
     134        }
     135    }
     136
     137    if (defined $self->md5sum) {
     138        my $md5 = file_md5_hex($p{filename});
     139        if (! $self->md5sum eq $md5) {
     140            unlink $p{filename};
     141            carp "uri: ", $self->uri,
     142                 " - expected md5: ", $self->md5sum,
     143                 " got: ", $md5;
     144            return;
     145        }
     146    }
     147
     148    return 1;
     149}
     150
    851511;
    86152
Note: See TracChangeset for help on using the changeset viewer.