/
fortune.py
executable file
·126 lines (108 loc) · 2.92 KB
/
fortune.py
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/env python3
import bottle
from bottle import request, response, route, post, get, run, template
import logging
import json
import subprocess
# def get_logger():
# # TODO move to logfile
# handler = logging.FileHandler ('./fortune.log')
# handler.setFormatter (logging.Formatter (fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
#
# logger = logging.getLogger ('fortune')
# logger.addHandler (handler)
# logger.setLevel (logging.INFO)
#
# return logger
#
# logger = get_logger()
mk_url = lambda path: '{scheme}://{host}/{path}'.format (
scheme = request.urlparts[0],
host = request.urlparts[1],
path = path,
)
def res ():
return dict (
collection = dict (
version = '1.0',
href = '/',
links = [
dict (
# also prompt and name are allowed here!
href = mk_url ('/'),
rel = 'fortune',
render = 'link',
),
dict (
href = mk_url ('/offensive'),
rel = 'offensive fortune',
render = 'link',
),
],
queries = None,
template = None,
error = None,
),
)
app = bottle.Bottle(autojson = False)
@app.get('/')
def root():
fortune = subprocess.run (
'fortune',
stdout = subprocess.PIPE,
).stdout.decode()
r = res()
r.get('collection').update (dict (
items = [
dict (
href = mk_url ('/'),
data = [
dict (name = 'fortune', value = fortune)
],
)
],
))
response.set_header ('Content-Type', 'application/vnd.collection+json')
return json.dumps (r)
@app.get('/short')
def short():
fortune = subprocess.run (
['fortune', '-s'],
stdout = subprocess.PIPE,
).stdout.decode()
r = res()
r.get('collection').update (dict (
items = [
dict (
href = mk_url ('/'),
data = [
dict (name = 'fortune', value = fortune)
],
)
],
))
response.set_header ('Content-Type', 'application/vnd.collection+json')
return json.dumps (r)
@app.get('/offensive')
def root():
fortune = subprocess.run (
('fortune', '-o'),
stdout = subprocess.PIPE,
).stdout.decode()
r = res()
r.get('collection').update (dict (
items = [
dict (
href = mk_url ('/offensive'),
data = [
dict (name = 'offensive fortune', value = fortune)
],
)
],
))
response.set_header ('Content-Type', 'application/vnd.collection+json')
return json.dumps (r)
app.run (
host = 'localhost',
port = 8080,
)