def print_proceedings(entry, id): output = open('../html/paper.html', 'r').read() f = open('../../publications/' + id + '.html', 'w') output += '<h2 class="first">' + entry.title.value.replace(":", ":<br>") + '</h2>' output += '<h3 style="margin-top: 1em;">edited by ' + print_author(entry.editor) + '</h3>' if 'abstract' in entry: output += '<p style="margin-top: 1.5em;"><strong>Abstract.</strong> ' + entry.abstract.value + '</p>' output += pdf_iframe(entry, id) output += '</div></div>' output += footer() output += '</body></html>' f.write(output.replace(" & ", " & ").replace(" - ", " — ").replace("%%PAPERTITLE%%", entry.title.value)) f.close() result = '<li id="' + id + '">' # PDF result += pdf_link(entry, id) # author and title result += print_editor(entry.editor) + '. ' #result += '<strong>' + entry.title.value + '</strong>' result += '<strong><a href="publications/' + id + '.html">' + entry.title.value + '</a></strong>' # volume and series if 'volume' in entry: result += ', volume ' + entry.volume.value + ' of ' else: result += ', ' if 'series' in entry: result += '<em>' + entry.series.value + '</em>' result += ', ' # month and year if 'month' in entry: result += entry.month.value + ' ' result += entry.year.value + '.' # publisher if 'publisher' in entry: result += ' ' + entry.publisher.value + '.' # note if 'note' in entry: result += ' ' + entry.note.value # DOI if 'doi' in entry: result += ' <small><a href="http://dx.doi.org/' + entry.doi.value + '">DOI</a></small>' result += '</li>' return result
def index(): nabes = [ "Downtown Brooklyn", "Williamsburg", "Upper East Side", "Upper West Side", "Midtown East" ] footer = utils.footer() if "username" in session and session["username"] != "": header = utils.header(session["username"]) if request.args.get("neighborhood") not in nabes: return redirect("/?neighborhood=%s" % nabes[0]) nabes = user_actions.nabes(request.args.get("neighborhood")) sug = suggestions.next_restaurant(request.args.get("neighborhood")) eatlist = suggestions.generate_superlike_table() return render_template("homepage.html", restaurant=sug, superlike=eatlist, header=header, footer=footer, neighborhoods=nabes) else: header = utils.header("") return render_template("index.html", header=header, footer=footer)
def tools(): # add header template print("Generating tools.html...") output = open('../html/tools.html', 'r').read() # read data XML file xml = XML2Dict() data = xml.fromstring(open('../xml/tools.xml', 'r').read()) # fetch papers paperdata = generate_publications.init() first = True for entry in data.tooling.tools.tool: release = time.strptime(entry.release, '%d %b %Y') if first: output += '<h2 class="first">' + entry.name + '</h2>' first = False else: output += '<h2>' + entry.name + '</h2>' output += '<ul class="talks">\n' output += '<li>' + entry.description.replace(entry.name, '<strong>' + entry.name + '</strong>') + '</li>\n' if 'paper' in entry: output += generate_publications.formatentry(generate_publications.entrybyname(entry.paper, paperdata)) + '\n' if 'codevelopers' in entry: if entry.codevelopers.find('and') != -1: output += '<li>co-developers: ' + entry.codevelopers + '</li>\n' else: output += '<li>co-developer: ' + entry.codevelopers + '</li>\n' output += '<li>development status: ' + entry.status + '</li>\n' output += '<li>latest release: ' + timeperiod(release, release) + '</li>\n' output += '</ul>\n' # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing tools.html...") f = open('../../tools.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()
def login(): if "username" in session and session["username"] != "": return "<script>window.location='/'</script>" #FIX header = utils.header("") footer = utils.footer() if request.method == 'POST': return_code = user_actions.login(request.form["username"], request.form["password"]) if return_code == 1: session["username"] = request.form["username"] return "<script>window.location='/'</script>" #FIX else: return render_template("login.html", return_code=return_code, header=header, footer=footer) else: return render_template("login.html", header=header, footer=footer)
def presentations(): # add header template print("Generating presentations.html...") output = open('../html/presentations.html', 'r').read() # read data XML file xml = XML2Dict() data = xml.fromstring(open('../xml/presentations.xml', 'r').read()) ######################### # part 1: Invited Talks # ######################### # transform date types for entry in data.presentations.invited.talk: entry.date = time.strptime(entry.date, '%d %b %Y') # sort by begin date data.presentations.invited.talk = sorted(data.presentations.invited.talk, key=lambda k: k.date, reverse=True) output += '<h2 class="first">Invited Presentations</h2>' output += '<ul class="talks">\n' for entry in data.presentations.invited.talk: output += '<li id="' + entry.id + '">' if 'slideshare' in entry: output += '<a href="' + entry.slideshare + '" title="slides of the talk at Slideshare"></a>' if 'vimeo' in entry: output += '<a href="' + entry.vimeo + '" title="video of the talk at Vimeo"></a>' output += '<strong>' + entry.title + '</strong><br/>' output += entry.detail + '<br/>' if entry.date > time.localtime(): output += 'to be held on ' output += timeperiod(entry.date, entry.date) + ' in ' + placelink(entry.venue) output += '</li>\n' # output for Slideshare.net stdoutput = '\nInvited presentation given by Niels Lohmann on ' + timeperiod(entry.date, entry.date) stdoutput += ' in ' + entry.venue + ' as ' + entry.detail if stdoutput[-1] != '.': stdoutput += '.\n' sys.stderr.write(stdoutput) output += '</ul>\n' ############################ # part 2: Conference Talks # ############################ # transform date types for entry in data.presentations.conferences.talk: entry.date = time.strptime(entry.date, '%d %b %Y') # sort by begin date data.presentations.conferences.talk = sorted(data.presentations.conferences.talk, key=lambda k: k.date, reverse=True) output += '<h2>Conference Presentations</h2>' output += '<ul class="talks">\n' for entry in data.presentations.conferences.talk: output += '<li id="' + entry.id + '">' if 'slideshare' in entry: output += '<a href="' + entry.slideshare + '" title="slides of the talk at Slideshare"></a>' if 'vimeo' in entry: output += '<a href="' + entry.vimeo + '" title="video of the talk at Vimeo"></a>' output += '<strong>' + entry.title + '</strong><br/>' if 'abbreviation' in entry: output += '<em>' + entry.conference + ' (<a href="' + entry.url + '">' + entry.abbreviation.replace(" ", " ") + '</a>)</em><br/>' else: output += '<em><a href="' + entry.url + '">' + entry.conference + ' </a></em><br/>' if entry.date > time.localtime(): output += 'to be held on ' output += timeperiod(entry.date, entry.date) + ' in ' + placelink(entry.venue) output += '</li>\n' # output for Slideshare.net stdoutput = '\nConference presentation given by Niels Lohmann on ' + timeperiod(entry.date, entry.date) stdoutput += ' in ' + entry.venue + ' at the ' + entry.conference if 'abbreviation' in entry: stdoutput += ' (' + entry.abbreviation + ')' stdoutput += '.\n' sys.stderr.write(stdoutput) output += '</ul>\n' ########################## # part 3: Workshop Talks # ########################## # transform date types for entry in data.presentations.workshops.talk: entry.date = time.strptime(entry.date, '%d %b %Y') # sort by begin date data.presentations.workshops.talk = sorted(data.presentations.workshops.talk, key=lambda k: k.date, reverse=True) output += '<h2>Workshop Presentations</h2>' output += '<ul class="talks">\n' for entry in data.presentations.workshops.talk: output += '<li id="' + entry.id + '">' if 'slideshare' in entry: output += '<a href="' + entry.slideshare + '" title="slides of the talk at Slideshare"></a>' if 'vimeo' in entry: output += '<a href="' + entry.vimeo + '" title="video of the talk at Vimeo"></a>' output += '<strong>' + entry.title + '</strong><br/>' if 'abbreviation' in entry: if 'url' in entry: output += '<em>' + entry.conference + ' (<a href="' + entry.url + '">' + entry.abbreviation.replace(" ", " ") + '</a>)' else: output += '<em>' + entry.conference + ' (' + entry.abbreviation.replace(" ", " ") + ')' else: if 'url' in entry: output += '<em><a href="' + entry.url + '">' + entry.conference + '</a>' else: output += '<em>' + entry.conference if 'colocation' in entry: if 'courl' in entry: output += '; part of <a href="' + entry.courl + '">' + entry.colocation.replace(" ", " ") + '</a>' else: output += '; part of ' + entry.colocation.replace(" ", " ") output += '</em><br/>' if entry.date > time.localtime(): output += 'to be held on ' output += timeperiod(entry.date, entry.date) + ' in ' + placelink(entry.venue) output += '</li>\n' # output for Slideshare.net stdoutput = '\nWorkshop presentation given by Niels Lohmann on ' + timeperiod(entry.date, entry.date) stdoutput += ' in ' + entry.venue + ' at the ' + entry.conference if 'abbreviation' in entry: stdoutput += ' (' + entry.abbreviation + ')' if 'colocation' in entry: stdoutput += '; part of ' + entry.colocation stdoutput += '.\n' sys.stderr.write(stdoutput) output += '</ul>\n' ########################## # part 4: Demonstrations # ########################## # transform date types for entry in data.presentations.demonstrations.talk: entry.date = time.strptime(entry.date, '%d %b %Y') # sort by begin date data.presentations.demonstrations.talk = sorted(data.presentations.demonstrations.talk, key=lambda k: k.date, reverse=True) output += '<h2>Tool Demonstrations</h2>' output += '<ul class="talks">\n' for entry in data.presentations.demonstrations.talk: output += '<li id="' + entry.id + '">' if 'slideshare' in entry: output += '<a href="' + entry.slideshare + '" title="slides of the talk at Slideshare"></a>' if 'vimeo' in entry: output += '<a href="' + entry.vimeo + '" title="video of the talk at Vimeo"></a>' output += '<strong>' + entry.title + '</strong><br/>' if 'abbreviation' in entry: if 'url' in entry: output += '<em>' + entry.conference + ' (<a href="' + entry.url + '">' + entry.abbreviation.replace(" ", " ") + '</a>)' else: output += '<em>' + entry.conference + ' (' + entry.abbreviation.replace(" ", " ") + ')' else: if 'url' in entry: output += '<em><a href="' + entry.url + '">' + entry.conference + '</a>' else: output += '<em>' + entry.conference if 'colocation' in entry: if 'courl' in entry: output += '; part of <a href="' + entry.courl + '">' + entry.colocation.replace(" ", " ") + '</a>' else: output += '; part of ' + entry.colocation.replace(" ", " ") output += '</em><br/>' output += timeperiod(entry.date, entry.date) + ' in ' + placelink(entry.venue) output += '</li>\n' # output for Slideshare.net stdoutput = '\nTool demonstration given by Niels Lohmann on ' + timeperiod(entry.date, entry.date) stdoutput += ' in ' + entry.venue + ' at the ' + entry.conference if 'abbreviation' in entry: stdoutput += ' (' + entry.abbreviation + ')' if 'colocation' in entry: stdoutput += '; part of ' + entry.colocation stdoutput += '.\n' sys.stderr.write(stdoutput) output += '</ul>\n' ######################### # part 5: Miscellaneous # ######################### # transform date types for entry in data.presentations.miscellaneous.talk: entry.date = time.strptime(entry.date, '%d %b %Y') # sort by begin date data.presentations.miscellaneous.talk = sorted(data.presentations.miscellaneous.talk, key=lambda k: k.date, reverse=True) output += '<h2>Miscellaneous</h2>' output += '<ul class="talks">\n' for entry in data.presentations.miscellaneous.talk: output += '<li id="' + entry.id + '">' output += '<a href="' + entry.slideshare + '" title="slides of the talk at Slideshare"></a>' if 'vimeo' in entry: output += '<a href="' + entry.vimeo + '" title="video of the talk at Vimeo"></a>' output += '<strong>' + entry.title + '</strong><br/>' output += entry.detail + '<br/>' output += timeperiod(entry.date, entry.date) + ' in ' + placelink(entry.venue) output += '</li>\n' # output for Slideshare.net stdoutput = '\nPresentation given by Niels Lohmann on ' + timeperiod(entry.date, entry.date) stdoutput += ' in ' + entry.venue + '; ' + entry.detail stdoutput += '.\n' sys.stderr.write(stdoutput) output += '</ul>\n' # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing presentations.html...") f = open('../../presentations.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()
def news(): # add header template print("Generating index.html...") output = open('../html/index.html', 'r').read() # read data XML file xml = XML2Dict() data = xml.fromstring(open('../xml/news.xml', 'r').read()) # fetch papers paperdata = generate_publications.init() past = [] past_images = [] past_sticky = 0 max_entries = 6 present = [] future = [] # add academic services everything = data.newsentries.entries.news + read_academic() for entry in data.newsentries.entries.news: entry.begin = time.strptime(entry.begin, '%d %b %Y') if 'end' in entry: entry.end = time.strptime(entry.end, '%d %b %Y') else: entry.end = entry.begin # sort by begin date everything = sorted(everything, key=lambda k: k.begin, reverse=True) # get sticky entries, images and sort into past and future for entry in everything: if entry.end > time.localtime(): future.append(entry) continue if entry.begin < time.localtime(): past.append(entry) if 'image' in entry: past_images.append([entry.image, entry.text]) if 'sticky' in entry: past_sticky += 1 continue present.append(entry) future.reverse() ######################################################################## if len(future) > 0: output += '<h2 style="margin-top: 1em;">Soon…</h2>\n' output += '<ul class="news">\n' count = 0 for entry in future: count += 1 if count > max_entries and 'sticky' not in entry: continue output += '<li>' if entry.type == 'free': output += print_free(entry) if entry.type == 'visit': output += print_visit(entry) if entry.type == 'lecture': output += print_lecture(entry) if entry.type == 'venue': output += print_venue(entry) output += '</li>\n' output += '</ul>\n' ######################################################################## if len(past) > 0: output += '<h2 style="margin-top: 1em;">Recently…</h2>\n' for img in past_images: output += '<img src="resources/img/' + img[0] + '" alt="' + img[1] + '" style="padding-left:10px; padding-bottom:10px; float: right;" />' output += '<ul class="news">\n' count = 0 for entry in past: count += 1 if count > (max_entries-past_sticky) and 'sticky' not in entry: continue output += '<li>' if entry.type == 'pc': output += print_pc(entry) if entry.type == 'free': output += print_free(entry) if entry.type == 'visit': output += print_visit(entry) if entry.type == 'lecture': output += print_lecture(entry) if entry.type == 'venue': output += print_venue(entry) if entry.type == 'paper_accepted': output += print_paper_accepted(entry, paperdata) output += '</li>\n' output += '</ul>\n' ######################################################################## # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing index.html...") f = open('../../index.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()
def print_techreport(entry, id): output = open('../html/paper.html', 'r').read() f = open('../../publications/' + id + '.html', 'w') output += '<h2 class="first">' + entry.title.value.replace(":", ":<br>") + '</h2>' output += '<h3 style="margin-top: 1em;">by ' + print_author(entry.author) + '</h3>' if 'abstract' in entry: output += '<p style="margin-top: 1.5em;"><strong>Abstract.</strong> ' + entry.abstract.value + '</p>' output += '<p>Appeared as technical report at ' + entry.institution.value if 'address' in entry: output += ' in ' + entry.address.value output += '.</p>' output += pdf_iframe(entry, id) output += '</div></div>' output += footer() output += '</body></html>' f.write(output.replace(" & ", " & ").replace(" - ", " — ").replace("%%PAPERTITLE%%", entry.title.value)) f.close() result = '<li id="' + id + '">' # PDF result += pdf_link(entry, id) # author and title result += print_author(entry.author) + '. ' # result += '<strong>' + entry.title.value + '</strong>. ' result += '<strong><a href="publications/' + id + '.html">' + entry.title.value + '</a></strong>. ' # type result += entry.type.value # volume and number if 'number' in entry: result += ' ' + entry.number.value # institution and address if 'institution' in entry: result += ', ' + entry.institution.value if 'address' in entry: result += ', ' + entry.address.value result += ', ' # month and year if 'month' in entry: result += entry.month.value + ' ' result += entry.year.value + '.' # note if 'note' in entry: result += ' ' + entry.note # DOI if 'doi' in entry: result += ' <small><a href="http://dx.doi.org/' + entry.doi.value + '">DOI</a></small>' result += '</li>' return result
def main(): # get data data = init() # add header template print("Generating publications.html...") output = open('../html/publications.html', 'r').read() filterauthor = 'Niels Lohmann' ####################### # part 1: Proceedings # ####################### output += '<h2 class="first">Proceedings</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'proceedings' in entry: if print_editor(entry.proceedings.editor).find(filterauthor) != -1: output += formatentry(entry) output += '</ul>\n' ########################## # part 1a: Book Chapters # ########################## output += '<h2>Book Chapters (reviewed)</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'inbook' in entry: if print_author(entry.inbook.author).find(filterauthor) != -1: output += formatentry(entry) output += '</ul>\n' #################### # part 2: Articles # #################### output += '<h2>Journal Articles (reviewed)</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'article' in entry: if print_author(entry.article.author).find(filterauthor) != -1: output += formatentry(entry) output += '</ul>\n' ############################# # part 3: Conference Papers # ############################# output += '<h2>Conference Papers (reviewed)</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'inproceedings' in entry: if print_author(entry.inproceedings.author).find(filterauthor) != -1: if not is_workshop(entry) and is_reviewed(entry): output += formatentry(entry) output += '</ul>\n' ###################################### # part 4: Workshop Papers (reviewed) # ###################################### output += '<h2>Workshop Papers (reviewed)</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'inproceedings' in entry: if print_author(entry.inproceedings.author).find(filterauthor) != -1: if is_workshop(entry) and is_reviewed(entry): output += formatentry(entry) output += '</ul>\n' ######################################## # part 5: Workshop Papers (unreviewed) # ######################################## output += '<h2>Workshop Papers (unreviewed)</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'inproceedings' in entry: if print_author(entry.inproceedings.author).find(filterauthor) != -1: if is_workshop(entry) and not is_reviewed(entry): output += formatentry(entry) output += '</ul>\n' ############################# # part 6: Technical Reports # ############################# output += '<h2>Technical Reports</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'techreport' in entry: if print_author(entry.techreport.author).find(filterauthor) != -1: output += formatentry(entry) output += '</ul>\n' ################## # part 7: Theses # ################## output += '<h2>Theses</h2>\n' output += '<ul class="publications">\n' for entry in data.file.entry: if 'phdthesis' in entry: if print_author(entry.phdthesis.author).find(filterauthor) != -1: output += formatentry(entry) if 'mastersthesis' in entry: if print_author(entry.mastersthesis.author).find(filterauthor) != -1: output += formatentry(entry) output += '</ul>\n' # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing publications.html...") f = open('../../publications.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()
def teaching(): # add header template print("Generating teaching.html...") output = open('../html/teaching.html', 'r').read() # read data XML file xml = XML2Dict() data = xml.fromstring(open('../xml/teaching.xml', 'r').read()) ################################# # part 1: Supervision of Theses # ################################# output += '<h2 class="first">Supervision of Theses</h2>' output += '<ul class="talks">\n' for entry in data.teaching.supervisions.thesis: output += '<li>' + entry.author + '. ' output += '<strong>' + entry.title + '</strong><br/>' output += entry.type + ', ' + entry.institution if 'date' in entry: entry.date = time.strptime(entry.date, '%d %b %Y') output += ', submitted ' + timeperiod(entry.date, entry.date) else: output += ', expected ' + entry.expected output += '</li>\n' output += '</ul>\n' #################### # part 2: Lectures # #################### output += '<h2>Lectures</h2>' output += '<ul class="talks">\n' for entry in data.teaching.lectures.lecture: output += '<li>' output += '<strong>' + entry.title if 'byProxy' in entry: output += ' — by proxy' output += '</strong><br/>' if 'detail' in entry: output += entry.detail + ', ' output += entry.institution + ' (' + entry.term + ')' output += '</li>\n' output += '</ul>\n' #################### # part 3: Seminars # #################### output += '<h2>Seminars</h2>' output += '<ul class="talks">\n' for entry in data.teaching.seminars.seminar: output += '<li>' output += '<strong>' + entry.title if 'byProxy' in entry: output += ' — by proxy' output += '</strong><br/>' if 'detail' in entry: output += entry.detail + ', ' output += entry.institution + ' (' + entry.term + ')' output += '</li>\n' output += '</ul>\n' ##################### # part 4: Exercises # ##################### output += '<h2>Exercises</h2>' output += '<ul class="talks">\n' for entry in data.teaching.exercises.exercise: output += '<li>' # if 'evaluation' in entry: # output += '<a href="files/' + entry.evaluation + '" class="evaluation"></a>' output += '<strong>' if 'page' in entry: output += '<a href="teaching/' + entry.page + '.html">' + entry.title + '</a>' else: output += entry.title output += '</strong><br/>' if 'detail' in entry: output += entry.detail + ', ' output += entry.institution + ' (' + entry.term + ')' output += '</li>\n' output += '</ul>\n' # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing teaching.html...") f = open('../../teaching.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()
def academic(): # add header template print("Generating academic.html...") output = open('../html/academic.html', 'r').read() # read data XML file xml = XML2Dict() data = xml.fromstring(open('../xml/academic.xml', 'r').read()) output += '<h2 class="first">Steering Committee Membership</h2>\n' output += '<ul class="talks">\n' output += '<li><strong><a href="http://zeus-workshop.eu/">ZEUS Workshop Series</a></strong><br />Central European Workshop on Services and their Composition</li>' output += '</ul>\n' ##################################### # part 1: Organization of Workshops # ##################################### # transform date types for entry in data.scientific.organization.workshop: entry.begin = time.strptime(entry.begin, '%d %b %Y') entry.end = time.strptime(entry.end, '%d %b %Y') # sort by begin date data.scientific.organization.workshop = sorted(data.scientific.organization.workshop, key=lambda k: k.begin, reverse=True) # output output += '<h2>Organization of Workshops</h2>\n' output += '<ul class="talks">\n' for entry in data.scientific.organization.workshop: # title output += '<li><strong>' if 'abbreviation' in entry: output += entry.title if 'url' in entry: output += ' (<a href="' + entry.url + '">' + entry.abbreviation.replace(" ", " ") + '</a>)' else: output += ' (' + entry.abbreviation.replace(" ", " ") + ')' else: if 'url' in entry: output += '<a href="' + entry.url + '">' + entry.title + '</a>' else: output += entry.title output += '</strong><br/>\n' # colocation if 'kind' in entry: output += entry.kind if 'colocation' in entry: output += ', ' if 'courl' in entry: output += 'part of <a href="' + entry.courl + '">' + entry.colocation + '</a>' else: output += 'part of ' + entry.colocation else: if 'colocation' in entry: if 'courl' in entry: output += 'part of <a href="' + entry.courl + '">' + entry.colocation + '</a>' else: output += 'part of ' + entry.colocation # date output += '<br/>' output += timeperiod(entry.begin, entry.end) # venue if 'venue' in entry: output += ' in ' + entry.venue output += '</li>\n' output += '</ul>\n' ########################## # part 2: PC memberships # ########################## # transform date types for entry in data.scientific.memberships.pc: entry.date = time.strptime(entry.date, '%d %b %Y') entry.begin = time.strptime(entry.begin, '%d %b %Y') entry.end = time.strptime(entry.end, '%d %b %Y') # sort by begin date data.scientific.memberships.pc = sorted(data.scientific.memberships.pc, key=lambda k: k.begin, reverse=True) # output output += '<h2>Program Committee Memberships</h2>\n' output += '<ul class="talks">\n' for entry in data.scientific.memberships.pc: # title output += '<li><strong>' if 'abbreviation' in entry: output += entry.title if 'url' in entry: output += ' (<a href="' + entry.url + '">' + entry.abbreviation.replace(" ", " ") + '</a>)' else: output += ' (' + entry.abbreviation.replace(" ", " ") + ')' else: if 'url' in entry: output += '<a href="' + entry.url + '">' + entry.title + '</a>' else: output += entry.title if 'role' in entry: output += ' — ' + entry.role output += '</strong><br/>\n' # colocation if 'kind' in entry: output += entry.kind if 'colocation' in entry: output += ', ' if 'courl' in entry: output += 'part of <a href="' + entry.courl + '">' + entry.colocation + '</a>' else: output += 'part of ' + entry.colocation else: if 'colocation' in entry: if 'courl' in entry: output += 'part of <a href="' + entry.courl + '">' + entry.colocation + '</a>' else: output += 'part of ' + entry.colocation # date output += '<br/>' output += timeperiod(entry.begin, entry.end) # venue if 'venue' in entry: output += ' in ' + entry.venue # call for paper if 'cfp' in entry and entry.begin > time.localtime(): output += '<br/><a href="' + entry.cfp + '">Call for papers</a>' output += '</li>\n' output += '</ul>\n' ########################### # part 3: Journal Reviews # ########################### # sort by journal title data.scientific.journalreviews.journal = sorted(data.scientific.journalreviews.journal, key=lambda k: k.title) # output output += '<h2>Journal Reviewing Activities</h2>\n' output += '<ul class="talks">\n' for entry in data.scientific.journalreviews.journal: # title output += '<li><strong>' if 'url' in entry: output += '<a href="' + entry.url + '">' + entry.title + '</a>' else: output += entry.title output += '</strong></li>\n' output += '</ul>\n' # footer output += '</div></div>' output += footer() output += '</body></html>' print("Writing academic.html...") f = open('../../academic.html', 'w') f.write(output.replace(" & ", " & ").replace(" - ", " — ")) f.close()