Merge pull request #5 from econchick/topic/views

Topic/views
This commit is contained in:
Eryn Wells 2012-08-18 15:38:28 -07:00
commit 51f8e1677a
2 changed files with 89 additions and 1 deletions

View file

@ -93,7 +93,7 @@ class GHUser(BaseAPIModel):
class Repo(BaseAPIModel):
owner = models.ForeignKey(GHUser, unique=True)
owner = models.ForeignKey(GHUser, unique=True, verbose_name='ghuser')
forks = models.IntegerField()
language = models.CharField(max_length=255)
created_at = models.DateTimeField('date repo created')

View file

@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
from collections import defaultdict
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, Http404, HttpResponseForbidden
from django.shortcuts import render_to_response, redirect
from django.template.context import RequestContext
from django.utils.decorators import method_decorator
from django.views.generic.base import TemplateView, TemplateResponseMixin
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, ModelFormMixin, FormView
from django.views.generic.list import ListView
from django.contrib.auth.models import User
from ghapi import api
from models import GHUser, Repo
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)