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
|
#! /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/gn-docs/datasets/"))
(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))))
|