def post(self, request, repository_name): access_token = take_access_token_from_session(request) if access_token: user = request.session['user'] assert isinstance(user, GithubUser) resp_data = GithubAPI.get_user_public_repository(user.login, repository_name) github_repository = GithubRepositoryBuilder.build(resp_data, user) github_repository.save() # try to fetch repository by session_key and check if exists on file_system # before initializing the new one # also think of uniqueness of user_session session_key = request.session.session_key query_set = LocalRepository.objects.filter(user_session_key=session_key, github_repository_id=github_repository.id) \ .order_by('-last_modified') if query_set.exists(): local_repo = query_set.first() if FileBrowser.repo_exists(local_repo.path): return Response(data={'id': local_repo.id}) local_repository = LocalRepositoryService.init_repository(session_key, github_repository) local_repository.save() return Response(data={'id': local_repository.id}) else: return HttpResponseForbidden()
def get(self, request): access_token = take_access_token_from_session(request) if access_token: resp_data = GithubAPI.get_user_public_repositories(access_token) serialize = lambda x: take_keys(x, ['id', 'name', 'full_name', 'clone_url', 'description']) return Response(data=map(serialize, resp_data)) else: return HttpResponseForbidden()