diff options
author | Pjotr Prins | 2025-08-02 09:54:54 +0200 |
---|---|---|
committer | Pjotr Prins | 2025-08-02 09:54:54 +0200 |
commit | 570630f8810283077888152ab1f4ca035a60d1e9 (patch) | |
tree | 66c45d7ceebbf0f45a58ec74788abad686ae3c8c | |
parent | 9ad0793eb477611c700f4a5b02f60ac793bfae96 (diff) | |
download | gn-guile-570630f8810283077888152ab1f4ca035a60d1e9.tar.gz |
API: create values endpoint that returns a dict only
-rw-r--r-- | gn/data/dataset.scm | 22 | ||||
-rw-r--r-- | web/webserver.scm | 11 |
2 files changed, 23 insertions, 10 deletions
diff --git a/gn/data/dataset.scm b/gn/data/dataset.scm index 6b2292a..c21a663 100644 --- a/gn/data/dataset.scm +++ b/gn/data/dataset.scm @@ -15,6 +15,7 @@ dataset-name get-bxd-publish-list get-bxd-publish-values-list + get-bxd-publish-name-value-dict )) (define (get-dataset db probesetfreeze-id) @@ -34,6 +35,7 @@ (get-rows db '()))))) (define* (get-bxd-publish-values-list dataid #:key 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) (let [(query (string-append "SELECT Strain.Name, PublishData.value FROM Strain, PublishData WHERE PublishData.Id=" dataid " and Strain.Id=StrainID;"))] @@ -48,5 +50,21 @@ (get-rows db '()) ))))) - -;; (define ids (db-get-rows-apply db (lambda (r) `(,(assoc-ref r \"StrainId\") . ,(assoc-ref r \"Name\"))) '())) +(define* (get-bxd-publish-name-value-dict dataid #:key 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) + (let [(query (string-append "SELECT Strain.Name, PublishData.value FROM Strain, PublishData WHERE PublishData.Id=" dataid " and Strain.Id=StrainID;"))] + (dbi-query db query) + (if used-for-mapping? + (remove null? (pk (get-rows-apply db + (lambda (r) + (if (string-contains (assoc-ref r "Name") "BXD") + `(,(assoc-ref r "Name") . ,(assoc-ref r "value")) + '() ) ;; return empty on no match + ) '()))) + (remove null? (pk (get-rows-apply db + (lambda (r) + `(,(assoc-ref r "Name") . ,(assoc-ref r "value")) + ) '()))) + ))))) diff --git a/web/webserver.scm b/web/webserver.scm index 90e1441..00a3c4c 100644 --- a/web/webserver.scm +++ b/web/webserver.scm @@ -61,11 +61,8 @@ 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) - (list->vector (get-bxd-publish-values-list dataid))) - -(define (get-bxd-publish-mapping-values dataid) - (list->vector (get-bxd-publish-values-list dataid #:used-for-mapping? #t))) +(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-gene-aliases genename) "Return a vector of aliases for genename." @@ -250,10 +247,8 @@ otherwise search for set/group data" (render-json (get-bxd-publish))) (('GET "dataset" "bxd-publish" "values" dataid) (render-json (get-bxd-publish-values dataid))) - (('GET "dataset" "bxd-publish" "values" dataid) - (render-json (get-bxd-publish-values dataid))) (('GET "dataset" "bxd-publish" "mapping" "values" dataid) - (render-json (get-bxd-publish-mapping-values dataid))) + (render-json (get-bxd-publish-values dataid #:used-for-mapping? #t))) (('GET "doc" "species.html") (render-doc "doc" "species.html" (get-species-meta))) |