def GET(self, username):
        contact = db.users.find_one({'username':username})
        if not contact:
            raise web.notfound()

        trans, balance, people_owe_you, you_owe_people = transactions.get_transaction_details(db, users.get_user())

        owes_you = False
        you_owe = False
        if contact['username'] in people_owe_you:
            owes_you = people_owe_you[contact['username']][1]
        elif contact['username'] in you_owe_people:
            you_owe = you_owe_people[contact['username']][1]

        return render('/users/profile.html', profile=contact, connected=self.connected(contact), owes_you = owes_you, you_owe = you_owe)
    def GET(self):
        user = users.get_user()

        trans, balance, people_owe_you, you_owe_people = transactions.get_transaction_details(db, user)

        return render('summary.html', transactions=trans, balance=balance, people_owe_you=people_owe_you, you_owe_people=you_owe_people)
    def GET(self):
        user = users.get_user()
        trans, balance, people_owe_you, you_owe_people = transactions.get_transaction_details(db, user, values_as_nums=True)

        nodes = {user['username']:0}
        paths = {}

        contacts = mongo_utils.deref_list(db, user['contacts'])
        contact_debts = {user['username']: (people_owe_you, you_owe_people)}

        for contact in contacts:
            nodes[contact['username']] = len(nodes)
            trans, balance, people_owe_you, you_owe_people = transactions.get_transaction_details(db, contact, values_as_nums=True)
            contact_debts[contact['username']] = (people_owe_you, you_owe_people)

        #Do some crazy graph shit
        for person, (owe_you, you_owe)  in contact_debts.iteritems():
            for (username, (user, value)) in owe_you.iteritems():                
                if (nodes[username], nodes[person]) not in paths:
                    paths[(nodes[username], nodes[person])] = value
                    
            for (username, (user, value)) in you_owe.iteritems():
                if (nodes[person], nodes[username]) not in paths:
                    paths[(nodes[person], nodes[username])] = value

        print "NODES"
        print nodes

        #Get rid of current user
        radius = 40
        nodes_list = {0:(user['username'], (radius,radius))}
        del nodes[user['username']]
                    
        #Work out where to put stuff with the graphs.
        degree = (2 * math.pi)/len(nodes)
        coords = [(round(math.sin(degree*num)*radius),round(math.cos(degree*num)*radius)) for num in range(len(nodes))]
        coords = map(lambda (x,y): (x+radius, abs(y-radius)), coords)

        #Set up the node coords
        for n,(k,v) in enumerate(nodes.iteritems()):
            nodes_list[v] = (k,(coords[n]))

        print "NODES LIST"
        print nodes_list
        print "PATHS"
        print paths
        

        #Now replace the line mappings with the actual coords
        paths_list = []
        for (person, person2), value in paths.iteritems():                    
            print "PERSON"
            print person
            print "PERSON2"
            print person2
            print "PERSON 1 NODE:"
            print nodes_list[person]
            print "PERSON 2 NODE:"
            print nodes_list[person2]
            if nodes_list[person][1][1] < nodes_list[person2][1][1]:                
                top, bottom = person, person2
            else:
                if nodes_list[person][1][0] < nodes_list[person2][1][0]:
                    top, bottom = person, person2
                else:
                    top, bottom = person2, person

            start_coords = list(nodes_list[top][1])
            height = nodes_list[bottom][1][1] - nodes_list[top][1][1]
            width = abs(nodes_list[bottom][1][0] - nodes_list[top][1][0])
            up_or_down = 'down' if nodes_list[top][1][0] >= nodes_list[bottom][1][0] else 'up'

            paths_list.append((start_coords, height, width, up_or_down, value))                
            #pass

        print paths_list

        return render('network.html', nodes=nodes_list, paths=paths_list, radius=radius)