[librecat-dev] Error when processing the same file twice

Patrick Hochstenbach Patrick.Hochstenbach at UGent.be
Mon Dec 3 16:51:14 CET 2018


Hi Georg

I also tested the code in Dancer2 and still I get the correct answer. Here is my code, can you try that?


# test.pl
use Dancer2;

get '/' => sub {
    use Catmandu;

    my $importer1 = Catmandu->importer('MARC', file => 'camel.mrc');
    my $fixer1    = Catmandu::Fix->new(fixes => ['add_field(foo,bar)']);

    my $exporter1  = Catmandu->exporter('JSON', file => 'test.json');

    $exporter1->add_many($fixer1->fix($importer1));
    $exporter1->commit;

    my $importer2 = Catmandu->importer('MARC', file => 'camel.mrc');
    my $fixer2    = Catmandu::Fix->new(fixes => ['add_field(foo,bar)']);

    my $exporter2  = Catmandu->exporter('MARC', file => 'test.mrc');

    $exporter2->add_many($fixer2->fix($importer2));
    $exporter2->commit;

    "Done!";
};
dance;


$ perl test.pl

and visit http://localhost:3000

Br
Patrick

> On 28 Nov 2018, at 11:11, Mayr-Duffner, Georg <georg.mayr-duffner at wu.ac.at> wrote:
> 
> Hello Patrick,
> 
> thank you for your quick response. Yes, that works for me. Also, a more complex version does. But as soon as called from the Dancer2 subroutine, it breaks.
> 
> Best regards
> Georg
> 
> Am 28.11.18, 10:32 schrieb "Patrick Hochstenbach" <Patrick.Hochstenbach at UGent.be>:
> 
> 
> 
>    Hello Georg
> 
>    I can’t repeat the error on my machine with a simplified version of your script. I use Catmandu 1.09 and Catmandu::MARC 1.231.
> 
>    Can you run the ‘test.pl’ script in the attachement and see if you sill get the errors you report?
> 
>    Patrick
> 
>> On 27 Nov 2018, at 21:39, Mayr-Duffner, Georg <georg.mayr-duffner at wu.ac.at> wrote:
>> 
>> Hello,
>> 
>> I‘m trying to set up a web service (with dancer2) that does some Catmandu transformations and I‘m hopelessly stuck. I try to first do a MARC to JSON conversion to get some data out of a MARC input file (which in the end will go into a MongoDB) and then the same input file should be processed again in order to output an enriched MARC file. I can run one or the other but when I try to process both I get an error 
>> 
>> Can't locate object method "new" via package "Catmandu::Exporter::MARC" at /Users/gduffner/perl5/perlbrew/perls/perl-5.26.2/lib/site_perl/5.26.2/Catmandu/Env.pm line 219, <GEN2> line 12.
>> 
>> Could you please help me track that down?
>> 
>> Here’s the code of the subroutine:
>> 
>> post '/cleanupMarc' => sub {
>>   my $sigel = param('paketSigel');
>>   my $type  = param('inputFileType');
>>   my $packagemonth = param('packageMonth');
>> 
>>   my $input = request->upload('inputFile');
>>   my $uploaddir   = path(config->{appdir}, 'uploads');
>>   mkdir $uploaddir if not -e $uploaddir;
>>   my $inputpath  = path($uploaddir, $input->basename);
>>   $input->copy_to($inputpath);
>> 
>>   my $dldir = path(config->{public_dir}, 'downloads');
>>   mkdir $dldir if not -e $dldir;
>> 
>>   # marc2json
>>   my $jsonOutput = "$dldir/output1.json";
>> 
>>   my $jsonImporter = Catmandu->importer('MARC', file => $inputpath);#, type => $type);
>> 
>>   my $jsonFixer = Catmandu::Fix->new(
>>       variables => { sigel => $sigel, },
>>       fixes => ['fixfiles/IDs2json.fix'],
>>   );
>>   my $jsonExporter = Catmandu->exporter('JSON', file => $jsonOutput);
>>   my $fixed_jsonImporter = $jsonFixer->fix($jsonImporter);
>>   $jsonExporter->add_many($fixed_jsonImporter->benchmark);
>>   $jsonExporter->commit;
>>   undef($jsonExporter);
>> 
>>   # marc2marc
>>   my $marcOutput = "$dldir/output.mrc";
>>   my $marcImporter  = Catmandu->importer('MARC', file => $inputpath);#, type => $type);
>>   my $marcFixer = Catmandu::Fix->new(
>>       variables => { sigel => $sigel,
>>                      MARC2ISO => 'fixfiles/marc2iso3166H.csv',
>>                      ISO2MARC => 'fixfiles/iso3166H2marc.csv',
>>                      today => '20181122',},
>>       fixes => ['fixfiles/ebook.fix'],
>>   );
>>   my $marcExporter = Catmandu->exporter('MARC', file => $marcOutput);
>>   my $fixed_marcImporter = $marcFixer->fix($marcImporter);
>>   $marcExporter->add_many($fixed_marcImporter->benchmark);
>>   $marcExporter->commit;
>>   undef($marcExporter);
>> 
>>   redirect('/');
>> };
>> 
>> Thank you very much!
>> 
>> Best regards
>> Georg
>> 
>> 
>> 
>> _______________________________________________
>> librecat-dev mailing list
>> - send list mails to librecat-dev at lists.uni-bielefeld.de
>> - to unsubscribe or change options, visit https://lists.uni-bielefeld.de/mailman2/cgi/unibi/listinfo/librecat-dev
>> - project website: http://librecat.org/
> 
> 
> 




More information about the librecat-dev mailing list