Example #1
0
 def save_repositories(self, repositories_dict, link_type):
     profile = self.user.get_profile()
     for category_name, value in repositories_dict.iteritems():
         update = False
         if category_name == "":
             category_name = "other"
         repository_category, _ = RepositoryCategory.objects.get_or_create(name=category_name)
         for order, item in enumerate(value, start=1):
             if item != "":
                 try:
                     repository = Repository.objects.get(host_slug=self.host + "/" + item.lower())
                 except ObjectDoesNotExist:
                     repository = Repository()
                     update = True
                 if update or (datetime.now() - repository.last_modified) > timedelta(days=1):
                     owner, repository_name = item.split("/")
                     repository_dict = self.get_repository_details(owner, repository_name)
                     repository = self.create_or_update_repository_details(repository_dict, repository)
                     if not repository.private:
                         repository.save()
                 repo_link_type, _ = LinkType.objects.get_or_create(name=link_type)
                 try:
                     user_repository_link = UserRepositoryLink.objects.get(
                         user=profile, repository=repository, link_type=repo_link_type
                     )
                 except ObjectDoesNotExist:
                     user_repository_link = UserRepositoryLink(
                         user=profile, repository=repository, link_type=repo_link_type
                     )
                 user_repository_link.repository_category = repository_category
                 user_repository_link.order = order
                 user_repository_link.save()
Example #2
0
 def save_repositories(self, repositories_dict, link_type):
     profile = self.user.get_profile()
     for category_name, value in repositories_dict.iteritems():
         update = False
         if category_name == '':
             category_name = 'other'
         repository_category, _ = RepositoryCategory.objects.get_or_create(
             name=category_name)
         for order, item in enumerate(value, start=1):
             if item != '':
                 try:
                     repository = Repository.objects.get(
                         host_slug=self.host + '/' + item.lower())
                 except ObjectDoesNotExist:
                     repository = Repository()
                     update = True
                 if update or (datetime.now() - repository.last_modified
                               ) > timedelta(days=1):
                     owner, repository_name = item.split('/')
                     repository_dict = self.get_repository_details(
                         owner, repository_name)
                     repository = self.create_or_update_repository_details(
                         repository_dict, repository)
                     if not repository.private:
                         repository.save()
                 repo_link_type, _ = LinkType.objects.get_or_create(
                     name=link_type)
                 try:
                     user_repository_link = UserRepositoryLink.objects.get(
                         user=profile,
                         repository=repository,
                         link_type=repo_link_type)
                 except ObjectDoesNotExist:
                     user_repository_link = UserRepositoryLink(
                         user=profile,
                         repository=repository,
                         link_type=repo_link_type)
                 user_repository_link.repository_category = repository_category
                 user_repository_link.order = order
                 user_repository_link.save()
Example #3
0
    def update_category_repositories(self, username, category, link_type):
        repo_link_type, _ = LinkType.objects.get_or_create(name=link_type)
        profile = self.user.get_profile()
        try:
            repository_user = RepositoryUser.objects.get(slug=self.host + "/" + username.lower())
            repository_links = (
                repository_user.repositoryuserrepositorylink_set.filter(link_type=repo_link_type)
                .filter(repository__host=self.host)
                .select_related("repository")
            )
            repository_links.delete()
        except ObjectDoesNotExist:
            user_dict = self.get_user_details(username)
            repository_user = self.create_or_update_user_details(user_dict)
        category_object, _ = RepositoryCategory.objects.get_or_create(name=category.lower())
        watched = list(self.get_repositories(username, link_type))
        category_lower = category.lower()

        # Removes repisotory links that are no longer watched from the api
        saved = (
            Repository.objects.filter(userrepositorylink__user=profile)
            .filter(userrepositorylink__link_type=repo_link_type)
            .filter(userrepositorylink__repository_category=category_object)
            .filter(host=self.host)
        )
        saved_slugs = (e.slug for e in saved)
        saved_slugs_set = set(saved_slugs)
        watched_slugs = (e["owner"] + "/" + e["name"] for e in watched)
        watched_slugs_set = set(watched_slugs)
        removed_slugs = saved_slugs_set - watched_slugs_set
        for slug in removed_slugs:
            repository = Repository.objects.get(host_slug=self.host + "/" + slug)
            UserRepositoryLink.objects.get(user=profile, repository=repository, link_type=repo_link_type).delete()

        # finds the highest order value for the category in user repository links
        order = (
            UserRepositoryLink.objects.filter(user=profile)
            .filter(userrepositorylink__link_type=repo_link_type)
            .filter(repository_category=category_object)
            .aggregate(max_order=Max("order"))["max_order"]
        )

        # saves the repositories and adds any new ones at an order value above the max for the category
        watched_filtered = []
        for repo in watched:
            try:
                repository = Repository.objects.get(
                    host_slug=self.host + "/" + repo["owner"].lower() + "/" + repo["name"].lower()
                )
            except ObjectDoesNotExist:
                repository = Repository()
            repository = self.create_or_update_repository_details(repo, repository)
            if not repository.private:
                repository.save()
            try:
                user_repository_link = UserRepositoryLink.objects.get(
                    user=profile, repository=repository, link_type=repo_link_type
                )
            except ObjectDoesNotExist:
                if repository.language == category_lower:
                    order = order + 1
                    watched_filtered.append(repository)
                    user_repository_link = UserRepositoryLink(
                        user=profile, repository=repository, order=order, link_type=repo_link_type
                    )
                    user_repository_link.repository_category, _ = RepositoryCategory.objects.get_or_create(
                        name=repository.language
                    )
                    user_repository_link.save()
        #            if not repository.private:
        #                RepositoryUserRepositoryLink.objects.get_or_create(user = repository_user, repository = repository, owned = owned, starred = starred)
        if repo_link_type.name == "owned":
            repository_user.public_repos = len(watched)
        elif repo_link_type.name == "starred":
            repository_user.starred = len(watched)
        elif repo_link_type.name == "watched":
            repository_user.watched = len(watched)
        return repository_user
