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 test_cut_path_to_base_dir(self): base_dir = 'base_dir' path = '/opt/vagrant/base_dir/project/file.txt' expected_path = 'base_dir/project/file.txt' actual_path = FileBrowser._cut_path_to_base_dir(base_dir, path) self.assertEqual(actual_path, expected_path)
def test_file_browser(self): file_browser = FileBrowser(self.test_folder) expected_structure = [ {'label': 'directory_1', 'id': 'file_browser_test_folder/directory_1', 'children': [ {'label': 'directory_1', 'id': 'file_browser_test_folder/directory_1/directory_1', 'children':[ {'label': 'file_1', 'id': 'file_browser_test_folder/directory_1/directory_1/file_1'} ]}, {'label': 'file_1', 'id': 'file_browser_test_folder/directory_1/file_1'} ]}, {'label': 'directory_2', 'id': 'file_browser_test_folder/directory_2', 'children':[]}, {'label': 'file_1', 'id': 'file_browser_test_folder/file_1'}, {'label': 'file_2', 'id': 'file_browser_test_folder/file_2'} ] actual_structure = file_browser.get_structure() self.assertEqual(actual_structure, expected_structure)