def cards():
	""" Renders cards for all jammers with a ticket """
	jamsite = JamSite.load()
	jamsite.apply_human()
	if not_imported(jamsite):
		return redirect(url_for('index'))
	return Response(render_jammers(jamsite.jammers_sorted_by_main_role(with_ticket=True), extra=load_extra()))
def import_all_jammers(sources=[dict(file='jammers.csv')], fieldnames=None):
	""" Handles the details """
	jamsite = JamSite().load().reset()
	
	for source in sources:
		if "url" in source.keys():
			url = source['url']
			fieldnames = gf_fieldnames(source.get('fields', None))
			import_from_url(jamsite, url, fieldnames)
		else:
			file = source.get("file", "Catastrophe")
			fieldnames = gf_fieldnames(source.get('fields', None))
			import_from_file(jamsite, file, fieldnames)
	
	# Add a touch of human decisions.
	jamsite.apply_human()
	return jamsite
def all_cards():
	""" Renders cards for all known about jammers associated with this site.
		ticekt holders and waiting list jammers """
	jamsite = JamSite.load()
	jamsite.apply_human()
	if not_imported(jamsite):
		return redirect(url_for('index'))
	return Response(render_jammers(jamsite.jammers.values()))
def editable_cards():
	""" Renders cards for all jammers with a ticket , and lets them be edited."""
	jamsite = JamSite.load()
	jamsite.apply_human()
	if not_imported(jamsite):
		return redirect(url_for('index'))
	return Response(render_editable_jammers(jamsite.jammers_with_ticket, 
				ui=edit_jammer_ui.format(url=url_for('update_jammer')), 
				extra=load_extra()))
def reset():
	try:
		jamsite = JamSite.load()
		jamsite.reset(all=True)
		jamsite.save()
		flash("Hard reset performed.")
		return redirect(url_for('index'))
	except:
		import traceback
		return "<pre>"+traceback.format_exc()+"</pre>"
def update_jammer():
	""" updates a jammer """
	d = request.args
	#hehehehehe. but it works. 
	jammer = Jammer(**dict((k, str(d[k])) for k in list(d.keys())))
	#jammer.accumulate()
	jamsite = JamSite.load()
	jamsite.administrated_jammers[jammer.username] = jammer
	#jamsite.jammers[jammer.username] = jamsite.jammers[jammer.username].update(jammer)
	jamsite.save()
	## Flash (OK). not necessary actually.
	return redirect(url_for('editable_cards') + '#' + jammer.username)
def waiting_list():
	jamsite = JamSite.load()
	jamsite.apply_human()
	if not_imported(jamsite):
		return redirect(url_for('index'))
	return render_waiting_list(jamsite.waiting_list())
def index2():
	jamsite = JamSite.load()
	jamsite.apply_human()
	return render_template("index.html", jamsite=jamsite)