Message: can't dup NilClass
. in jobs/import_swissmedic
Message: undefined method `formats' for (image):ODDB::Text::ImageLink
when calling export_daily.
could not connect to www.swissreg.ch: #<Net::HTTPInternalServerError:0x007f8a7d69bb58>
---
Message: can't dup NilClass
. in jobs/import_swissmedicAnalysing the info presented by last import (where deleting 33481 worked, but not with 35342) with much more debug, which is
2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 178: delete iksnr '33481' seqnr 01 pack 2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 180: delete iksnr '33481' ptr :!registration,33481!sequence,01!package,012. row ["33481", "01", "012", 0] 2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 184: delete object #<ODDB::Package:0x007fa9c9641bd8 @swissmedic_source={:import_date=>#<Date: 2013-11-05 ((2456602j,0s,0n),+0s,2299161j)>, :iksnr=>"33481", :seqnr=>"01", :name_base=>"Vitamin D3 Streuli, Tropfen", :company=>"Streuli Pharma AG", :index_therapeuticus=>"07.02.3.", :atc_class=>"A11CC05", :production_science=>"Synthetika human", :registration_date=>#<Date: 1967-07-21 ((2439693j,0s,0n),+0s,2299161j)>, :sequence_date=>#<Date: 1967-07-21 ((2439693j,0s,0n),+0s,2299161j)>, :expiry_date=>#<Date: 2017-09-12 ((2458009j,0s,0n),+0s,2299161j)>, :ikscd=>"012", :size=>"10", :unit=>"ml", :ikscat=>"D", :substances=>"cholecalciferolum", :composition=>"cholecalciferolum 4000 U.I., excipiens ad solutionem pro 1 ml corresp. 40 guttae corresp. ethanolum 49 % V/V.", :indication_registration=>"Vitamin D-Präparat", :indication_sequence=>nil}, @oid=2738, @data_origins={"size"=>:swissmedic, "descr"=>:swissmedic, "commercial_form"=>:swissmedic, "swissmedic_source"=>:swissmedic, "out_of_trade"=>:refdata, "pharmacode"=>:bag, "refdata_override"=>:refdata}, @odba_persistent=true, @ikscat="D", @revision=2014-01-01 14:13:32 +0100, @sequence=#<ODBA::Stub:70183602500320#70343 @odba_class=ODDB::Sequence @odba_container=70183602490860#210811>, @odba_id=210811, @parts=nil, @odba_observers=[], @pointer=:!registration,33481!sequence,01!package,012., @ikscd="012", @feedbacks=nil, @refdata_override=false, @out_of_trade=false, @narcotics=nil, @odba_target_ids=nil, @odba_prefetch=false, @prices={:public=>#<ODBA::Stub:70183602499000#28084704 @odba_class=Array @odba_container=70183602499040#28084703>, :exfactory=>#<ODBA::Stub:70183602498720#28084705 @odba_class=Array @odba_container=70183602499040#28084703>}, @comparable_size=Quanty(10.0,'ml'), @comform=nil, @price_exfactory=nil, @descr=nil, @pharmacode="1538492", @mail_order_prices=nil, @price_public=nil> 2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 186: delete object.oid 2738 ensure_object_connections: ensure 2 target_ids [689832, 26257256, 10, 6, 934654, 795431, 9, 11, 868627, 3, 20, 18, 8, 724033, 1252741, 726317, 17, 16, 13, 393389, 780360, 19, 1211301, 15, 5, 12, 7, 724030, 14, 1067430, 9587859, 4, 22, 21, 810961, 954379, 28724410, 28834017, 28850745, 31673883, 31208308] sql SELECT target_id FROM object_connection WHERE origin_id = ? ensure_object_connections: ensure 31687567 target_ids [] sql SELECT target_id FROM object_connection WHERE origin_id = ? ensure_object_connections: ensure 210811 target_ids [70343, 31687567] sql SELECT target_id FROM object_connection WHERE origin_id = ? 2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 178: delete iksnr '35342' seqnr 01 pack 2014-05-13 21:51:52 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 180: delete iksnr '35342' ptr :!registration,35342!sequence,01!package,028. row ["35342", "01", "028", 0] 2014-05-13 21:51:53 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 184: delete object #<ODDB::Package:0x007fa9c99e9790 @swissmedic_source={:import_date=>#<Date: 2013-11-05 ((2456602j,0s,0n),+0s,2299161j)>, :iksnr=>"35342", :seqnr=>"01", :name_base=>"Primpéran, suppositoires pour adultes", :company=>"Sanofi-Aventis (Suisse) SA", :index_therapeuticus=>"04.06.0.", :atc_class=>"A03FA01", :production_science=>"Synthetika human", :registration_date=>#<Date: 1970-06-19 ((2440757j,0s,0n),+0s,2299161j)>, :sequence_date=>#<Date: 1970-06-19 ((2440757j,0s,0n),+0s,2299161j)>, :expiry_date=>#<Date: 2016-02-07 ((2457426j,0s,0n),+0s,2299161j)>, :ikscd=>"028", :size=>"6", :unit=>"Suppositorien", :ikscat=>"B", :substances=>"metoclopramidum", :composition=>"metoclopramidum 20 mg, excipiens pro suppositorio.", :indication_registration=>"Troubles digestifs", :indication_sequence=>nil}, @oid=4726, @data_origins={"size"=>:swissmedic, "deductible"=>:bag, "pharmacode"=>:refdata, "price_public"=>:bag, "price_exfactory"=>:sl, "sl_generic_type"=>:bag, "swissmedic_source"=>:swissmedic, "refdata_override"=>:swissmedic}, @odba_persistent=true, @ikscat="B", @revision=2014-05-03 01:02:31 +0200, @sequence=#<ODBA::Stub:70183604411560#73025 @odba_class= @odba_container=70183604407240#220866>, @odba_id=220866, @parts=#<ODBA::Stub:70183604427120#28868651 @odba_class=Array @odba_container=70183604407240#220866>, @odba_observers=[], @pointer=:!registration,35342!sequence,01!package,028., @ikscd="028", @feedbacks=nil, @refdata_override=true, @narcotics=nil, @odba_target_ids=nil, @odba_prefetch=false, @prices={:public=>#<ODBA::Stub:70183604434920#27852065 @odba_class=Array @odba_container=70183604419200#27852064>, :exfactory=>#<ODBA::Stub:70183604429980#27852066 @odba_class=Array @odba_container=70183604419200#27852064>}, @comparable_size=Quanty(6.0,''), @price_exfactory=148, @descr="", @pharmacode="137816", @deductible=:deductible_g, @sl_entry=#<ODBA::Stub:70183604442040#706979 @odba_class= @odba_container=70183604407240#220866>, @sl_generic_type=nil, @mail_order_prices=#<ODBA::Stub:70183604420920#31672915 @odba_class=Array @odba_container=70183604407240#220866>> 2014-05-13 21:51:53 +0200: /var/www/oddb.org/src/plugin/swissmedic.rb: 186: delete object.oid 4726 ensure_object_connections: ensure 2 target_ids [689832, 26257256, 10, 6, 934654, 795431, 9, 11, 868627, 3, 20, 18, 8, 724033, 1252741, 726317, 17, 16, 13, 393389, 780360, 19, 1211301, 15, 5, 12, 7, 724030, 14, 1067430, 9587859, 4, 22, 21, 810961, 954379, 28724410, 28834017, 28850745, 31673883, 31208308] sql SELECT target_id FROM object_connection WHERE origin_id = ? 173: parts #<ODBA::Stub:70183604427120#28868651 @odba_class=Array @odba_container=70183604407240#220866> ODBA::Stub was unable to replace Array#28868651 from ODDB::Package:#220866 -> "220 mx.google.com ESMTP a45sm36073723eez.2 - gsmtp\r\n"
Banging my head because I cannot delete the package. As with the last error I got a lot of information about the object to delete, I will reimport the old database and try to delete it manually in bin/admin and check the outcome.
The problem seems to lay that @parts 28868651 could not be replaced. Must analyse its content with old DB. Exploring with bin/admin
ch.oddb> registration('33481').packages.size -> 2 ch.oddb> registration('35342').packages.size -> 0
Okay. We fail when the registration has no package. Maybe we should look at this fact when calling _sanitize_deletions and remove these object.
Okay. Now I am quite confident that my work-around is correct. It is however not very elegant and may be should introduce similar checks for deleting sequences and registrations.
Okay I am over the old error but got a new one:
Plugin: ODDB::SwissmedicPlugin Error: NoMethodError Message: undefined method `[]' for nil:NilClass Backtrace: /usr/local/lib64/ruby/gems/1.9.1/gems/swissmedic-diff-0.1.7/lib/swissmedic-diff.rb:57:in `cell' /var/www/oddb.org/src/plugin/swissmedic.rb:142:in `cell' /var/www/oddb.org/src/plugin/swissmedic.rb:364:in `pointer_from_row' /var/www/oddb.org/src/plugin/swissmedic.rb:419:in `resolve_link' /var/www/oddb.org/src/plugin/swissmedic.rb:371:in `block in report' /var/www/oddb.org/src/plugin/swissmedic.rb:370:in `collect' /var/www/oddb.org/src/plugin/swissmedic.rb:370:in `report' /var/www/oddb.org/src/plugin/plugin.rb:54:in `block in log_info' /var/www/oddb.org/src/plugin/plugin.rb:53:in `each' /var/www/oddb.org/src/plugin/plugin.rb:53:in `inject' /var/www/oddb.org/src/plugin/plugin.rb:53:in `log_info' /var/www/oddb.org/src/util/updater.rb:146:in `log_info' /var/www/oddb.org/src/util/updater.rb:401:in `block in update_swissmedic' /var/www/oddb.org/src/util/updater.rb:500:in `call' /var/www/oddb.org/src/util/updater.rb:500:in `wrap_update' /var/www/oddb.org/src/util/updater.rb:396:in `update_swissmedic' jobs/import_swissmedic:14:in `block in <module:Util>' /var/www/oddb.org/src/util/job.rb:40:in `call' /var/www/oddb.org/src/util/job.rb:40:in `run' jobs/import_swissmedic:12:in `<module:Util>' jobs/import_swissmedic:11:in `<module:ODDB>' jobs/import_swissmedic:10:in `<main>'
Therefore I have again an error when reporting the swissmedic results. Found that swissmedic-diff.rb does not check whether the row is valid or not.
But correction should be made in plugin/swissmedic.rb. Added another line. Reverted changes for model/package.rb and eimporting the database again (12.20).
Now import-swissmedic finished without problem. I see in the report one line with no pointer for nil
. Therefore pushed commit Fix import swissmedic when package is already deleted
Also running it over all XML files generated with rake test
returns a quite different and longer (1134 lines, 320 names) XSD.
Pushed commit Added commented oddb2xml.xsd. Include rspec tests