Ejemplo n.º 1
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)
Ejemplo n.º 2
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