def create_filter_child(request, node_id): node = get_node_subclass_or_404(request.user, node_id) column_name = request.POST['column_name'] column_filter = request.POST['column_filter'] child_node = create_filter_child_node(node, column_name, column_filter) data = get_rendering_dict(child_node) data["node_id"] = node.get_css_id() return JsonResponse(data)
def node_create(request, analysis_id, node_type): global NODE_TYPES_HASH if NODE_TYPES_HASH is None: NODE_TYPES_HASH = get_node_types_hash_by_class_name() analysis = get_analysis_or_404(request.user, analysis_id, write=True) node_class = NODE_TYPES_HASH[node_type] node = node_class.objects.create(analysis=analysis) update_analysis(node.analysis_id) return JsonResponse(get_rendering_dict(node))
def render(self, context): try: nodes = self.nodes_variable.resolve(context) nodes_array = [] for node in nodes: try: node_rendering_dict = get_rendering_dict(node) nodes_array.append(node_rendering_dict) except Exception as e: logging.error(e) return json.dumps(nodes_array) except template.VariableDoesNotExist: return ''
def create_selected_child(request, node_id): node = get_node_subclass_or_404(request.user, node_id) x = node.x + 50 + random.randrange(-10, 10) y = node.y + 100 + random.randrange(-10, 10) selected_node = SelectedInParentNode.objects.create(analysis=node.analysis, x=x, y=y, ready=False) selected_node.add_parent(node) selected_node.save() update_analysis(node.analysis.pk) data = get_rendering_dict(selected_node) data["node_id"] = node.get_css_id() return JsonResponse(data)
def create_extra_filter_child(request, node_id, extra_filters): node = get_node_subclass_or_404(request.user, node_id, write=True) x = node.x + 50 + random.randrange(-10, 10) y = node.y + 100 + random.randrange(-10, 10) filter_node = BuiltInFilterNode.objects.create( analysis=node.analysis, built_in_filter=extra_filters, x=x, y=y, ready=False) filter_node.add_parent(node) filter_node.save() update_analysis(node.analysis.pk) data = get_rendering_dict(filter_node) data["node_id"] = node.get_css_id() return JsonResponse(data)
def nodes_copy(request, analysis_id): node_ids = json.loads(request.POST["nodes"]) node_ids = set([int(i) for i in node_ids]) nodes = [] edges = [] analysis = get_analysis_or_404(request.user, analysis_id, write=True) nodes_qs = analysis.analysisnode_set.filter( id__in=node_ids).select_subclasses() topo_sorted = get_toposorted_nodes(nodes_qs) old_new_map = {} for group in topo_sorted: for node in group: if analysis_id is None: analysis_id = node.analysis_id template_node = get_node_subclass_or_404(request.user, node.id) parents = template_node.analysisnode_ptr.parents().filter( id__in=old_new_map).values_list('id', flat=True) clone_node = template_node.save_clone() clone_node.x += 10 clone_node.y += 10 clone_node.status = NodeStatus.DIRTY clone_node.save() old_new_map[node.id] = clone_node clone_node.adjust_cloned_parents(old_new_map) for parent_id in parents: new_parent = old_new_map[parent_id] new_parent.add_child(clone_node) edge = clone_node.get_connection_data(new_parent) edges.append(edge) if not clone_node.is_valid(): clone_node.count = None clone_node.save() nodes.append(get_rendering_dict(clone_node)) update_analysis(analysis.pk) return JsonResponse({"nodes": nodes, "edges": edges})
def node_data(request, node_id): node = get_node_subclass_or_404(request.user, node_id) return JsonResponse(get_rendering_dict(node))