about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPjotr Prins2025-08-11 08:41:09 +0200
committerPjotr Prins2025-08-11 08:41:09 +0200
commit1cac4505039ff4e03e9cca75fc3b1a1d80b2d90b (patch)
treede49406a5d337c26cde75ab389771daf250f8039
parent79d51c371f5f72684bc6ca8e57701fbb147b6482 (diff)
downloadgn-guile-1cac4505039ff4e03e9cca75fc3b1a1d80b2d90b.tar.gz
API
-rw-r--r--gn/data/dataset.scm17
-rw-r--r--web/webserver.scm16
2 files changed, 27 insertions, 6 deletions
diff --git a/gn/data/dataset.scm b/gn/data/dataset.scm
index b552b21..afe75ba 100644
--- a/gn/data/dataset.scm
+++ b/gn/data/dataset.scm
@@ -18,6 +18,7 @@
             get-bxd-publish-list
             get-bxd-publish-values-list
             get-bxd-publish-name-value-dict
+            get-bxd-publish-dataid-name-value-dict
             ))
 
 (define (get-dataset db probesetfreeze-id)
@@ -29,6 +30,14 @@
 (define (dataset-name db probesetfreeze-id)
   (assoc-ref (get-dataset db probesetfreeze-id) "Name"))
 
+(define (get-dataid-from-publishxrefid id)
+  "Get the internal dataid from publishxref - which is the same as used in the GN2 web interface"
+  (call-with-db
+   (lambda (db)
+     (let [(query (string-append "SELECT Id,PhenotypeId,DataId FROM PublishXRef WHERE Id=" id " AND InbredSetId=1 LIMIT 1"))]
+       (dbi-query db query)
+       (pk (int-to-string (assoc-ref (get-row db) "DataId")))))))
+
 (define (get-bxd-publish-list)
   (call-with-db
    (lambda (db)
@@ -36,7 +45,7 @@
        (dbi-query db query)
        (get-rows db '())))))
 
-(define* (get-bxd-publish-values-list dataid #:key used-for-mapping?)
+(define* (get-bxd-publish-values-list dataid #:optional used-for-mapping?)
   "Returns dict of name values , e.g. [{\"Name\":\"C57BL/6J\",\"value\":9.136},{\"Name\":\"DBA/2J\",\"value\":4.401},{\"Name\":\"BXD9\",\"value\":4.36}, ... used-for-mapping? skips the founders and maybe other unmappable inds. Note, currently unused."
   (call-with-db
    (lambda (db)
@@ -52,7 +61,7 @@
            (get-rows db '())
            )))))
 
-(define* (get-bxd-publish-name-value-dict dataid #:key used-for-mapping?)
+(define* (get-bxd-publish-dataid-name-value-dict dataid #:optional used-for-mapping?)
   "Returns dict of name values, e.g. (((\"C57BL/6J\" . 9.136) (\"DBA/2J\" . 4.401) (\"BXD9\" . 4.36) ... used-for-mapping? skips the founders and maybe other unmappable inds."
   (call-with-db
    (lambda (db)
@@ -70,3 +79,7 @@
                                                `(,(assoc-ref r "Name") . ,(assoc-ref r "value"))
                                                ) '())))
            )))))
+
+(define* (get-bxd-publish-name-value-dict id #:optional used-for-mapping?)
+  "Same as above function, but starting from data id"
+  (get-bxd-publish-dataid-name-value-dict (get-dataid-from-publishxrefid id) used-for-mapping?))
diff --git a/web/webserver.scm b/web/webserver.scm
index 5b1e024..dae235a 100644
--- a/web/webserver.scm
+++ b/web/webserver.scm
@@ -68,8 +68,11 @@ otherwise search for set/group data"
   "Return a list of published datasets by their record ID. We add the dataset ID and phenotype ID for quick reference"
   (list->vector (get-bxd-publish-list)))
 
-(define* (get-bxd-publish-values dataid #:key used-for-mapping?)
-  (get-bxd-publish-name-value-dict dataid #:used-for-mapping? used-for-mapping?))
+(define* (get-bxd-publish-dataid-values dataid #:optional used-for-mapping?)
+  (get-bxd-publish-dataid-name-value-dict dataid used-for-mapping?))
+
+(define* (get-bxd-publish-values dataid #:optional used-for-mapping?)
+  (get-bxd-publish-name-value-dict dataid used-for-mapping?))
 
 (define (get-gene-aliases genename)
   "Return a vector of aliases for genename."
@@ -257,15 +260,20 @@ otherwise search for set/group data"
      (render-brand path)) ; branding route for /home/aging, /home/msk etc
     (('GET "dataset" "bxd-publish" "list")
      (render-json (get-bxd-publish)))
+    (('GET "dataset" "bxd-publish" "dataid" "values" page)
+     (match (get-extension page)
+       (".json"
+        (render-json (get-bxd-publish-dataid-values (basename page ".json"))))
+       (else    (display "ERROR: unknown file extension"))))
     (('GET "dataset" "bxd-publish" "values" page)
      (match (get-extension page)
        (".json"
         (render-json (get-bxd-publish-values (basename page ".json"))))
-       (".tsv"  (render-string "TEST1\nTEST2"))
+       ;; (".tsv"  (render-string "TEST1\nTEST2"))
        ;; (".gemma" (render-string (string-join (gemma-pheno-txt "BXD" (get-bxd-publish-values (basename page ".gemma"))) "")))
        (else    (display "ERROR: unknown file extension"))))
     (('GET "dataset" "bxd-publish" "mapping" "values" (string-append dataid ".json"))
-     (render-json (get-bxd-publish-values dataid  #:used-for-mapping? #t)))
+     (render-json (get-bxd-publish-values dataid #t)))
     (('GET "doc" "species.html")
      (render-doc "doc" "species.html"
                  (get-species-meta)))