8 def validate_form(form):
10 if not 'pers_time' in form or form['pers_time'].value == 'none':
11 messages.append("Please indicate how much time you spend in your personal computing environment.")
12 if not 'man_time' in form or form['man_time'].value == 'none':
13 messages.append("Please indicate how much time you spend in a managed computing environment.")
14 if not 'virt_time' in form or form['virt_time'].value == 'none':
15 messages.append("Please indicate how often you use virtual machines.")
16 if not 'bg_datamod' in form or not len(form.getlist('bg_datamod')):
17 messages.append("Please indicate want kind of data you are working with.")
18 if 'bg_datamod' in form and 'other' in form.getlist('bg_datamod') and not form['bg_datamod_other'].value:
19 messages.append("You selected 'Other data modality' but did not specific which one.")
20 if 'pers_maint_time' in form and form['pers_maint_time'].value:
22 t = float(form['pers_maint_time'].value)
24 messages.append("The value you entered as maintenance effort per month needs to be a (floating point) number. For example: 1.2 or 5")
28 def format_message(mesgs):
29 msg = '>>> We found a problem with your submission <<<\n\n'
30 return msg + '\n\n'.join(mesgs)
32 def extract_results(form, result):
34 for ff in ["bg_country", "bg_employer", "bg_position", "bg_developer", "bg_datamod_other",
35 "pers_time", "pers_hardware", "pers_os",
36 "man_time", "man_hardware", "man_os",
37 "virt_time", "virt_other", "virt_guest_os", "virt_host_os",
38 "software_resource_other", "sw_other"]:
40 result[ff] = form[ff].value
42 for ff in ["pers_r1", "pers_r2", "pers_r3", "pers_r4", "pers_r5", "pers_r6", "pers_r7", "pers_r8",
43 "man_r1", "man_r2", "man_r3", "man_r4", "man_r5",
44 "virt_r1", "virt_r2", "virt_r3", "virt_r4"]:
46 result[ff] = int(form[ff].value)
48 for ff in ["bg_datamod", "virt_prod", "software_resource", "sw"]:
50 result[ff] = form.getlist(ff)
53 if "pers_maint_time" in form and form["pers_maint_time"].value:
54 result["pers_maint_time"] = float(form["pers_maint_time"].value)
57 result['timestamp'] = time.time()
60 if 'REMOTE_ADDR' in os.environ:
61 result['remote_addr'] = os.environ['REMOTE_ADDR']
66 # list of form data keys
70 form = cgi.FieldStorage(keep_blank_values=True)
72 # compose the server response
74 result['success'] = False
76 # Make sure we always return something meaningful
78 messages = validate_form(form)
80 # no messages means all good
81 result['success'] = True
82 result = extract_results(form, result)
84 logfile = open('/home/neurodebian/surveydata/%s.json' % result['timestamp'], 'w+')
85 logfile.write(json.write(result))
89 result['success'] = False
90 result['message'] = 'We are very sorry, but the server is unable to store your submission. Please contact team@neuro.debian.net.'
92 result['message'] = format_message(messages)
95 # always talk to the client
96 print json.write(result)
99 if __name__ == '__main__':
100 print "Content-Type: text/xhtml" # HTML is following
101 print # blank line, end of headers