Add avatars to the social graph, and use pydot

This commit is contained in:
Trever Fischer
2012-06-10 15:39:37 -04:00
parent 603ebe6435
commit ee5cab40c2
3 changed files with 38 additions and 14 deletions

View File

@@ -1,4 +1,8 @@
import badges.api
from django.contrib.auth.models import User
import pydot
import tempfile
from minecraft import download_avatar
def update_badges(user):
inviteCount = len(user.invites.filter(claimer__isnull=False))
@@ -8,3 +12,33 @@ def update_badges(user):
badges.api.award(user, "five_invites")
if inviteCount >= 10:
badges.api.award(user, "ten_invites")
def _user_graph(user, graph, avatarDir):
parentNode = graph.get_node(user.username)
if len(parentNode) == 0:
avatar = "%s/%s.png"%(avatarDir, user.username)
avatarFile = open(avatar, "w")
avatarFile.write(download_avatar(user.username, 64))
avatarFile.close()
parentNode = pydot.Node(user.username, image=avatar)
graph.add_node(parentNode)
for i in user.invites.filter(claimer__isnull=False):
node = graph.get_node(i.claimer.username)
if len(node) == 0:
avatar = "%s/%s.png"%(avatarDir, i.claimer.username)
avatarFile = open(avatar, "w")
avatarFile.write(download_avatar(i.claimer.username, 64))
avatarFile.close()
node = pydot.Node(i.claimer.username, image=avatar)
graph.add_node(node)
graph.add_edge(pydot.Edge(parentNode, node))
_user_graph(i.claimer, graph, avatarDir)
def social_graph(userList = []):
graph = pydot.Dot(rankdir="LR")
avatarDir = tempfile.mkdtemp()
if len(userList) == 0:
userList = User.objects.all()
for u in userList:
_user_graph(u, graph, avatarDir)
return graph

View File

@@ -1,20 +1,9 @@
from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from datetime import datetime
from django.db import connections, connection
from local.models import Invite
from local import social_graph
class Command(BaseCommand):
help = 'Generate a dot graph of invited users'
def handle(self, *args, **options):
print "digraph G {"
print "rankdir=\"LR\""
for i in Invite.objects.all():
if i.claimer is None:
continue
if i.creator is None:
continue
print "\"%s\" -> \"%s\""%(i.creator.__unicode__(), i.claimer.__unicode__())
print "}"
g = social_graph()
print g.create_dot()

View File

@@ -7,3 +7,4 @@ django_messages==0.4.4
south==0.7.3
django-piston==0.2.2
coverage
pydot=1.0.28