Merge branch 'master' of github.com:econchick/rogueojiiofwales into crazy
Conflicts: githubnetwork/views.py
This commit is contained in:
		
						commit
						b456362a47
					
				
					 2 changed files with 83 additions and 4 deletions
				
			
		| 
						 | 
					@ -93,7 +93,7 @@ class GHUser(BaseAPIModel):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Repo(BaseAPIModel):
 | 
					class Repo(BaseAPIModel):
 | 
				
			||||||
    owner = models.ForeignKey(GHUser, unique=True)
 | 
					    owner = models.ForeignKey(GHUser, unique=True, verbose_name='ghuser')
 | 
				
			||||||
    forks = models.IntegerField()
 | 
					    forks = models.IntegerField()
 | 
				
			||||||
    language = models.CharField(max_length=255)
 | 
					    language = models.CharField(max_length=255)
 | 
				
			||||||
    created_at = models.DateTimeField('date repo created')
 | 
					    created_at = models.DateTimeField('date repo created')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,15 +1,94 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
from django.contrib.auth.decorators import login_required
 | 
					from django.contrib.auth.decorators import login_required
 | 
				
			||||||
from django.http import HttpResponseBadRequest, HttpResponse
 | 
					from django.http import HttpResponse
 | 
				
			||||||
from django.shortcuts import render_to_response
 | 
					from django.shortcuts import render_to_response
 | 
				
			||||||
from django.template.context import RequestContext
 | 
					from django.template.context import RequestContext
 | 
				
			||||||
from django.utils import simplejson
 | 
					from django.utils.decorators import method_decorator
 | 
				
			||||||
 | 
					from django.views.generic.detail import DetailView
 | 
				
			||||||
 | 
					from ghapi import api
 | 
				
			||||||
 | 
					from models import GHUser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Graph(object):
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        self.nodes = set()
 | 
				
			||||||
 | 
					        self.edges = {}
 | 
				
			||||||
 | 
					        self.distances = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def add_node(self, value):
 | 
				
			||||||
 | 
					        self.nodes.add(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def add_edge(self, from_node, to_node, distance):
 | 
				
			||||||
 | 
					        self._add_edge(from_node, to_node, distance)
 | 
				
			||||||
 | 
					        self._add_edge(to_node, from_node, distance)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _add_edge(self, from_node, to_node, distance):
 | 
				
			||||||
 | 
					        self.edges.setdefault(from_node, [])
 | 
				
			||||||
 | 
					        self.edges[from_node].append(to_node)
 | 
				
			||||||
 | 
					        self.distances[(from_node, to_node)] = distance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class NetworkView(DetailView):
 | 
				
			||||||
 | 
					    def get_user(self):
 | 
				
			||||||
 | 
					        self.user = GHUser.objects.get(username=self.kwargs.get('username'))
 | 
				
			||||||
 | 
					        return self.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_user_network(self):
 | 
				
			||||||
 | 
					        user = self.get_user()
 | 
				
			||||||
 | 
					        graph = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_repo_network(self):
 | 
				
			||||||
 | 
					        user = self.get_user()
 | 
				
			||||||
 | 
					        graph = []
 | 
				
			||||||
 | 
					        for repo in api.get_iter('user/%s/repos' % user):
 | 
				
			||||||
 | 
					            # TODO: (Lynn) this is messy - clean up
 | 
				
			||||||
 | 
					            links = {}
 | 
				
			||||||
 | 
					            repo_info = api.get('repos/%s/%s' % (user, repo))
 | 
				
			||||||
 | 
					            parent = repo_info['parent']['owner']['login']
 | 
				
			||||||
 | 
					            child = repo_info['owner']['login']
 | 
				
			||||||
 | 
					            watchers = repo_info['parent']['watchers']
 | 
				
			||||||
 | 
					            network = repo_info['network_count']
 | 
				
			||||||
 | 
					            date_updated_parent = repo_info['parent']['updated_at']
 | 
				
			||||||
 | 
					            date_updated_child = repo_info['updated_at']
 | 
				
			||||||
 | 
					            links['source'] = parent
 | 
				
			||||||
 | 
					            links['target'] = child
 | 
				
			||||||
 | 
					            links['weight'] = {'watchers': watchers, 'network': network,
 | 
				
			||||||
 | 
					                               'date_updated_parent': date_updated_parent,
 | 
				
			||||||
 | 
					                               'date_updated_child': date_updated_child}
 | 
				
			||||||
 | 
					            graph.append(links)
 | 
				
			||||||
 | 
					        return graph
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_queryset(self):
 | 
				
			||||||
 | 
					        self.get_user()
 | 
				
			||||||
 | 
					        if repos:
 | 
				
			||||||
 | 
					            # do repo-y things
 | 
				
			||||||
 | 
					            self.get_repo_network()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            # do user-y things
 | 
				
			||||||
 | 
					            self.get_user_network()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_context_data(self, **kwargs):
 | 
				
			||||||
 | 
					        # TODO: (Lynn) figure out what's needed for context data
 | 
				
			||||||
 | 
					        context_object_name = self.get_context_object_name(queryset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get(self):
 | 
				
			||||||
 | 
					        self.object_list = self.get_queryset()
 | 
				
			||||||
 | 
					        context = self.get_context_data(object_list=self.object_list)
 | 
				
			||||||
 | 
					        return self.render_to_response(context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @method_decorator(login_required)
 | 
				
			||||||
 | 
					    def dispatch(self, *args, ** kwargs):
 | 
				
			||||||
 | 
					        return super(ProtectedView, self).dispatch(*args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def me(request):
 | 
					def me(request):
 | 
				
			||||||
    context = RequestContext(request)
 | 
					    context = RequestContext(request)
 | 
				
			||||||
    context['followers'] = simplejson.dumps([{'name': unicode(follower), 'group': 2} for follower in request.gh_user.following.all()])
 | 
					    context['followers'] = simplejson.dumps(
 | 
				
			||||||
 | 
					        [{'name': unicode(follower), 'group': 2} for follower in request.gh_user.following.all()])
 | 
				
			||||||
    return render_to_response('graph.html', context)
 | 
					    return render_to_response('graph.html', context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def get_user_followers(request):
 | 
					def get_user_followers(request):
 | 
				
			||||||
    name = request.GET.get('user', None)
 | 
					    name = request.GET.get('user', None)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue