aboutsummaryrefslogtreecommitdiff
path: root/examples/dataset-metadata-git.scm
blob: 32b738b19de84d5734be41b699ccdecc7f232dfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#! /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)))))

(define* (commit-changes
          directory
          #:optional (commit-message "Update dataset RTF Files."))
  (chdir directory)
  (system "git reset --hard origin master")
  (system "git pull")
  (system "git add .")
  (system (format #f "git commit -m ~s" commit-message))
  (system "git push origin master"))

(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)
     (sql-for-each infopages/sql->rtf
                   db
                   query)
     (commit-changes "/export/data/genenetwork/gn-docs/"))))