Example #1
0
def clone_workspace(workspace, for_user, request=None):
    """
    Clones entire workspace.

    :param dash.models.DashboardWorkspace:
    :param django.contrib.auth.models.User:
    :return dash.models.DashboardWorkspace: Cloned workspace instance.
    """
    # Cloning workspace object.
    cloned_workspace = copy.copy(workspace)
    cloned_workspace.pk = None
    cloned_workspace.user = for_user
    cloned_workspace.is_public = False
    cloned_workspace.is_clonable = False
    cloned_workspace.name = "{0} cloned on {1}".format(cloned_workspace.name, \
                                                       datetime.datetime.now())

    cloned_workspace.save()

    # Cloning workspace entries.
    dashboard_entries = DashboardEntry._default_manager \
                                      .filter(workspace=workspace)

    buf = []

    for dashboard_entry in dashboard_entries:
        cloned_plugin_data = clone_plugin_data(dashboard_entry,
                                               request=request)
        cloned_dashboard_entry = DashboardEntry(
            user=for_user,
            workspace=cloned_workspace,
            layout_uid=dashboard_entry.layout_uid,
            placeholder_uid=dashboard_entry.placeholder_uid,
            plugin_uid=dashboard_entry.plugin_uid,
            plugin_data=cloned_plugin_data,
            position=dashboard_entry.position,
        )

        buf.append(cloned_dashboard_entry)

    DashboardEntry._default_manager.bulk_create(buf)

    return cloned_workspace
Example #2
0
def clone_workspace(workspace, for_user, request=None):
    """
    Clones entire workspace.

    :param dash.models.DashboardWorkspace:
    :param django.contrib.auth.models.User:
    :return dash.models.DashboardWorkspace: Cloned workspace instance.
    """
    # Cloning workspace object.
    cloned_workspace = copy.copy(workspace)
    cloned_workspace.pk = None
    cloned_workspace.user = for_user
    cloned_workspace.is_public = False
    cloned_workspace.is_clonable = False
    cloned_workspace.name = "{0} cloned on {1}".format(cloned_workspace.name, \
                                                       datetime.datetime.now())

    cloned_workspace.save()

    # Cloning workspace entries.
    dashboard_entries = DashboardEntry._default_manager \
                                      .filter(workspace=workspace)

    buf = []

    for dashboard_entry in dashboard_entries:
        cloned_plugin_data = clone_plugin_data(dashboard_entry, request=request)
        cloned_dashboard_entry = DashboardEntry(
            user = for_user,
            workspace = cloned_workspace,
            layout_uid = dashboard_entry.layout_uid,
            placeholder_uid = dashboard_entry.placeholder_uid,
            plugin_uid = dashboard_entry.plugin_uid,
            plugin_data = cloned_plugin_data,
            position = dashboard_entry.position,
        )

        buf.append(cloned_dashboard_entry)

    DashboardEntry._default_manager.bulk_create(buf)

    return cloned_workspace
Example #3
0
def cut_entry_to_clipboard(request, dashboard_entry, \
                           delete_original_entry=True, \
                           clone_data=True):
    """
    Cut ``dash.models.DashboardEntry`` to clipboard.

    :param django.http.HttpRequest request:
    :param dash.models.DashboardEntry dashboard_entry:
    :param bool delete_original_entry: If set to True, original entry is
        deleted; kept otherwise.
    :param bool clone_data: If set to Ture, plugin data is cloned.
    :return bool: True on success. False otherwise.
    """
    layout_uid = dashboard_entry.layout_uid
    plugin_uid = dashboard_entry.plugin_uid

    if clone_data:
        #plugin = dashboard_entry.get_plugin(request=request)

        # Getting cloned plugin data
        #plugin_data = plugin._clone_plugin_data(dashboard_entry)
        plugin_data = clone_plugin_data(dashboard_entry, request=request)

        # If none returned, using the still the current one (not cloned, which
        # is dangerous). Possible TODO for later.
        if plugin_data is None:
            plugin_data = dashboard_entry.plugin_data
    else:
        plugin_data = dashboard_entry.plugin_data

    save_plugin_data_to_clipboard(
        request = request,
        layout_uid = layout_uid,
        plugin_uid = plugin_uid,
        plugin_data = plugin_data
        )

    if delete_original_entry:
        dashboard_entry.delete()

    return True
Example #4
0
def cut_entry_to_clipboard(request, dashboard_entry, \
                           delete_original_entry=True, \
                           clone_data=True):
    """
    Cut ``dash.models.DashboardEntry`` to clipboard.

    :param django.http.HttpRequest request:
    :param dash.models.DashboardEntry dashboard_entry:
    :param bool delete_original_entry: If set to True, original entry is
        deleted; kept otherwise.
    :param bool clone_data: If set to Ture, plugin data is cloned.
    :return bool: True on success. False otherwise.
    """
    layout_uid = dashboard_entry.layout_uid
    plugin_uid = dashboard_entry.plugin_uid

    if clone_data:
        #plugin = dashboard_entry.get_plugin(request=request)

        # Getting cloned plugin data
        #plugin_data = plugin._clone_plugin_data(dashboard_entry)
        plugin_data = clone_plugin_data(dashboard_entry, request=request)

        # If none returned, using the still the current one (not cloned, which
        # is dangerous). Possible TODO for later.
        if plugin_data is None:
            plugin_data = dashboard_entry.plugin_data
    else:
        plugin_data = dashboard_entry.plugin_data

    save_plugin_data_to_clipboard(request=request,
                                  layout_uid=layout_uid,
                                  plugin_uid=plugin_uid,
                                  plugin_data=plugin_data)

    if delete_original_entry:
        dashboard_entry.delete()

    return True