def test_verbose_url(self): project = ProjectFactory() file_obj = DropboxFile(node=project, path='foo.txt') file_obj.save() file_url = file_obj.url(guid=False) url = web_url_for('dropbox_view_file', pid=project._primary_key, path=file_obj.path, rev='') assert_equal(url, file_url)
def test_unique_identifier(self, mock_get): mock_response = mock.Mock(ok=True, status_code=200) mock_get.return_value = mock_response mock_response.json.return_value = {"data": {"name": "Morty", "extra": {"revisionId": "Ricksy"}}} guid = DropboxFile(node=self.project, path="/foo/bar") guid.enrich() assert_equals("Ricksy", guid.unique_identifier)
def test_unique_identifier(self, mock_get): mock_response = mock.Mock(ok=True, status_code=200) mock_get.return_value = mock_response mock_response.json.return_value = { 'data': { 'name': 'Morty', 'extra': { 'revisionId': 'Ricksy' } } } guid = DropboxFile(node=self.project, path='/foo/bar') guid.enrich() assert_equals('Ricksy', guid.unique_identifier)
def dropbox_view_file(path, node_addon, auth, **kwargs): """Web view for the file detail page.""" if not path: raise HTTPError(http.NOT_FOUND) # check that current user has access to the path if not is_authorizer(auth, node_addon): abort_if_not_subdir(path, node_addon.folder) node = node_addon.owner client = get_node_addon_client(node_addon) # Lazily create a file GUID record file_obj, created = DropboxFile.get_or_create(node=node, path=path) redirect_url = check_file_guid(file_obj) if redirect_url: return redirect(redirect_url) rev = request.args.get('rev') or '' rendered = render_dropbox_file(file_obj, client=client, rev=rev) cleaned_path = clean_path(path) response = { 'revisions_url': node.api_url_for('dropbox_get_revisions', path=cleaned_path, rev=rev), # Append current revision as a query param 'file_name': get_file_name(path), 'render_url': node.api_url_for('dropbox_render_file', path=cleaned_path), 'download_url': file_obj.download_url(guid=True, rev=rev), 'rendered': rendered, } response.update(serialize_node(node, auth, primary=True)) return response, http.OK
def test_path_doesnt_crash_nonconfig_addon(self): guid = DropboxFile(node=self.project, path='baz/foo/bar') self.node_addon.folder = None self.node_addon.save() self.node_addon.reload() assert_true(guid.path) assert_true(guid.waterbutler_path)
def test_path_doesnt_crash_without_addon(self): guid = DropboxFile(node=self.project, path='baz/foo/bar') self.project.delete_addon('dropbox', Auth(self.user)) assert_is(self.project.get_addon('dropbox'), None) assert_true(guid.path) assert_true(guid.waterbutler_path)
def dropbox_render_file(path, node_addon, auth, **kwargs): """View polled by the FileRenderer. Return the rendered HTML for the requested file. """ # check that current user has access to the path if not is_authorizer(auth, node_addon): abort_if_not_subdir(path, node_addon.folder) node = node_addon.owner file_obj = DropboxFile.find_one(Q('node', 'eq', node) & Q('path', 'eq', path)) client = get_node_addon_client(node_addon) rev = request.args.get('rev', '') return render_dropbox_file(file_obj, client=client, rev=rev)
def test_cache_file_name_encode(self): project = ProjectFactory() path = 'à/ é éà' file_obj = DropboxFile(node=project, path=path) mock_client = MockDropbox() file_obj.update_metadata(client=mock_client) file_obj.save() result = file_obj.get_cache_filename(client=mock_client) assert_equal( result, '{0}_{1}.html'.format( hashlib.md5(path).hexdigest(), file_obj.metadata['rev'], ))
def dropbox_get_revisions(path, node_addon, auth, **kwargs): """API view that gets a list of revisions for a file.""" # Check if current user has access to the path if not is_authorizer(auth, node_addon): abort_if_not_subdir(path, node_addon.folder) node = node_addon.owner client = get_node_addon_client(node_addon) # Get metadata for each revision of the file # Don't show deleted revisions revisions = [rev for rev in client.revisions(path) if not rev.get('is_deleted')] # Return GUID short urls if a GUID record exists try: file_obj = DropboxFile.find_one(Q('node', 'eq', node) & Q('path', 'eq', path)) except ModularOdmException: file_obj = None for revision in revisions: # Add download and view links rev = revision.get('rev') or '' if file_obj: download_url = file_obj.download_url(guid=True, rev=rev) view_url = file_obj.url(guid=True, rev=rev) else: # No GUID, use long URLs download_url = node.web_url_for('dropbox_download', path=path, rev=rev) view_url = node.web_url_for('dropbox_view_file', path=path, rev=rev) revision['download'] = download_url revision['view'] = view_url return { 'result': revisions, # Hyperlinks sans revision ID 'urls': { 'download': node.web_url_for('dropbox_download', path=path), 'delete': node.api_url_for('dropbox_delete_file', path=path), 'view': node.web_url_for('dropbox_view_file', path=path), 'files': node.web_url_for('collect_file_trees'), }, 'node': { 'id': node._id, 'title': node.title, }, 'path': path, 'registered': node.registered_date.isoformat() if node.registered_date else None, }, http.OK
def test_correct_path(self): guid = DropboxFile(node=self.project, path='baz/foo/bar') assert_equals(guid.path, 'baz/foo/bar') assert_equals(guid.waterbutler_path, '/foo/bar')
def test_provider(self): assert_equal('dropbox', DropboxFile().provider)