Example #4
0
    def update_category_repositories(self, username, category, link_type):
        repo_link_type, _ = LinkType.objects.get_or_create(name=link_type)
        profile = self.user.get_profile()
        try:
            repository_user = RepositoryUser.objects.get(slug=self.host + '/' +
                                                         username.lower())
            repository_links = repository_user.repositoryuserrepositorylink_set.filter(
                link_type=repo_link_type).filter(
                    repository__host=self.host).select_related('repository')
            repository_links.delete()
        except ObjectDoesNotExist:
            user_dict = self.get_user_details(username)
            repository_user = self.create_or_update_user_details(user_dict)
        category_object, _ = RepositoryCategory.objects.get_or_create(
            name=category.lower())
        watched = list(self.get_repositories(username, link_type))
        category_lower = category.lower()

        # Removes repisotory links that are no longer watched from the api
        saved = Repository.objects.filter(
            userrepositorylink__user=profile
        ).filter(userrepositorylink__link_type=repo_link_type).filter(
            userrepositorylink__repository_category=category_object).filter(
                host=self.host)
        saved_slugs = (e.slug for e in saved)
        saved_slugs_set = set(saved_slugs)
        watched_slugs = (e['owner'] + '/' + e['name'] for e in watched)
        watched_slugs_set = set(watched_slugs)
        removed_slugs = saved_slugs_set - watched_slugs_set
        for slug in removed_slugs:
            repository = Repository.objects.get(host_slug=self.host + '/' +
                                                slug)
            UserRepositoryLink.objects.get(user=profile,
                                           repository=repository,
                                           link_type=repo_link_type).delete()

        # finds the highest order value for the category in user repository links
        order = UserRepositoryLink.objects.filter(user=profile).filter(
            userrepositorylink__link_type=repo_link_type).filter(
                repository_category=category_object).aggregate(
                    max_order=Max('order'))['max_order']

        # saves the repositories and adds any new ones at an order value above the max for the category
        watched_filtered = []
        for repo in watched:
            try:
                repository = Repository.objects.get(host_slug=self.host + '/' +
                                                    repo['owner'].lower() +
                                                    '/' + repo['name'].lower())
            except ObjectDoesNotExist:
                repository = Repository()
            repository = self.create_or_update_repository_details(
                repo, repository)
            if not repository.private:
                repository.save()
            try:
                user_repository_link = UserRepositoryLink.objects.get(
                    user=profile,
                    repository=repository,
                    link_type=repo_link_type)
            except ObjectDoesNotExist:
                if repository.language == category_lower:
                    order = order + 1
                    watched_filtered.append(repository)
                    user_repository_link = UserRepositoryLink(
                        user=profile,
                        repository=repository,
                        order=order,
                        link_type=repo_link_type)
                    user_repository_link.repository_category, _ = RepositoryCategory.objects.get_or_create(
                        name=repository.language)
                    user_repository_link.save()
#            if not repository.private:
#                RepositoryUserRepositoryLink.objects.get_or_create(user = repository_user, repository = repository, owned = owned, starred = starred)
        if repo_link_type.name == "owned":
            repository_user.public_repos = len(watched)
        elif repo_link_type.name == "starred":
            repository_user.starred = len(watched)
        elif repo_link_type.name == "watched":
            repository_user.watched = len(watched)
        return repository_user