aboutsummaryrefslogtreecommitdiff
#! /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? string-capitalize-first))
 ((transform sql) #:select (call-with-target-database sql-for-each)))

(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 "~a" result))))))

(define (infopages/sql->rtf result)
  (let* ((get (cut assoc-ref result <>))
         (get* (compose (lambda (str)
                          (if (or (string-blank? str)
                                  (string-ci=?
                                   (string-trim-both str) "None"))
                              #f
                              str))
                        get))
         (identifier
          (string-capitalize-first
           (regexp-substitute/global
            #f "[^A-Za-z0-9:]"
            (get "InfoPageName")
            'pre "_" 'post)))
         (dir-name "/export/data/genenetwork/gn-docs/general/datasets/")
         (file-name (cut string-append dir-name <>))
         (summary (get* "Summary"))
         (tissue (get* "AboutTissue"))
         (specifics (get* "Specifics"))
         (contributors (get* "Contributors"))
         (cases (get* "AboutCases"))
         (platform (get* "AboutPlatform"))
         (processing (get* "AboutDataProcessing"))
         (notes (get* "Notes"))
         (citation (get* "Citation"))
         (experiment-type (get* "Experiment_Type"))
         (experiment-design (get* "ExperimentDesign"))
         (acknowledgment (get* "Acknowledgment")))
    (for-each (lambda (x)
                (save-file
                 (string-append (file-name identifier)
                                "/"
                                (car x))
                 (cdr x)))
              `(("summary.rtf" . ,summary)
                ("tissue.rtf" . ,tissue)
                ("citation.rtf" . ,citation)
                ("specifics.rtf" . ,specifics)
                ("cases.rtf" . ,cases)
                ("platform.rtf" . ,platform)
                ("processing.rtf" . ,processing)
                ("notes.rtf" . ,notes)
                ("experiment-design.rtf" . ,experiment-design)
                ("experiment-type.rtf" . ,experiment-type)
                ("contributors.rtf" . ,contributors)
                ("acknowledgment.rtf" . ,acknowledgment)))))


(let* ((option-spec
        '((settings (single-char #\s) (value #t))))
       (options (getopt-long (command-line) option-spec))
       (settings (option-ref options 'settings #f))
       (query "SELECT InfoPageName, Datasets.Summary, Datasets.AboutTissue, InfoFiles.Specifics,
Datasets.AboutCases, Datasets.AboutPlatform, Datasets.AboutDataProcessing, InfoFiles.Experiment_Type,
Datasets.Notes, Datasets.ExperimentDesign, Datasets.Acknowledgment, Datasets.Contributors, Datasets.Citation
FROM InfoFiles LEFT JOIN Datasets USING (DatasetId)")
       (%connection-settings
        (call-with-input-file settings
          read)))
  (call-with-target-database
   %connection-settings
   (lambda (db)
     (let ((dir "/export/data/genenetwork/gn-docs/"))
       (chdir dir)
       (system "git reset --hard origin")
       (system "git pull")
       ;; Clear directory so that we can re-do the dump again from the db.
       (system "rm -rf general/datasets/*/")
       (sql-for-each infopages/sql->rtf
                     db
                     query)
       (system "git add general/datasets")
       (system (format #f "git commit -m ~s" "Update dataset RTF Files."))
       (system "git push origin master")))))