# Path: repowatcher/main/models.py
# class RepositoryUser(models.Model):
#     login = CharField(max_length=100,db_index = True)
#     name = CharField(max_length=100, null = True)
#     slug = SlugField(max_length=201, unique = True)
#     email = EmailField(max_length=254, null = True)
#     blog = URLField(null = True)
#     followers = PositiveIntegerField(null = True)
#     following = PositiveIntegerField(null = True)
#     public_repos = PositiveIntegerField(null = True)
#     created_at = DateTimeField(null=True)
#     extra_data = JSONField(null = True)
#     last_modified = DateTimeField(auto_now=True)
#     repositories = models.ManyToManyField(Repository, through='RepositoryUserRepositoryLink')
#     starred = PositiveIntegerField(null = True)
#     watched = PositiveIntegerField(null = True)
#     host = CharField(max_length=100, choices=HOST_CHOICES, db_index = True)
# 
#     class Meta:
#         unique_together = ("login", "host")
# 
#     def save(self, *args, **kwargs):
#         self.slug = self.host + '/' + self.login.lower()
#         super(RepositoryUser, self).save(*args, **kwargs)
# 
# class Repository(models.Model):
#     owner = CharField(max_length=100)
#     name = CharField(max_length=100)
#     slug = SlugField(max_length=201)
#     host_slug = SlugField(max_length=302, unique = True)
#     language = CharField(max_length=100, null = True)
#     html_url = URLField(null = True, max_length=400)
#     homepage = URLField(null = True, max_length=400)
#     watchers = PositiveIntegerField(null = True)
#     created_at = DateTimeField(null = True)
#     pushed_at = DateTimeField(null = True)
#     description = TextField(null = True)
#     extra_data = JSONField(null = True)
#     last_modified = DateTimeField(auto_now=True)
#     scm = CharField(max_length=100, choices=SCM_CHOICES, null = True)
#     host = CharField(max_length=100, choices=HOST_CHOICES)
#     private = BooleanField(default = False)
# 
#     class Meta:
#         unique_together = ("owner", "name", "host")
#         ordering = ['-watchers']
# 
#     def save(self, *args, **kwargs):
#         self.slug = self.owner.lower() + '/' + self.name.lower()
#         self.host_slug = self.host+'/'+self.slug
#         if self.html_url == None or self.html_url =='':
#             if self.host =='bitbucket':
#                 self.html_url = 'https://bitbucket.org/%s/%s' % (self.owner,self.name)
#             if self.host =='github':
#                 self.html_url = 'https://github.com/%s/%s' % (self.owner,self.name)
# 
#         super(Repository, self).save(*args, **kwargs)
# 
# class LinkType(models.Model):
#     name = CharField(max_length = 100, unique = True, choices = LINK_TYPES)
# 
# Path: repowatcher/main/tasks.py
# @task
# def get_events(url):
#     try:
#         body = urllib2.urlopen(url).read()
#         events = json.loads(body)
#     except Exception:
#         events = None
#     return events


from ProviderBase import ProviderBase
from django.conf import settings
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
from operator import itemgetter
from pygithub3 import Github
from pygithub3.exceptions import NotFound
from repowatcher.main.models import RepositoryUser, Repository, LinkType
from repowatcher.main.tasks import get_events
from django.http import Http404
import json
import logging
import requests

    def get_user_events(self, username):
        try:
            r = requests.get(GithubProvider.base_url + 'users/'+ username + '/events', params = {"client_id": settings.GITHUB_APP_ID, "client_secret": settings.GITHUB_API_SECRET})
            user_events = json.loads(r.text)
        except Exception:
            user_events = []
        return user_events

    def get_repository_details(self, owner, repository):
        try:
            repo = self.client.repos.get(user=owner,repo=repository)
            return vars(repo)
        except NotFound:
            raise Http404

    def create_or_update_repository_details(self, repository_dict, repository = None):
        if repository is None:
            repository = Repository()
        extra_data = {}
        for key, value in repository_dict.iteritems():
            if key == "_attrs":
                continue
            if key == 'owner' or key == "organization":
                try:
                    setattr(repository, key, value.login)
                    continue
                except Exception:
                    pass
            if key == 'source' or key == "parent":

