def takeSnapshot(postVars):
	
	global couchdbServer
	
	templateVars = dict(saved = False)

	try:
			db = couchdbServer.create("snapshots")
	except:
			db = couchdbServer["snapshots"]

	try:
		snapshotName = postVars["snapshotName"].value.decode("utf-8")	
		snapshot = Snapshot()
		snapshot.description = snapshotName
		snapshot.takeSnapshot()
		snapshot.store(db)
	except:
		pass

	
	templateVars['snapshots'] = []
	for snapshotId in db:
		templateVars['snapshots'].append(Snapshot.load(db,snapshotId))
	
	templateVars['snapshots'] = sorted(templateVars['snapshots'], reverse = True, key=lambda snapshot: snapshot["date"])
	
	return output_template("takeSnapshot.html", templateVars)
	def testSnapshots(self):

		server = Server()
		try:
			db = server.create("players")
		except:
			db = server["players"]

		bolivar = Player()
		bolivar.setName("Bolivar")
		bolivar.setPhoto("images/bolivar.jpg")
		bolivar.setKarma(288)
		bolivar.store(db)

		indio = Player()
		indio.setName("Indio")
		indio.setPhoto("images/indio.jpg")
		indio.setKarma(388)
		indio.store(db)

		ss = Snapshot()
		ss.description = "Teste de snapshot"
		self.assertEqual(ss.takeSnapshot(), True), "Error taking snapshot"

		try:
			server.delete("snapshots")
		except:
			pass

		try:
			db = server.create("snapshots")
		except:
			db = server["snapshots"]

		ss.store(db)

		ss = Snapshot.load(db,ss.id)
		server.delete(ss.name)
		server.delete("snapshots")
    for m_volume_fetched in m_volumes_fetched['Volumes']:
        m_volume_id = m_volume_fetched['VolumeId']
        m_volume = Volume(
            m_volume_id,
            m_managed_volume_db.get_backup_set(m_volume_id),
            m_client_ec2,
            m_profile_name
        )
        m_volumes.append(m_volume)
        m_volume_index.update({m_volume.id: m_volume})

    for m_snapshot_fetched in m_snapshots_fetched['Snapshots']:
        m_volume_id = m_snapshot_fetched['VolumeId']
        m_snapshot = Snapshot(
            m_snapshot_fetched['SnapshotId'],
            m_volume_id,
            m_snapshot_fetched['StartTime'],
            m_client_ec2
        )
        m_snapshots.append(m_snapshot)
        m_snapshot_index.update({m_snapshot.id: m_snapshot})
        if m_volume_id in m_volume_index:
            m_volume_index[m_volume_id].add_snapshot(m_snapshot)
            m_snapshot.set_has_volume_flag(True)
        else:
            m_snapshot.set_has_volume_flag(False)
        m_snapshot.set_waived(m_managed_volume_db.is_snapshot_waived(m_volume_id))

    m_results = m_client_ec2.describe_snapshots( OwnerIds=['self'], Filters=[ { 'Name': 'tag-key', 'Values': [ 'SnapSchedule', ] }, ], )
    for s in m_results['Snapshots']:
        m_snapshot_index[s['SnapshotId']].set_snapschedule_tag_flag(True)
def viewRanking(postVars):

	global couchdbServer
	players = []

	try:
		db = couchdbServer.create("players")
	except:
		db = couchdbServer["players"]


	for playerId in db:
		players.append(Player.load(db,playerId))

	sortedPlayers = sorted(players, reverse=True,  key=lambda player: player.karma) 

	playersNames = []
	playersKarmas = []
	for player in sortedPlayers:
		playersKarmas.append(str(player.karma))
		playersNames.append("\"%s\"" % player.name)

	try:
		db = couchdbServer.create("snapshots")
	except:
		db = couchdbServer["snapshots"]

	snapshots = []
	lastOpponent = None
	for snapshotId in db:
		snapshot = Snapshot.load(db,snapshotId)

		snapData = {}
		snapData["decription"] = snapshot.description
		snapData["opponent"] = snapshot.game.opponent
		snapData["idx"] = "%d%d%d%d%d%d" % (snapshot.date.year, 
		                                    snapshot.date.month, 
		                                    snapshot.date.day,
		                                    snapshot.date.hour,
		                                    snapshot.date.minute,
		                                    snapshot.date.second )

		snapshotLabel = "%d/%d/%d" % (snapshot.date.day, snapshot.date.month, snapshot.date.year )
		if snapshot.game.opponent != lastOpponent:
			lastOpponent = snapshot.game.opponent
			snapshotLabel = "%s %s" % (snapshot.game.opponent, snapshotLabel)

		snapData["label"] = snapshotLabel
		snapData["players"] = {}

		for player in snapshot.players:
			snapData["players"][player.name]= player.karma
	
		snapshots.append(snapData)

	sortedSnapshots = sorted(snapshots, key=lambda snapshot: snapshot["idx"])

	templateVars = {}
	templateVars["playersKarmas"] = ",".join(playersKarmas)
	templateVars["playersNames"] = ",".join(playersNames)
	templateVars["jsonSnapshots"] = json.dumps(sortedSnapshots)
	

	return output_template("viewRanking.html", templateVars)