Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    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'],
            ))
Exemplo n.º 10
0
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
Exemplo n.º 11
0
    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')
Exemplo n.º 12
0
 def test_provider(self):
     assert_equal('dropbox', DropboxFile().provider)