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()
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()
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
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