# Path: repowatcher/main/models.py
# class RepositoryUser(models.Model):
#     login = CharField(max_length=100,db_index = True)
#     name = CharField(max_length=100, null = True)
#     slug = SlugField(max_length=201, unique = True)
#     email = EmailField(max_length=254, null = True)
#     blog = URLField(null = True)
#     followers = PositiveIntegerField(null = True)
#     following = PositiveIntegerField(null = True)
#     public_repos = PositiveIntegerField(null = True)
#     created_at = DateTimeField(null=True)
#     extra_data = JSONField(null = True)
#     last_modified = DateTimeField(auto_now=True)
#     repositories = models.ManyToManyField(Repository, through='RepositoryUserRepositoryLink')
#     starred = PositiveIntegerField(null = True)
#     watched = PositiveIntegerField(null = True)
#     host = CharField(max_length=100, choices=HOST_CHOICES, db_index = True)
# 
#     class Meta:
#         unique_together = ("login", "host")
# 
#     def save(self, *args, **kwargs):
#         self.slug = self.host + '/' + self.login.lower()
#         super(RepositoryUser, self).save(*args, **kwargs)
# 
# class Repository(models.Model):
#     owner = CharField(max_length=100)
#     name = CharField(max_length=100)
#     slug = SlugField(max_length=201)
#     host_slug = SlugField(max_length=302, unique = True)
#     language = CharField(max_length=100, null = True)
#     html_url = URLField(null = True, max_length=400)
#     homepage = URLField(null = True, max_length=400)
#     watchers = PositiveIntegerField(null = True)
#     created_at = DateTimeField(null = True)
#     pushed_at = DateTimeField(null = True)
#     description = TextField(null = True)
#     extra_data = JSONField(null = True)
#     last_modified = DateTimeField(auto_now=True)
#     scm = CharField(max_length=100, choices=SCM_CHOICES, null = True)
#     host = CharField(max_length=100, choices=HOST_CHOICES)
#     private = BooleanField(default = False)
# 
#     class Meta:
#         unique_together = ("owner", "name", "host")
#         ordering = ['-watchers']
# 
#     def save(self, *args, **kwargs):
#         self.slug = self.owner.lower() + '/' + self.name.lower()
#         self.host_slug = self.host+'/'+self.slug
#         if self.html_url == None or self.html_url =='':
#             if self.host =='bitbucket':
#                 self.html_url = 'https://bitbucket.org/%s/%s' % (self.owner,self.name)
#             if self.host =='github':
#                 self.html_url = 'https://github.com/%s/%s' % (self.owner,self.name)
# 
#         super(Repository, self).save(*args, **kwargs)
# 
# class LinkType(models.Model):
#     name = CharField(max_length = 100, unique = True, choices = LINK_TYPES)
# 
# Path: repowatcher/main/tasks.py
# @task
# def get_events(url):
#     try:
#         body = urllib2.urlopen(url).read()
#         events = json.loads(body)
#     except Exception:
#         events = None
#     return events


# Path: repowatcher/main/views/GithubProvider.py
from ProviderBase import ProviderBase
from django.conf import settings
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
from operator import itemgetter
from pygithub3 import Github
from pygithub3.exceptions import NotFound
from repowatcher.main.models import RepositoryUser, Repository, LinkType
from repowatcher.main.tasks import get_events
from django.http import Http404
import json
import logging
import requests


    def get_user_events(self, username):
        try:
            r = requests.get(GithubProvider.base_url + 'users/'+ username + '/events', params = {"client_id": settings.GITHUB_APP_ID, "client_secret": settings.GITHUB_API_SECRET})
            user_events = json.loads(r.text)
        except Exception:
            user_events = []
        return user_events

    def get_repository_details(self, owner, repository):
        try:
            repo = self.client.repos.get(user=owner,repo=repository)
            return vars(repo)
        except NotFound:
            raise Http404

    def create_or_update_repository_details(self, repository_dict, repository = None):
        if repository is None:
            repository = Repository()
        extra_data = {}
        for key, value in repository_dict.iteritems():
            if key == "_attrs":
                continue
            if key == 'owner' or key == "organization":
                try:
                    setattr(repository, key, value.login)
                    continue
                except Exception:
                    pass
            if key == 'source' or key == "parent":

                try: