From: Jason Stephenson Date: Mon, 5 Oct 2015 16:35:37 +0000 (-0400) Subject: LP 1502152: Improve marc_export warnings. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=cf4410e4e6678e374ef716f708d6b6ac3567d0ab;p=evergreen%2Fmasslnc.git LP 1502152: Improve marc_export warnings. Trap warnings from MARC libraries in marc_export so we can report the id of the record that triggered the warning. Use warn to print our warnings, instead of print STDERR. This includes the existing errors, trapped by eval, that were being printed to STDERR. To test ------- [1] Ensure that a record has an error that would become apparent during export. An easy way to do this is to insert the "‡" character in the contents of a subfield, then use --encoding MARC8 when exporting the record. [2] Run the MARC export, e.g., cat id_list | marc_export -i > /tmp/bibs.mrc [3] Verify that a warning is reported, e.g., Warning from bibliographic record 1: no mapping found at position 0... Signed-off-by: Jason Stephenson Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/support-scripts/marc_export.in b/Open-ILS/src/support-scripts/marc_export.in index 70a659f8e8..ef841e1bcb 100755 --- a/Open-ILS/src/support-scripts/marc_export.in +++ b/Open-ILS/src/support-scripts/marc_export.in @@ -419,13 +419,17 @@ sub next { if ($Marque::config->option_value('mfhd') && $self->{mfhds} && @{$self->{mfhds}}) { $r = shift(@{$self->{mfhds}}); eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from serial record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in serial record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in serial record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -437,13 +441,17 @@ sub next { $output = OpenSRF::Utils::JSON->perl2JSON($r); } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -510,21 +518,29 @@ sub next { } if ($Marque::config->option_value('format') eq 'XML') { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_xml_record; $output =~ s/^<\?.+?\?>$//mo; }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); return $self->next(); } } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_usmarc; }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); return $self->next(); } } @@ -730,13 +746,17 @@ sub next { } else { my $marc; eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -770,21 +790,29 @@ sub next { } if ($Marque::config->option_value('format') eq 'XML') { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_xml_record; $output =~ s/^<\?.+?\?>$//mo; }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); return $self->next(); } } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_usmarc; }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); return $self->next(); } }