def github_username_watched(request,username, link_type): """has all github repos for a username""" owned = False starred = False if link_type == "owned": owned = True elif link_type == "starred": starred = True repo_link_type, _ = LinkType.objects.get_or_create(name = link_type) username = urllib.unquote(username) user = request.user github_provider = GithubProvider(user) repositories_by_language, repository_user = github_provider.retrieve_repositories_dict(username, link_type = link_type) repository_user.save() if len(repositories_by_language) == 0: watched = github_provider.get_repositories(username, link_type = link_type) count = 0 for repo in watched: update = False try: repository = Repository.objects.get(host_slug= 'github/'+repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = github_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() if not repository.private: count += 1 RepositoryUserRepositoryLink.objects.get_or_create(user = repository_user, repository = repository, link_type = repo_link_type) repositories_by_language[repository.language].append(repository) if repo_link_type.name == "owned": owned = True pass elif repo_link_type.name == "starred": repository_user.starred = count starred = True elif repo_link_type.name == "watched": repository_user.watched = count repository_user.save() for category in repositories_by_language.keys(): RepositoryCategory.objects.get_or_create(name = category) repositories_by_language[category].sort(key=lambda x: x.watchers, reverse = True) return render_to_response('github_username_watched.html', {'username':username,'repositories_by_language':sorted(dict(repositories_by_language).iteritems(),key=lambda (k, v): len(v),reverse = True),'owned':owned,"starred":starred},context_instance=RequestContext(request))
def authed_category_owned(request,category): """has all github repos and the latest 30 events for a username with a specific category""" repo_link_type, _ = LinkType.objects.get_or_create(name = "owned") owned = True category = urllib.unquote(category).lower() github_repo_events = [] bitbucket_repo_events = [] github_watched_filtered = [] bitbucket_watched_filtered = [] user = request.user repository_user = None github_username = None bitbucket_username = None bitbucket_authed = True github_authed = True watched_filtered = [] try: github_username = user.social_auth.get(provider='github').extra_data['username'] github_provider = GithubProvider(user) github_watched_filtered, github_repository_user = github_provider.retrieve_category_repositories(github_username, category, "owned") watched_filtered.extend(github_watched_filtered) github_repository_user.save() if len(github_watched_filtered) == 0: watched = github_provider.get_repositories(github_username, "owned") category_lower = category.lower() for repo in watched: update = False try: repository = Repository.objects.get(host_slug= 'github/'+repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = github_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() if repository.language == category_lower: github_watched_filtered.append(repository) if not repository.private: RepositoryUserRepositoryLink.objects.get_or_create(user = github_repository_user, repository = repository, link_type = repo_link_type) watched_filtered.extend(github_watched_filtered) watched_filtered.sort(key=lambda x: x.watchers, reverse = True) RepositoryCategory.objects.get_or_create(name = category.lower()) github_repository_user.save() # Get repository events github_repo_events = github_provider.get_repositories_events(github_watched_filtered) for github_repo_event in github_repo_events: github_repo_event['host'] = 'github' github_repo_event['created_on'] = dateutil.parser.parse(github_repo_event['created_at']) except ObjectDoesNotExist: github_authed = False user = request.user try: bitbucket_username = user.social_auth.get(provider='bitbucket').extra_data['username'] profile = user.get_profile() bitbucket_provider = BitbucketProvider(user) bitbucket_watched_filtered, bitbucket_repository_user = bitbucket_provider.retrieve_owned_category_repositories(bitbucket_username, category) watched_filtered.extend(bitbucket_watched_filtered) if len(bitbucket_watched_filtered) == 0: owned = bitbucket_provider.get_owned_repositories(bitbucket_username) for repo in owned: update = False try: repository = Repository.objects.get(host_slug= 'bitbucket/'+repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = bitbucket_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() if repository.language == category_lower: bitbucket_watched_filtered.append(repository) watched_filtered.extend(bitbucket_watched_filtered) watched_filtered.sort(key=lambda x: x.watchers, reverse = True) RepositoryCategory.objects.get_or_create(name = category.lower()) bitbucket_repo_events = bitbucket_provider.get_repositories_events(bitbucket_watched_filtered) for bitbucket_repo_event in bitbucket_repo_events: bitbucket_repo_event['host'] = 'bitbucket' bitbucket_repo_event['created_on'] = dateutil.parser.parse(bitbucket_repo_event['utc_created_on']) except ObjectDoesNotExist: bitbucket_authed = False repo_events = sorted(github_repo_events + bitbucket_repo_events,key=itemgetter('created_on'), reverse = True)[:30] if bitbucket_authed or github_authed: return render_to_response('username_category_watched.html', {'github_username': github_username,'github_authed': github_authed,'bitbucket_username':bitbucket_username, 'bitbucket_authed':bitbucket_authed, 'watched':watched_filtered, 'category':category, 'repo_events':repo_events,'owned':owned},context_instance=RequestContext(request)) else: return HttpResponseRedirect(reverse('repowatcher.main.views.authed'))
def authed_owned(request): repo_link_type, _ = LinkType.objects.get_or_create(name = "owned") repositories_by_language = defaultdict(list) github_repositories_by_language = defaultdict(list) bitbucket_repositories_by_language = defaultdict(list) bitbucket_authed = True github_authed = True owned = True api_only = True user = request.user github_username = None bitbucket_username = None try: github_username = user.social_auth.get(provider='github').extra_data['username'] github_provider = GithubProvider(user) github_repositories_by_language, github_repository_user = github_provider.retrieve_repositories_dict(github_username, "owned") if len(github_repositories_by_language) == 0: owned_repos = github_provider.get_repositories(github_username, "owned") count = 0 for repo in owned_repos: update = False try: repository = github_provider.retrieve_repository_details(repo['owner'], repo['name']) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = github_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() if not repository.private: count += 1 RepositoryUserRepositoryLink.objects.get_or_create(user = github_repository_user, repository = repository, link_type = repo_link_type) github_repositories_by_language[repository.language.lower()].append(repository) for category in github_repositories_by_language.keys(): RepositoryCategory.objects.get_or_create(name=category) repositories_by_language[category].extend(github_repositories_by_language[category]) for category in repositories_by_language.keys(): repositories_by_language[category].sort(key=lambda x: x.watchers, reverse = True) else: for category in github_repositories_by_language.keys(): repositories_by_language[category].extend(github_repositories_by_language[category]) except ObjectDoesNotExist: github_authed = False try: bitbucket_username = user.social_auth.get(provider='bitbucket').extra_data['username'] bitbucket_provider = BitbucketProvider(user) bitbucket_repositories_by_language, bitbucket_repository_user = bitbucket_provider.retrieve_owned_repositories_dict(bitbucket_username) if len(bitbucket_repositories_by_language)==0: owned_repos = bitbucket_provider.get_owned_repositories(bitbucket_username) for repo in owned_repos: update = False try: repository = bitbucket_provider.retrieve_repository_details(repo['owner'], repo['name']) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = bitbucket_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() bitbucket_repositories_by_language[repository.language].append(repository) for category in bitbucket_repositories_by_language.keys(): RepositoryCategory.objects.get_or_create(name=category) repositories_by_language[category].extend(bitbucket_repositories_by_language[category]) for category in repositories_by_language.keys(): repositories_by_language[category].sort(key=lambda x: x.watchers, reverse = True) else: for category in bitbucket_repositories_by_language.keys(): repositories_by_language[category].extend(bitbucket_repositories_by_language[category]) except ObjectDoesNotExist: bitbucket_authed = False if bitbucket_authed or github_authed: return render_to_response('username_watched.html', {'github_username': github_username,'github_authed': github_authed,'bitbucket_username':bitbucket_username, 'bitbucket_authed':bitbucket_authed,'repositories_by_language':sorted(dict(repositories_by_language).iteritems(),key=lambda (k, v): len(v),reverse = True),'owned':owned},context_instance=RequestContext(request)) else: return HttpResponseRedirect(reverse('repowatcher.main.views.authed'))
def github_username_category_watched(request,username,category, link_type): """has all github repos and the latest 30 events for a username with a specific category""" owned = False starred = False repo_link_type, _ = LinkType.objects.get_or_create(name = link_type) if request.GET.get('sorted_by_watchers', 'false') == 'true': sorted_by_watchers = True username = urllib.unquote(username) category = urllib.unquote(category).lower() user = request.user github_provider = GithubProvider(user) watched_filtered, repository_user = github_provider.retrieve_category_repositories(username, category, link_type) repository_user.save() if len(watched_filtered) == 0: watched = github_provider.get_repositories(username, link_type) count = 0 for repo in watched: update = False try: repository = Repository.objects.get(host_slug= 'github/'+repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days = 1): repository = github_provider.create_or_update_repository_details(repo, repository) if not repository.private: repository.save() if repository.language.lower() == category: watched_filtered.append(repository) if not repository.private: count += 1 if not repository.private: RepositoryUserRepositoryLink.objects.get_or_create(user = repository_user, repository = repository, link_type = repo_link_type) RepositoryCategory.objects.get_or_create(name = category.lower()) if repo_link_type.name == "owned": pass elif repo_link_type.name == "starred": repository_user.starred = count elif repo_link_type.name == "watched": repository_user.watched = count repository_user.save() watched_filtered.sort(key=lambda x: x.watchers, reverse = True) if repo_link_type.name == "owned": owned = True elif repo_link_type.name == "starred": starred = True elif repo_link_type.name == "watched": pass # Get repository events repo_events = [] # page = 0 # watched_filtered_length = len(watched_filtered) # user_path = False # if owned: # if repository_user is not None and repository_user.public_repos is not None and float(repository_user.public_repos) < 0.5*(watched_filtered_length**2): # user_path = True # else: # if repository_user is not None and repository_user.watched is not None and float(repository_user.watched) < 0.5*(watched_filtered_length**2): # user_path = True # if user_path: # while len(repo_events) < 30 and page <= watched_filtered_length: # page += 1 # r = requests.get('https://api.github.com/users/'+ username + '/received_events', params = {'page':page}) # try: # user_events = json.loads(r.text) # except ValueError: # user_events = [] # for user_event in user_events: # for watched_filter in watched_filtered: # if user_event['repo']['name'] == watched_filter.slug: # repo_events.append(user_event) # repo_events = repo_events[:30] # else: repo_events = github_provider.get_repositories_events(watched_filtered) return render_to_response('github_username_category_watched.html', {'username': username, 'watched':watched_filtered, 'category':category, 'repo_events':repo_events,'owned':owned,"starred":starred},context_instance=RequestContext(request))
def authed_category_owned(request, category): """has all github repos and the latest 30 events for a username with a specific category""" repo_link_type, _ = LinkType.objects.get_or_create(name="owned") owned = True category = urllib.unquote(category).lower() github_repo_events = [] bitbucket_repo_events = [] github_watched_filtered = [] bitbucket_watched_filtered = [] user = request.user repository_user = None github_username = None bitbucket_username = None bitbucket_authed = True github_authed = True watched_filtered = [] try: github_username = user.social_auth.get( provider='github').extra_data['username'] github_provider = GithubProvider(user) github_watched_filtered, github_repository_user = github_provider.retrieve_category_repositories( github_username, category, "owned") watched_filtered.extend(github_watched_filtered) github_repository_user.save() if len(github_watched_filtered) == 0: watched = github_provider.get_repositories(github_username, "owned") category_lower = category.lower() for repo in watched: update = False try: repository = Repository.objects.get( host_slug='github/' + repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days=1): repository = github_provider.create_or_update_repository_details( repo, repository) if not repository.private: repository.save() if repository.language == category_lower: github_watched_filtered.append(repository) if not repository.private: RepositoryUserRepositoryLink.objects.get_or_create( user=github_repository_user, repository=repository, link_type=repo_link_type) watched_filtered.extend(github_watched_filtered) watched_filtered.sort(key=lambda x: x.watchers, reverse=True) RepositoryCategory.objects.get_or_create(name=category.lower()) github_repository_user.save() # Get repository events github_repo_events = github_provider.get_repositories_events( github_watched_filtered) for github_repo_event in github_repo_events: github_repo_event['host'] = 'github' github_repo_event['created_on'] = dateutil.parser.parse( github_repo_event['created_at']) except ObjectDoesNotExist: github_authed = False user = request.user try: bitbucket_username = user.social_auth.get( provider='bitbucket').extra_data['username'] profile = user.get_profile() bitbucket_provider = BitbucketProvider(user) bitbucket_watched_filtered, bitbucket_repository_user = bitbucket_provider.retrieve_owned_category_repositories( bitbucket_username, category) watched_filtered.extend(bitbucket_watched_filtered) if len(bitbucket_watched_filtered) == 0: owned = bitbucket_provider.get_owned_repositories( bitbucket_username) for repo in owned: update = False try: repository = Repository.objects.get( host_slug='bitbucket/' + repo['owner'].lower() + '/' + repo['name'].lower()) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days=1): repository = bitbucket_provider.create_or_update_repository_details( repo, repository) if not repository.private: repository.save() if repository.language == category_lower: bitbucket_watched_filtered.append(repository) watched_filtered.extend(bitbucket_watched_filtered) watched_filtered.sort(key=lambda x: x.watchers, reverse=True) RepositoryCategory.objects.get_or_create(name=category.lower()) bitbucket_repo_events = bitbucket_provider.get_repositories_events( bitbucket_watched_filtered) for bitbucket_repo_event in bitbucket_repo_events: bitbucket_repo_event['host'] = 'bitbucket' bitbucket_repo_event['created_on'] = dateutil.parser.parse( bitbucket_repo_event['utc_created_on']) except ObjectDoesNotExist: bitbucket_authed = False repo_events = sorted(github_repo_events + bitbucket_repo_events, key=itemgetter('created_on'), reverse=True)[:30] if bitbucket_authed or github_authed: return render_to_response('username_category_watched.html', { 'github_username': github_username, 'github_authed': github_authed, 'bitbucket_username': bitbucket_username, 'bitbucket_authed': bitbucket_authed, 'watched': watched_filtered, 'category': category, 'repo_events': repo_events, 'owned': owned }, context_instance=RequestContext(request)) else: return HttpResponseRedirect(reverse('repowatcher.main.views.authed'))
def authed_owned(request): repo_link_type, _ = LinkType.objects.get_or_create(name="owned") repositories_by_language = defaultdict(list) github_repositories_by_language = defaultdict(list) bitbucket_repositories_by_language = defaultdict(list) bitbucket_authed = True github_authed = True owned = True api_only = True user = request.user github_username = None bitbucket_username = None try: github_username = user.social_auth.get( provider='github').extra_data['username'] github_provider = GithubProvider(user) github_repositories_by_language, github_repository_user = github_provider.retrieve_repositories_dict( github_username, "owned") if len(github_repositories_by_language) == 0: owned_repos = github_provider.get_repositories( github_username, "owned") count = 0 for repo in owned_repos: update = False try: repository = github_provider.retrieve_repository_details( repo['owner'], repo['name']) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days=1): repository = github_provider.create_or_update_repository_details( repo, repository) if not repository.private: repository.save() if not repository.private: count += 1 RepositoryUserRepositoryLink.objects.get_or_create( user=github_repository_user, repository=repository, link_type=repo_link_type) github_repositories_by_language[ repository.language.lower()].append(repository) for category in github_repositories_by_language.keys(): RepositoryCategory.objects.get_or_create(name=category) repositories_by_language[category].extend( github_repositories_by_language[category]) for category in repositories_by_language.keys(): repositories_by_language[category].sort( key=lambda x: x.watchers, reverse=True) else: for category in github_repositories_by_language.keys(): repositories_by_language[category].extend( github_repositories_by_language[category]) except ObjectDoesNotExist: github_authed = False try: bitbucket_username = user.social_auth.get( provider='bitbucket').extra_data['username'] bitbucket_provider = BitbucketProvider(user) bitbucket_repositories_by_language, bitbucket_repository_user = bitbucket_provider.retrieve_owned_repositories_dict( bitbucket_username) if len(bitbucket_repositories_by_language) == 0: owned_repos = bitbucket_provider.get_owned_repositories( bitbucket_username) for repo in owned_repos: update = False try: repository = bitbucket_provider.retrieve_repository_details( repo['owner'], repo['name']) except ObjectDoesNotExist: update = True repository = Repository() if update or (datetime.now() - repository.last_modified) > timedelta(days=1): repository = bitbucket_provider.create_or_update_repository_details( repo, repository) if not repository.private: repository.save() bitbucket_repositories_by_language[repository.language].append( repository) for category in bitbucket_repositories_by_language.keys(): RepositoryCategory.objects.get_or_create(name=category) repositories_by_language[category].extend( bitbucket_repositories_by_language[category]) for category in repositories_by_language.keys(): repositories_by_language[category].sort( key=lambda x: x.watchers, reverse=True) else: for category in bitbucket_repositories_by_language.keys(): repositories_by_language[category].extend( bitbucket_repositories_by_language[category]) except ObjectDoesNotExist: bitbucket_authed = False if bitbucket_authed or github_authed: return render_to_response('username_watched.html', { 'github_username': github_username, 'github_authed': github_authed, 'bitbucket_username': bitbucket_username, 'bitbucket_authed': bitbucket_authed, 'repositories_by_language': sorted(dict(repositories_by_language).iteritems(), key=lambda (k, v): len(v), reverse=True), 'owned': owned }, context_instance=RequestContext(request)) else: return HttpResponseRedirect(reverse('repowatcher.main.views.authed'))