about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPjotr Prins2021-01-01 08:09:40 +0000
committerPjotr Prins2021-01-01 09:35:48 +0000
commitfc28fdbbb5e121eb94bb06334a30e9b5395e003b (patch)
tree5e20454a8cd3b4a13c259da7722e0ce39ba01e8e
parent42642e7b13ad79bde76b6fefad825675dad9c61e (diff)
downloadbh20-seq-resource-fc28fdbbb5e121eb94bb06334a30e9b5395e003b.tar.gz
bh20-seq-resource-fc28fdbbb5e121eb94bb06334a30e9b5395e003b.tar.lz
bh20-seq-resource-fc28fdbbb5e121eb94bb06334a30e9b5395e003b.zip
sparql: make use of pattern matching
-rwxr-xr-xworkflows/pull-data/genbank/sparql-fetch-ids22
1 files changed, 10 insertions, 12 deletions
diff --git a/workflows/pull-data/genbank/sparql-fetch-ids b/workflows/pull-data/genbank/sparql-fetch-ids
index d4743bd..19b2d82 100755
--- a/workflows/pull-data/genbank/sparql-fetch-ids
+++ b/workflows/pull-data/genbank/sparql-fetch-ids
@@ -4,11 +4,15 @@
 #
 #   sparql-fetch-ids > pubseq_ids.txt
 #
+# Note: requires Ruby 3.x. Older Ruby gives a syntax error
 
 require 'net/http'
 require 'json'
 require 'ostruct'
 require 'erb'
+require 'pp'
+
+MAX=5_000
 
 SPARQL_HEADER="
 prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
@@ -20,24 +24,20 @@ PREFIX pubseq: <http://biohackathon.org/bh20-seq-schema#MainSchema/>
 
 # Build a SPARQL query, submit and return results. Apply transform
 # lambda when passed in
-
-def sparql q, transform = nil
-  q = SPARQL_HEADER+q
-  api_url = "http://sparql.genenetwork.org/sparql/?default-graph-uri=&format=application%2Fsparql-results%2Bjson&timeout=0&debug=on&run=+Run+Query+&query=#{ERB::Util.url_encode(q)}"
+def sparql query, transform = nil
+  api_url = "http://sparql.genenetwork.org/sparql/?default-graph-uri=&format=application%2Fsparql-results%2Bjson&timeout=0&debug=on&run=+Run+Query+&query=#{ERB::Util.url_encode(SPARQL_HEADER + query)}"
 
   response = Net::HTTP.get_response(URI.parse(api_url))
-  data = JSON.parse(response.body)
-  vars = data['head']['vars']
-  results = data['results']['bindings']
+  data = JSON.parse(response.body,symbolize_names: true)
+  data => { head: { vars: }, results: { bindings: results} }
+  vars = vars.map { |v| v.to_sym }
   results.map { |rec|
     # return results after transforming to a Hash and applying the
     # optional transform lambda. Note the transform can not only
     # reduce results, or create an array, but also may transform into
     # an OpenStruct.
     res = {}
-    vars.each { |name|
-      res[name.to_sym] = rec[name]['value']
-    }
+    vars.each { |name| res[name] = rec[name][:value] }
     if transform
       transform.call(res)
     else
@@ -46,8 +46,6 @@ def sparql q, transform = nil
   }
 end
 
-MAX=5_000
-
 start = 0
 num = MAX
 begin