import cgi import records MAX_RECORDS = 20 def compute_form(key, value): ret = '
\n' ret = ret + 'Search \n' ret = ret + 'for \n' ret = ret + '\n' ret = ret + '
\n' return ret def get_list(recs, keys, start, end): print_authors = 0==1 header = "" ret = "\n" for k in keys: if k in records.author_keys: print_authors = 1 if k in records.key_names: header = header + '" else: header = header + "" ret = ret + "" + header + "\n" for index in range(start, end): # print initial line for record rec = recs[index] line = "" authors = rec['authors'] for key in keys: field = "" if key in records.author_keys: if len(authors) > 0 and key in authors[0]: field = authors[0][key] elif key in rec: field = rec[key] line = line + '" ret = ret + ''+ line\ + '\n' # print subsequent lines if print_authors and len(authors) > 1: for i in range(1, len(authors)): line = "" for key in keys: field = "" if key in records.author_keys: if key in authors[i]: field = authors[i][key] line = line + '" ret = ret + "" + line + "\n" ret = ret + "
' + records.key_names[k] + "
' + field + "
' + str(index + 1)\ + '.More...
' + field + "
\n" return ret def to_parm(parm): return cgi.escape(parm, 1==1).replace('&', '%26').replace('+', '%2B').replace(' ', '+') def get_more(key, value, start, label): return '' + label + '\n' def get_nav(key, value, start, end, max): if start <> 0 or end <> max: ret = '
\n' if start <> 0: prev = start - MAX_RECORDS if prev < 0: prev = 0 ret = ret + get_more(key, value, prev, "Previous " + str(MAX_RECORDS)) if end <> max: next = min(MAX_RECORDS, max - end) ret = ret + get_more(key, value, end, "Next " + str(next)) ret = ret + '
\n' return ret else: return "" def compute_result(key, value, start): result = records.search(key, cgi.escape(value, 1==1)) start = min(start, len(result)) end = min(start + MAX_RECORDS, len(result)) if start <> 0 or end <> len(result): count_text = "Records " + str(start + 1) + " to " + \ str(end) + " of the " + str(len(result)) + " records" elif end == 0: count_text = "No records were" elif len(result) == 1: count_text = "One record was" else: count_text = str(len(result)) + " records were" count_text = count_text + " found containing `" + cgi.escape(value) + \ "' in the `" + records.key_names[key] + "' field." ret = "

" + count_text + "

\n" ret = ret + get_nav(key, value, start, end, len(result)) if len(result) > 0: ret = ret + get_list(result, ['title', 'name', 'date'], start, end) ret = ret + get_nav(key, value, start, end, len(result)) return ret def find(id): recs = records.Records() while recs.hasNext(): rec = recs.next() if 'id' in rec and rec['id'] == id: return rec return None def compute_fields(rec): ret = "\n" cols = len(records.author_keys) for key in records.record_keys: if key in rec: ret = ret + '\n" if 'authors' in rec: ret = ret + '\n' for key in records.author_keys: ret = ret + ' \n' ret = ret + ' \n' for auth in rec['authors']: ret = ret + ' \n' for key in records.author_keys: if key in auth: ret = ret + ' \n' else: ret = ret + ' \n' ret = ret + ' \n' ret = ret + "
' + \ records.key_names[key] + ':' + rec[key] + "
Authors:' + records.key_names[key] + '
' + auth[key] + '
\n" return ret def output_template(template, result, key, value): file = open(template) while 1==1: line = file.readline() if line == "": return elif line[0] == "#": if line == "#FORM\n": print compute_form(key, value), elif line == "#RESULT\n": print result, else: print line, else: print line, def main(): print "Content-type: text/html" print "" form = cgi.FieldStorage() if form.has_key("key") and form.has_key("value"): key = form["key"].value value = form["value"].value if form.has_key("start"): try: start = int(form["start"].value) - 1 if start < 0: start = 0 except ValueError: start = 0 else: start = 0 result = compute_result(key, value, start) output_template("template-result.html", result, key, value) elif form.has_key("id"): try: id = int(form["id"].value) except ValueError: output_template("template-form.html", "", "", "") return record = find(id) if record is None: output_template("template-form.html", "", "", "") else: result = compute_fields(record) output_template("template-more.html", result, "", "") else: output_template("template-form.html", "", "", "")