8 def validate_form(form):
10 if not 'bg_datamod' in form or not len(form.getlist('bg_datamod')):
11 messages.append("Please indicate want kind of data you are working with.")
12 if 'bg_datamod' in form and 'other' in form.getlist('bg_datamod') and not form['bg_datamod_other'].value:
13 messages.append("You selected 'Other data modality' but did not specific which one.")
14 if not 'pers_time' in form or form['pers_time'].value == 'none':
15 messages.append("Please indicate how much time you spend in your personal computing environment.")
16 if 'pers_maint_time' in form and form['pers_maint_time'].value:
18 t = float(form['pers_maint_time'].value)
20 messages.append("The value you entered as maintenance effort per month needs to be a (floating point) number. For example: 1.2 or 5")
21 if not 'man_time' in form or form['man_time'].value == 'none':
22 messages.append("Please indicate how much time you spend in a managed computing environment.")
23 if not 'virt_time' in form or form['virt_time'].value == 'none':
24 messages.append("Please indicate how often you use virtual machines.")
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", "sw_other_name"]:
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_general",
49 "sw_dc", "sw_img", "sw_datamanage", "sw_electro", "sw_neusys",
50 "sw_bci", "sw_acq", "sw_rt", "sw_psychphys"]:
52 result[ff] = form.getlist(ff)
55 if "pers_maint_time" in form and form["pers_maint_time"].value:
56 result["pers_maint_time"] = float(form["pers_maint_time"].value)
59 result['timestamp'] = time.time()
62 if 'REMOTE_ADDR' in os.environ:
63 result['remote_addr'] = os.environ['REMOTE_ADDR']
68 # list of form data keys
72 form = cgi.FieldStorage(keep_blank_values=True)
74 # compose the server response
76 result['success'] = False
78 # Make sure we always return something meaningful
80 messages = validate_form(form)
82 # no messages means all good
83 result['success'] = True
84 result = extract_results(form, result)
86 logfile = open('/home/neurodebian/survey/data/%s.json' % result['timestamp'], 'w+')
87 logfile.write(json.write(result))
91 result['success'] = False
92 result['message'] = 'We are very sorry, but the server is unable to store your submission. Please contact team@neuro.debian.net.'
93 # send HTML snippet to let the submitter see the results
95 result['results'] = open('/home/neurodebian/survey/results_snippet.html').read()
97 result['results'] = 'We are very sorry, but the statistics could not be displayed. Please contact team@neuro.debian.net to get access.'
99 result['message'] = format_message(messages)
102 # always talk to the client
103 print json.write(result)
106 if __name__ == '__main__':
107 print "Content-Type: text/xhtml" # HTML is following
108 print # blank line, end of headers