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