Add avatars to the social graph, and use pydot
This commit is contained in:
@@ -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
|
||||
|
@@ -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()
|
||||
|
@@ -7,3 +7,4 @@ django_messages==0.4.4
|
||||
south==0.7.3
|
||||
django-piston==0.2.2
|
||||
coverage
|
||||
pydot=1.0.28
|
||||
|
Reference in New Issue
Block a user