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
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
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
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