Changeset 7951
- Timestamp:
- Jul 21, 2006, 3:17:34 PM (20 years ago)
- Location:
- trunk/DataStore
- Files:
-
- 3 added
- 12 edited
-
MANIFEST (modified) (2 diffs)
-
lib/DataStore.pm (modified) (2 diffs)
-
lib/DataStore/File.pm (modified) (5 diffs)
-
lib/DataStore/File/Parser.pm (modified) (5 diffs)
-
lib/DataStore/FileSet.pm (modified) (5 diffs)
-
lib/DataStore/FileSet/Parser.pm (modified) (4 diffs)
-
lib/DataStore/Product (added)
-
lib/DataStore/Product.pm (modified) (6 diffs)
-
lib/DataStore/Product/Parser.pm (added)
-
lib/DataStore/Response.pm (modified) (5 diffs)
-
lib/DataStore/Root.pm (added)
-
lib/DataStore/Utils.pm (modified) (3 diffs)
-
t/01_load.t (modified) (2 diffs)
-
t/02_fileset_parse.t (modified) (2 diffs)
-
t/08_response.t (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/DataStore/MANIFEST
r6650 r7951 3 3 LICENSE 4 4 MANIFEST 5 META.yml6 Makefile.PL7 5 README 8 6 Todo … … 13 11 lib/DataStore/FileSet/Parser.pm 14 12 lib/DataStore/Product.pm 13 lib/DataStore/Product/Parser.pm 14 lib/DataStore/Root.pm 15 15 lib/DataStore/Record.pm 16 16 lib/DataStore/Response.pm -
trunk/DataStore/lib/DataStore.pm
r6652 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: DataStore.pm,v 1. 4 2006-03-20 22:09:20 jhoblittExp $3 # $Id: DataStore.pm,v 1.5 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore; … … 111 111 use DataStore::FileSet::Parser; 112 112 use DataStore::FileSet; 113 use DataStore::Product::Parser; 113 114 use DataStore::Product; 115 use DataStore::Root; 114 116 use DataStore::Response; 115 117 use DataStore::Utils; -
trunk/DataStore/lib/DataStore/File.pm
r6652 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: File.pm,v 1.1 2 2006-03-20 22:11:24 jhoblittExp $3 # $Id: File.pm,v 1.13 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::File; … … 18 18 use Digest::MD5::File qw( file_md5_hex ); 19 19 use File::stat; 20 use Params::Validate qw( validate SCALAR );20 use Params::Validate qw( validate SCALAR ARRAYREF ); 21 21 22 22 use vars qw( @BASE_FIELDS ); 23 23 24 @BASE_FIELDS = qw( fileid bytes md5sum type );24 @BASE_FIELDS = qw( fileid bytes md5sum type extra ); 25 25 26 26 __PACKAGE__->mk_accessors(@BASE_FIELDS); … … 129 129 callbacks => { 130 130 'is valid uri filename' => sub { $_[0] !~ m|/$| }, 131 132 131 }, 133 132 }, … … 155 154 optional => 1, 156 155 }, 156 extra => { 157 type => SCALAR | ARRAYREF, 158 optional => 1, 159 }, 157 160 }, 158 161 ); … … 228 231 my $response = $ua->request($request, $p{filename}); 229 232 230 if (! $response->is_success) { 231 carp $response->status_line; 232 return; 233 } 234 235 if (defined $self->bytes) { 236 my $size = stat($p{filename})->size; 237 if (! $self->bytes == $size) { 238 unlink $p{filename}; 239 carp "uri: ", $self->uri, 240 " - expected size: ", $self->bytes, 241 " got: ", $size; 242 return; 233 if ($response->is_success) { 234 # check size 235 if (defined $self->bytes) { 236 my $size = stat($p{filename})->size; 237 if (! $self->bytes == $size) { 238 unlink $p{filename}; 239 carp "uri: ", $self->uri, 240 " - expected size: ", $self->bytes, 241 " got: ", $size; 242 return; 243 } 244 } 245 246 if (defined $self->md5sum) { 247 my $md5 = file_md5_hex($p{filename}); 248 if (! $self->md5sum eq $md5) { 249 unlink $p{filename}; 250 carp "uri: ", $self->uri, 251 " - expected md5: ", $self->md5sum, 252 " got: ", $md5; 253 return; 254 } 243 255 } 244 256 } 245 257 246 if (defined $self->md5sum) {247 my $md5 = file_md5_hex($p{filename});248 if (! $self->md5sum eq $md5) {249 unlink $p{filename};250 carp "uri: ", $self->uri,251 " - expected md5: ", $self->md5sum,252 " got: ", $md5;253 return;254 }255 }256 257 258 # return DS::Response object 258 259 my $dsr = DataStore::Response->new( 259 is_success => 1,260 is_success => $response->is_success, 260 261 code => $response->code, 261 262 status_line => $response->status_line, -
trunk/DataStore/lib/DataStore/File/Parser.pm
r6616 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: Parser.pm,v 1.1 0 2006-03-17 01:18:48 jhoblittExp $3 # $Id: Parser.pm,v 1.11 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::File::Parser; … … 90 90 'is valid http uri' => 91 91 sub { is_uri($_[0]) and $_[0] =~ /^http:/ }, 92 'uri ends with /' => sub { $_[0] =~ m|/$| }, 92 93 }, 93 94 default => 'http://example.org/', … … 147 148 } 148 149 149 # fields are not allowed to contain \#150 150 foreach my $field (@fields) { 151 # fields are not allowed to contain \# 151 152 if ($field =~ /\#/) { 152 153 carp "line $lineno: field $field: contains #: $line"; 153 154 next LINE; 154 155 } 156 157 # strip leading and trailing whitespace 158 $field =~ s/^\s+//; 159 $field =~ s/\s+$//; 155 160 } 156 161 … … 185 190 } 186 191 192 my @extra = @fields[4 .. $#fields] if $#fields >= 4; 193 187 194 # fifo 188 195 push @data, DataStore::File->new({ … … 191 198 md5sum => $md5sum, 192 199 type => $type, 200 extra => \@extra, 193 201 uri => $self->base_uri . $fileid, 194 202 }); -
trunk/DataStore/lib/DataStore/FileSet.pm
r6652 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: FileSet.pm,v 1.1 0 2006-03-20 22:11:24 jhoblittExp $3 # $Id: FileSet.pm,v 1.11 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::FileSet; … … 18 18 use DataStore::Utils qw( $STD_FIELD $TIME_FIELD %KNOWN_FILESET_TYPES ); 19 19 use LWP::UserAgent; 20 use Params::Validate qw( validate SCALAR );20 use Params::Validate qw( validate SCALAR ARRAYREF ); 21 21 22 22 use vars qw( @BASE_FIELDS ); 23 23 24 @BASE_FIELDS = qw( fileset datetime type );24 @BASE_FIELDS = qw( fileset datetime type extra ); 25 25 26 26 __PACKAGE__->mk_accessors(@BASE_FIELDS); … … 119 119 type => SCALAR, 120 120 callbacks => { 121 'is valid uri dirname' => sub { $_[0] =~ m|/$| }, 122 123 }, 121 'is valid uri dirname' => sub { $_[0] =~ m|/$| }, 122 } 124 123 }, 125 124 fileset => { … … 141 140 optional => 1, 142 141 }, 142 extra => { 143 type => SCALAR | ARRAYREF, 144 optional => 1, 145 }, 143 146 }, 144 147 ); … … 190 193 my $response = $ua->request($request); 191 194 192 if (! $response->is_success) { 193 carp $response->status_line; 194 return undef; 195 my $data; 196 197 if ($response->is_success) { 198 # parse document 199 my $parser = DataStore::File::Parser->new(base_uri => $self->uri); 200 201 $data = $parser->parse($response->content); 195 202 } 196 197 # parse document198 my $parser = DataStore::File::Parser->new;199 200 my $data = $parser->parse($response->content);201 202 unless ($data) {203 carp "Product contains no FileSets";204 return undef;205 }206 207 203 208 204 # return DS::Response object 209 205 my $dsr = DataStore::Response->new( 210 is_success => 1,206 is_success => $response->is_success, 211 207 code => $response->code, 212 208 status_line => $response->status_line, -
trunk/DataStore/lib/DataStore/FileSet/Parser.pm
r6616 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: Parser.pm,v 1.1 2 2006-03-17 01:18:48 jhoblittExp $3 # $Id: Parser.pm,v 1.13 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::FileSet::Parser; … … 146 146 } 147 147 148 # fields are not allowed to contain #149 148 foreach my $field (@fields) { 149 # fields are not allowed to contain # 150 150 if ($field =~ /\#/) { 151 151 carp "line $lineno: field $field: contains #: $line"; 152 152 next LINE; 153 153 } 154 155 # strip leading and trailing whitespace 156 $field =~ s/^\s+//; 157 $field =~ s/\s+$//; 154 158 } 155 159 … … 177 181 } 178 182 183 my @extra = @fields[3 .. $#fields] if $#fields >= 3; 184 179 185 # fifo 180 186 push @data, DataStore::FileSet->new({ … … 182 188 datetime => $datetime, 183 189 type => $type, 190 extra => \@extra, 184 191 uri => $self->base_uri . $fileset . '/', 185 192 }); -
trunk/DataStore/lib/DataStore/Product.pm
r6612 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: Product.pm,v 1. 7 2006-03-16 23:52:56 jhoblittExp $3 # $Id: Product.pm,v 1.8 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::Product; … … 17 17 use DataStore::Record; 18 18 use DataStore::Response; 19 use DataStore::Utils qw( $STD_FIELD );19 use DataStore::Utils qw( $STD_FIELD $TIME_FIELD %KNOWN_PRODUCT_TYPES ); 20 20 use LWP::UserAgent; 21 21 use Params::Validate qw( validate SCALAR); … … 23 23 use vars qw( @BASE_FIELDS ); 24 24 25 @BASE_FIELDS = qw( last_fileset);25 @BASE_FIELDS = qw( product last_fileset last_datetime type desc ); 26 26 27 27 __PACKAGE__->mk_ro_accessors(@BASE_FIELDS); … … 103 103 callbacks => { 104 104 'is valid uri dirname' => sub { $_[0] =~ m|/$| }, 105 106 105 } 106 }, 107 product => { 108 type => SCALAR, 109 optional => 1, 107 110 }, 108 111 last_fileset => { … … 112 115 }, 113 116 optional => 1, 117 }, 118 last_datetime => { 119 type => SCALAR, 120 regex => $TIME_FIELD, 121 optional => 1, 122 }, 123 type => { 124 type => SCALAR, 125 callbacks => { 126 'is valid type' => 127 sub { exists $KNOWN_PRODUCT_TYPES{$_[0]} }, 128 }, 129 optional => 1, 130 }, 131 desc => { 132 type => SCALAR, 133 optional => 1, 114 134 }, 115 135 }, … … 161 181 my $response = $ua->request($request); 162 182 163 if (! $response->is_success) { 164 carp $response->status_line; 165 return undef; 183 my $data; 184 185 if ($response->is_success) { 186 # parse document 187 my $parser = DataStore::FileSet::Parser->new(base_uri => $self->uri); 188 189 $data = $parser->parse($response->content); 166 190 } 167 168 # parse document169 my $parser = DataStore::FileSet::Parser->new;170 171 my $data = $parser->parse($response->content);172 173 unless ($data) {174 carp "Product contains no FileSets";175 return undef;176 }177 178 191 179 192 # return DS::Response object 180 193 my $dsr = DataStore::Response->new( 181 is_success => 1,194 is_success => $response->is_success, 182 195 code => $response->code, 183 196 status_line => $response->status_line, -
trunk/DataStore/lib/DataStore/Response.pm
r6603 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: Response.pm,v 1. 3 2006-03-16 21:44:58 jhoblittExp $3 # $Id: Response.pm,v 1.4 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::Response; … … 13 13 use base qw( Class::Accessor::Fast ); 14 14 15 use Params::Validate qw( validate ARRAYREF BOOLEAN SCALAR );15 use Params::Validate qw( validate ARRAYREF BOOLEAN SCALAR UNDEF ); 16 16 17 17 use vars qw( @BASE_FIELDS ); … … 39 39 ); 40 40 41 my $success = $dsr->is_success; 42 my $code = $dsr->code; 43 my $status_line = $dsr->status_line; 44 my $data = $dsr->data; 45 my DataStore::Response $response = $dsp->request; 41 if ($data) { 42 my $success = $dsr->is_success; 43 my $code = $dsr->code; 44 my $status_line = $dsr->status_line; 45 my $data = $dsr->data; 46 my DataStore::Response $response = $dsp->request; 47 } 46 48 47 49 =head1 DESCRIPTION … … 93 95 =item * data 94 96 95 Either a scalar value or an arrayref of scalar data.97 A scalar value, an arrayref of scalar data, or undef. 96 98 97 99 =item * request … … 126 128 }, 127 129 data => { 128 type => SCALAR | ARRAYREF ,130 type => SCALAR | ARRAYREF | UNDEF, 129 131 }, 130 132 request => { -
trunk/DataStore/lib/DataStore/Utils.pm
r6612 r7951 1 1 # Copyright (C) 2006 Joshua Hoblitt 2 2 # 3 # $Id: Utils.pm,v 1. 1 2006-03-16 23:52:56 jhoblittExp $3 # $Id: Utils.pm,v 1.2 2006-07-22 01:17:33 smalle Exp $ 4 4 5 5 package DataStore::Utils; … … 24 24 %KNOWN_FILE_TYPES 25 25 %KNOWN_FILESET_TYPES 26 %KNOWN_PRODUCT_TYPES 26 27 ); 27 28 … … 34 35 %KNOWN_FILE_TYPES 35 36 %KNOWN_FILESET_TYPES 37 %KNOWN_PRODUCT_TYPES 36 38 ); 37 39 38 40 $STD_FIELD = qr/^[a-z0-9-_.]+$/; 39 $TIME_FIELD = qr/^ (\d{4})-(\d\d)-(\d\d) T (\d\d):(\d\d):(\d\d) Z$/x;41 $TIME_FIELD = qr/^(\d{4})-(\d\d)-(\d\d) T (\d\d):(\d\d):(\d\d) Z$/x; 40 42 $BYTE_FIELD = qr/^\d+$/; 41 43 $MD5_FIELD = qr/^[0-9a-f]{32}$/; 42 44 %KNOWN_FILE_TYPES = map { $_ => 1 } qw( chip ); 43 45 %KNOWN_FILESET_TYPES = map { $_ => 1 } qw( object domeflat skyflat bias dark ); 46 %KNOWN_PRODUCT_TYPES = map { $_ => 1 } qw( image dump ); 44 47 45 48 =pod -
trunk/DataStore/t/01_load.t
r6612 r7951 5 5 use lib qw( ./lib ./t ); 6 6 7 use Test::More tests => 9;7 use Test::More tests => 11; 8 8 9 9 BEGIN { use_ok('DataStore'); } … … 13 13 BEGIN { use_ok('DataStore::FileSet::Parser'); } 14 14 BEGIN { use_ok('DataStore::Product'); } 15 BEGIN { use_ok('DataStore::Product::Parser'); } 16 BEGIN { use_ok('DataStore::Root'); } 15 17 BEGIN { use_ok('DataStore::Record'); } 16 18 BEGIN { use_ok('DataStore::Response'); } -
trunk/DataStore/t/02_fileset_parse.t
r6606 r7951 3 3 # Copyright (C) 2006 Joshua Hoblitt 4 4 # 5 # $Id: 02_fileset_parse.t,v 1. 6 2006-03-16 21:51:46 jhoblittExp $5 # $Id: 02_fileset_parse.t,v 1.7 2006-07-22 01:17:34 smalle Exp $ 6 6 7 7 use strict; … … 76 76 my $parser = DataStore::FileSet::Parser->new; 77 77 78 is($parser->parse('foobar|2006-01-0100:03:04 |object'), undef,78 is($parser->parse('foobar|2006-01-0100:03:04Z|object'), undef, 79 79 '->parse() returns undef on failure'); 80 80 } qr/does not conform /, -
trunk/DataStore/t/08_response.t
r6542 r7951 3 3 # Copyright (C) 2006 Joshua Hoblitt 4 4 # 5 # $Id: 08_response.t,v 1. 1 2006-03-08 02:11:46 jhoblittExp $5 # $Id: 08_response.t,v 1.2 2006-07-22 01:17:34 smalle Exp $ 6 6 7 7 use strict; … … 10 10 use lib qw( ./lib ./t ); 11 11 12 use Test::More tests => 9;12 use Test::More tests => 8; 13 13 14 14 =head1 NAME … … 81 81 82 82 eval { 83 my $dsr = DataStore::Response->new( data => undef );84 };85 like($@, qr/is not one of the allowed types/,86 '->new() fails when data is not valid');87 88 eval {89 83 my $dsr = DataStore::Response->new( 90 84 request => CGI->new,
Note:
See TracChangeset
for help on using the changeset viewer.
