-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.rkt
41 lines (33 loc) · 986 Bytes
/
main.rkt
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
#lang racket
(require racket/exn)
(define-syntax-rule (reprovide e0 e ...)
(begin
(require e0 e ...)
(provide (all-from-out e0 e ...))))
(reprovide
"web/twitter.rkt"
"web/github.rkt"
"web/pubmed.rkt"
"web/server.rkt"
"web/common.rkt"
"web/arxiv.rkt"
redis)
(provide load-config
assoc-val)
(define (assoc-val key assoc-list)
(cdr (assoc key assoc-list)))
;; Example (load-config "/tmp/conf.rkt")
(define (load-config config-path)
(with-handlers ([exn:fail:filesystem:errno?
(lambda (exn)
(error (exn->string exn)))])
(let [(eval-ns (make-base-namespace))
(params (make-hash))]
(let [(settings (file->list config-path))]
(for [(name:value settings)]
(let* [(n (car name:value)); evaluate the 'value' expression
(v (cdr name:value))
(v (eval (quasiquote (,@v)) eval-ns))]
(hash-set! params n v)
)))
params)))