Skip to content
Snippets Groups Projects
Commit 6f988651 authored by Andreas Romeyke's avatar Andreas Romeyke
Browse files

- added datemode using ranges

parent da6f3167
No related branches found
No related tags found
No related merge requests found
......@@ -37,11 +37,13 @@ sub opt_spec {
["aip|a=s" => "count AIPs by given AIP id"],
[ 'datemode' => hidden => {
one_of => [
[ 'creationdate|c=s' => 'search based on creation date in format "YYYY-MM-DD", ranges in format "YYYY-MM-DD...YYYY-MM-DD' ],
[ 'creationdate|c=s' => 'count based on creation date in format "YYYY-MM-DD"' ],
[ 'creationdate-from=s' => 'count based on creation date ranges, beginning date in format "YYYY-MM-DD", implies "--creationdate-to"'],
#[ 'modificationdate|m=s' => 'search based on modificationdate string' ]
]
}
],
[ 'creationdate-to=s' => 'search based on creation date ranges, beginning date in format "YYYY-MM-DD", implies "--creationdate-from"'],
['descriptive|d=s' => 'count based on string search in descriptive metadata, using exact match'],
['fuzzy|f=s' => 'count based on string search in descriptive metadata, using phrase prefix match' ],
['lzaid|l=s' => 'count AIPs by given LZA id'],
......@@ -60,6 +62,7 @@ sub opt_spec {
one_of => [
[ 'only-ldp-saxon', 'only if AIP is LDP Saxon funded' ],
[ 'only-ldp', 'only if AIP is LDP funded' ],
[ 'only-ldp-without-saxon', 'only if AIP is LDP but not Saxon funded' ],
[ 'no-ldp', 'only if AIP is not LDP funded' ],
] } ],
);
......@@ -70,22 +73,39 @@ sub validate_args {
SLUB::LZA::TA::common_global_validate($self, $opt, $args);
# no args allowed but options!
$self->usage_error("No args allowed") if @$args;
my $from_epoch;
my $to_epoch;
if (exists $opt->{creationdate}) {
if ($opt->{creationdate} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
my $from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
my $to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
} elsif (
$opt->{creationdate} =~ m/^(\d{4})-(\d{2})-(\d{2})\.\.\.(\d{4})-(\d{2})-(\d{2})$/ ) {
my $from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
my $to_epoch = Date_to_Time($4, $5, $6, 23, 59, 59);
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
$from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
$to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
} else {
$self->usage_error('--creationdate expects date in format "YYYY-MM-DD", ranges in format "YYYY-MM-DD...YYYY-MM-DD"');
$self->usage_error('--creationdate expects date in format "YYYY-MM-DD"');
}
}
if (exists $opt->{creationdate_from}) {
$self->usage_error('--creationdate-from implies --creationdate-to"') unless exists $opt->{creationdate_to};
if ($opt->{creationdate_from} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
$from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
} else {
$self->usage_error('--creationdate-from expects date in format "YYYY-MM-DD", got "'.$opt->{creationdate_from}.'"');
}
}
if (exists $opt->{creationdate_to}) {
$self->usage_error('--creationdate-to implies --creationdate-from"') unless exists $opt->{creationdate_from};
if ($opt->{creationdate_to} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
$to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
} else {
$self->usage_error('--creationdate-to expects date in format "YYYY-MM-DD", got "'.$opt->{creationdate_to}.'"');
}
}
if (defined $from_epoch and defined $to_epoch) {
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
$self->usage_error('--date-to should have a date newer than --date-from') if ($from_epoch > $to_epoch);
}
if (exists $opt->{pronom_id}) {
$self->usage_error("--pronom-id expects string which is conform to PUID structure as described in https://www.nationalarchives.gov.uk/aboutapps/pronom/puid.htm")
unless ($opt->{pronom_id} =~ m/^(x-)?fmt\/[a-z0-9]+$/ );
......
......@@ -52,9 +52,11 @@ sub opt_spec {
[ 'yearly|y' => 'report based on last year' ],
[ 'ldpyearly' => 'report based on last LDP year 01.11. - 31.10.'],
[ 'complete|c'=> 'report based on all AIPs'],
[ 'date-from=s' => 'report based on date range, beginning date in format "YYYY-MM-DD", implies "--date-to"'],
],
},
],
[ 'date-to=s' => 'report based on date range, end date in format "YYYY-MM-DD", implies "--date-from"'],
[],
[ 'output-format' => hidden => {
one_of => [
......@@ -100,18 +102,38 @@ sub validate_args {
($from_year, $from_month, $from_day) = Add_Delta_YM($cyear, 1, 1, -1, -2);
($to_year, $to_month, $to_day) = Add_Delta_YMD($from_year, $from_month, $from_day, 1, 0, -1);
}
if (exists $opt->{date_from}) {
$self->usage_error('--date-from implies --date-to"') unless exists $opt->{date_to};
if ($opt->{date_from} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
($from_year, $from_month, $from_day) = ($1, $2, $3);
} else {
$self->usage_error('--date-from expects date in format "YYYY-MM-DD", got "'.$opt->{date_from}.'"');
}
}
if (exists $opt->{date_to}) {
$self->usage_error('--date-to implies --date-from"') unless exists $opt->{date_from};
if ($opt->{date_to} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
($to_year, $to_month, $to_day) = ($1, $2, $3);
} else {
$self->usage_error('--date-to expects date in format "YYYY-MM-DD", got "',$opt->{date_to}.'"');
}
}
if (!exists $opt->{output_format}) {
$opt->{output_format} = 'output_as_asciidoc';
}
printf STDERR "reporting for period %04u-%02u-%02u … %04u-%02u-%02u\n", $from_year, $from_month, $from_day, $to_year, $to_month, $to_day;
my $from_epoch = Date_to_Time($from_year, $from_month, $from_day, 0, 0, 0);
my $to_epoch = Date_to_Time($to_year, $to_month, $to_day, 0, 0, 0);
$self->usage_error('--date-to should have a date newer than --date-from')if ($from_epoch > $to_epoch);
printf STDERR "reporting for period %04u-%02u-%02u … %04u-%02u-%02u\n", $from_year, $from_month, $from_day, $to_year, $to_month, $to_day;
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
$opt->{creationdate_epochs}->{from_string} = sprintf("%04u-%02u-%02u", $from_year, $from_month, $from_day);
$opt->{creationdate_epochs}->{to_string} = sprintf("%04u-%02u-%02u", $to_year, $to_month, $to_day);
return 1;
}
sub _execute {
my ($self, $opt, $args) = @_;
my $aips_query;
......
......@@ -61,8 +61,7 @@ sub opt_spec {
]
}
],
[ 'creationdate-to=s' => 'search based on creation date ranges, beginning date in format "YYYY-MM-DD", implies "--creationdate-from"',
{implies => 'creationdate_from' }],
[ 'creationdate-to=s' => 'search based on creation date ranges, beginning date in format "YYYY-MM-DD", implies "--creationdate-from"'],
[ 'descriptive|d=s', 'search descriptive metadata, using exact match' ],
[ 'fuzzy|f=s', 'search descriptive metadata, using phrase prefix match' ],
[ 'lzaid|l=s', 'search a specific AIP by given LZA id' ],
......@@ -122,18 +121,12 @@ sub validate_args {
SLUB::LZA::TA::common_global_validate($self, $opt, $args);
# no args allowed but options!
$self->usage_error("No args allowed") if @$args;
my $from_epoch;
my $to_epoch;
if (exists $opt->{creationdate}) {
if ($opt->{creationdate} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
my $from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
my $to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
} elsif (
$opt->{creationdate} =~ m/^(\d{4})-(\d{2})-(\d{2})\.\.\.(\d{4})-(\d{2})-(\d{2})$/ ) {
my $from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
my $to_epoch = Date_to_Time($4, $5, $6, 23, 59, 59);
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
$from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
$to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
} else {
$self->usage_error('--creationdate expects date in format "YYYY-MM-DD"');
}
......@@ -141,20 +134,23 @@ sub validate_args {
if (exists $opt->{creationdate_from}) {
$self->usage_error('--creationdate-from implies --creationdate-to"') unless exists $opt->{creationdate_to};
if ($opt->{creationdate_from} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
my $from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
$opt->{creationdate_epochs}->{from} = $from_epoch;
$from_epoch = Date_to_Time($1, $2, $3, 0, 0, 0);
} else {
$self->usage_error('--creationdate-from expects date in format "YYYY-MM-DD"');
$self->usage_error('--creationdate-from expects date in format "YYYY-MM-DD", got "'.$opt->{creationdate_from}.'"');
}
}
if (exists $opt->{creationdate_to}) {
$self->usage_error('--creationdate-to implies --creationdate-from"') unless exists $opt->{creationdate_from};
if ($opt->{creationdate_from} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
my $to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
$opt->{creationdate_epochs}->{to} = $to_epoch;
if ($opt->{creationdate_to} =~ m/^(\d{4})-(\d{2})-(\d{2})$/ ) {
$to_epoch = Date_to_Time($1, $2, $3, 23, 59, 59);
} else {
$self->usage_error('--creationdate-to expects date in format "YYYY-MM-DD"');
$self->usage_error('--creationdate-to expects date in format "YYYY-MM-DD", got "'.$opt->{creationdate_to}.'"');
}
}
if (defined $from_epoch and defined $to_epoch) {
$opt->{creationdate_epochs}->{from} = $from_epoch;
$opt->{creationdate_epochs}->{to} = $to_epoch;
$self->usage_error('--date-to should have a date newer than --date-from') if ($from_epoch > $to_epoch);
}
if (exists $opt->{pronom_id}) {
$self->usage_error("--pronom-id expects string which is conform to PUID structure as described in https://www.nationalarchives.gov.uk/aboutapps/pronom/puid.htm")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment