#! /usr/bin/env guile !# (use-modules (ice-9 getopt-long) (srfi srfi-26) ((ice-9 regex) #:select (regexp-substitute/global)) ((transform strings) #:select (string-blank?)) ((transform sql) #:select (call-with-target-database sql-for-each)) ((transform triples) #:select (string->identifier))) (define (save-file file result) (when result (let ((dir-name (dirname file))) (unless (file-exists? dir-name) (mkdir dir-name)) (with-output-to-file file (lambda () (format #t result)))))) (define (infopages/sql->rtf result) (let* ((get (cut assoc-ref result <>)) (get* (compose (lambda (str) (if (string-blank? str) #f str)) get)) (identifier (string->identifier "" (regexp-substitute/global #f "[^A-Za-z0-9:]" (get "InfoPageName") 'pre "_" 'post))) (dir-name (string-append "/export/data/genenetwork/data/")) (file-name (cut string-append dir-name <>)) (summary (get* "Summary")) (tissue (get* "AboutTissue")) (specifics (get* "Specifics")) (cases (get* "AboutCases")) (platform (get* "AboutPlatform")) (processing (get* "AboutDataProcessing")) (notes (get* "Notes")) (experiment-design (get* "ExperimentDesign")) (acknowledgment (get* "Acknowledgment"))) (for-each (lambda (x) (save-file (file-name (string-append dir-name (car x))) (cdr x))) `(("summary.rtf" . ,summary) ("tissue.rtf" . ,tissue) ("specifics.rtf" . ,specifics) ("cases.rtf" . ,cases) ("platform.rtf" . ,platform) ("processing.rtf" . ,processing) ("notes.rtf" . ,notes) ("experiment-design.rtf" . ,experiment-design) ("acknowledgement.rtf" . ,acknowledgement))))) (let* ((option-spec '((settings (single-char #\s) (value #t)) (output (single-char #\o) (value #t)))) (options (getopt-long (command-line) option-spec)) (settings (option-ref options 'settings #f)) (output (option-ref options 'output #f)) (query "SELECT InfoPageName, Datasets.Summary, Datasets.AboutTissue, InfoFiles.Specifics, Datasets.AboutCases, Datasets.AboutPlatform, Datasets.AboutDataProcessing, Datasets.Notes, Datasets.ExperimentDesign, Datasets.Acknowledgment FROM InfoFiles LEFT JOIN Datasets USING (DatasetId) LIMIT 2") (%connection-settings (call-with-input-file settings read))) ;; TODO (call-with-target-database %connection-settings (lambda (db) (sql-for-each infopages/sql->rtf db query))))