<< | Index | >>
Markenname search.
ATC class has DrugBank ID data, But some search results don't have a link in Markenname search.
(Currently, If a ATC code has multi related records in drugbank.ca, then ATC class of oddb.org has first one only.)
(drugbank.ca => http://www.drugbank.ca/search?utf8=✓&query=C03DA01&commit=Search)
ch.oddb> registration('27257').sequence('01').atc_class
-> Spironolacton
ch.oddb> registration('27257').sequence('01').atc_class.code
-> C03DA01
ch.oddb> registration('27257').sequence('01').atc_class.ni_id
-> NI_11110
ch.oddb> registration('27257').sequence('01').atc_class.db_id
-> DB00421
ATC class has correct ID.
SearchResult(ATCFacade) has strange value.
in src/mode/search_result.rb
module ODDB
class SearchResult
...
def db_id
p @atc.class
p @atc.code
p @atc.odba_id
p @atc.db_id
@atc.db_id
end
# =>
ODDB::AtcClass
"C03DA01"
28759059
nil
ATCFacade is not persistable Object.
ch.oddb> ODBA.cache.fetch('28759059')
-> Unknown odba_id 28759059
found where is prbolem comes form.
in src/util/oddbapp.rb
def _search_exact_classified_result(sequences, type=:unknown, result=nil)
atc_classes = {}
sequences.each { |seq|
code = (atc = seq.atc_class) ? atc.code : 'n.n'
new_atc = atc_classes.fetch(code) {
atc_class = ODDB::AtcClass.new(code)
unless(atc.nil?)
atc_class.descriptions = atc.descriptions
-> atc_class.db_id = atc.db_id
atc_class.ni_id = atc.ni_id
end
...
end
added drugbank link support to markenname search.
Currently, If multi records are found in result of drugbank.ca, ATC has only id of first one.
I updated Updater-Job that ATC has ids as Array in this case.
And created simple testcase for this plugin.
$ ruby test/test_plugin/drugbank.rb # => Loaded suite test/test_plugin/drugbank Started ...... Finished in 15.004181795 seconds. 6 tests, 22 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 100% passed 0.40 tests/s, 1.47 assertions/s
Anwendung
in src/view/searchbar.rb
module SearchBarMethods
def search_type(model, session=@session)
select = HtmlGrid::Select.new(:search_type, model, @session, self)
if(@lookandfeel.respond_to?(:search_type_selection))
select.valid_values = @lookandfeel.search_type_selection
end
select.set_attribute('onChange', 'this.form.onsubmit();')
select.selected = @session.persistent_user_input(:search_type)
select
end
end
ch.oddb> registration('31706').indication
-> Beta-Rezeptorenblocker
ch.oddb> registration('31706').indication.class
-> ODDB::Indication
It seems that ODDB::Indication has invalid data....
We could not get atc class from indication objects.
ch.oddb> indications.select {|i| i.respond_to?(:atc_classes) }.length
-> 3432
ch.oddb> indications.select {|i| i.atc_classes }
-> undefined method `values' for nil:NilClass
I found a strange Indication record.
ODDB::Interaction#registrations is expected Array. But.
ch.oddb> indications.select {|i| i.registrations.is_a? ODDB::Migel::Item }.length
-> 1
ch.oddb> indications.select {|i| i.registrations.is_a? ODDB::Migel::Item }.first.class
-> ODDB::Indication
continue tomorrow.
In-crawler process(10001 is crawler server), I found strange error.
[Mon Jun 25 14:57:41 2012] [error] access to /de/gcc/fachinfo/reg/56480/chapter/iksnrs failed for (null), reason: (druby://localhost:10001) /usr/local/lib/ruby/gems/1.9.1/gems/odba-1.0.8/lib/odba/stub.rb:112:in `method_missing' [Mon Jun 25 14:57:41 2012] [error] access to /de/gcc/fachinfo/reg/56480/chapter/iksnrs failed for (null), reason: (druby://localhost:10001) /var/www/oddb.org/src/util/oddbapp.rb:1179:in `block in sorted_fachinfos' [Mon Jun 25 14:57:41 2012] [error] access to /de/gcc/fachinfo/reg/56480/chapter/iksnrs failed for (null), reason: (druby://localhost:10001) /var/www/oddb.org/src/util/oddbapp.rb:1178:in `select' [Mon Jun 25 14:57:41 2012] [error] access to /de/gcc/fachinfo/reg/56480/chapter/iksnrs failed for (null), reason: (druby://localhost:10001) /var/www/oddb.org/src/util/oddbapp.rb:1178:in `sorted_fachinfos'
There were 2 invalid record as Fachinfo.
These Array are Drugbank data of ATC-Class Object.
ch.oddb> sorted_fachinfos.length
-> undefined method `revision' for ["DB00722", "DB00455"]:Array
ch.oddb> fachinfos.length
-> 4797
ch.oddb> fachinfos.values.first
-> #<ODDB::FachinfoDocument:0x000000070e6788>
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}.length
-> 2
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}.first.odba_id
-> 28767755
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}.first.odba_delete
-> ["DB00722", "DB00455"]
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}.first.odba_id
-> 28767153
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}.first.odba_delete
-> ["DB00627", "DB00184"]
ch.oddb> fachinfos.values.select {|f| f.is_a? Array}
-> []
I have deleted theses invalid data via bin/admin.
It seems that this problem is caused by Data-Corruption.
don't run over 2 updater-jobs at same time.
If same odba_id(s) are used in multi(each) processes, then Data-corruption is caused.