def process(self, request, to_ws_id): data = parse_json_request(request) mashup_id = data.get('mashup', '') workspace_id = data.get('workspace', '') if mashup_id == '' and workspace_id == '': return build_error_response(request, 422, _('Missing workspace or mashup parameter')) elif mashup_id != '' and workspace_id != '': return build_error_response(request, 422, _('Workspace and mashup parameters cannot be used at the same time')) to_ws = get_object_or_404(Workspace, id=to_ws_id) if not request.user.is_superuser and to_ws.creator != request.user: return build_error_response(request, 403, _('You are not allowed to update this workspace')) if mashup_id != '': values = mashup_id.split('/', 3) if len(values) != 3: return build_error_response(request, 422, _('invalid mashup id')) (mashup_vendor, mashup_name, mashup_version) = values try: resource = CatalogueResource.objects.get(vendor=mashup_vendor, short_name=mashup_name, version=mashup_version) if not resource.is_available_for(request.user) or resource.resource_type() != 'mashup': raise CatalogueResource.DoesNotExist except CatalogueResource.DoesNotExist: return build_error_response(request, 422, _('Mashup not found: %(mashup_id)s') % {'mashup_id': mashup_id}) base_dir = catalogue.wgt_deployer.get_base_dir(mashup_vendor, mashup_name, mashup_version) wgt_file = WgtFile(os.path.join(base_dir, resource.template_uri)) template = TemplateParser(wgt_file.get_template()) else: from_ws = get_object_or_404(Workspace, id=workspace_id) if not request.user.is_superuser and from_ws.creator != request.user: return build_error_response(request, 403, _('You are not allowed to read from workspace %s') % workspace_id) options = { 'vendor': 'api', 'name': 'merge_op', 'version': '1.0', 'title': '', 'description': 'Temporal mashup for merging operation', 'email': '*****@*****.**', } template = TemplateParser(build_json_template_from_workspace(options, from_ws, from_ws.creator)) try: check_mashup_dependencies(template, request.user) except MissingDependencies as e: details = { 'missingDependencies': e.missing_dependencies, } return build_error_response(request, 422, e, details=details) fillWorkspaceUsingTemplate(to_ws, template) return HttpResponse(status=204)
def process(self, request, to_ws_id): to_ws = get_object_or_404(Workspace, id=to_ws_id) if not request.user.is_superuser and to_ws.creator != request.user: return build_error_response(request, 403, _('You are not allowed to update this workspace')) data = parse_json_request(request) mashup_id = data.get('mashup', '') workspace_id = data.get('workspace', '') if mashup_id == '' and workspace_id == '': return build_error_response(request, 422, _('Missing workspace or mashup parameter')) elif mashup_id != '' and workspace_id != '': return build_error_response(request, 422, _('Workspace and mashup parameters cannot be used at the same time')) if mashup_id != '': values = mashup_id.split('/', 3) if len(values) != 3: return build_error_response(request, 422, _('invalid mashup id')) (mashup_vendor, mashup_name, mashup_version) = values try: resource = CatalogueResource.objects.get(vendor=mashup_vendor, short_name=mashup_name, version=mashup_version) if not resource.is_available_for(request.user) or resource.resource_type() != 'mashup': raise CatalogueResource.DoesNotExist except CatalogueResource.DoesNotExist: return build_error_response(request, 422, _('Mashup not found: %(mashup_id)s') % {'mashup_id': mashup_id}) base_dir = catalogue.wgt_deployer.get_base_dir(mashup_vendor, mashup_name, mashup_version) wgt_file = WgtFile(os.path.join(base_dir, resource.template_uri)) template = TemplateParser(wgt_file.get_template()) else: from_ws = get_object_or_404(Workspace, id=workspace_id) if not request.user.is_superuser and from_ws.creator != request.user: return build_error_response(request, 403, _('You are not allowed to read from workspace %s') % workspace_id) options = { 'vendor': 'api', 'name': 'merge_op', 'version': '1.0', 'title': '', 'description': 'Temporal mashup for merging operation', 'email': '*****@*****.**', } template = TemplateParser(build_json_template_from_workspace(options, from_ws, from_ws.creator)) try: check_mashup_dependencies(template, request.user) except MissingDependencies as e: details = { 'missingDependencies': e.missing_dependencies, } return build_error_response(request, 422, e, details=details) fillWorkspaceUsingTemplate(to_ws, template) return HttpResponse(status=204)
def test_fill_workspace_using_template(self): fillWorkspaceUsingTemplate(self.workspace, self.template1) data = get_global_workspace_data(self.workspace, self.user).get_data() self.assertEqual(self.workspace.name, 'Testing') self.assertEqual(len(data['tabs']), 2) # Workspace template 2 adds a new Tab fillWorkspaceUsingTemplate(self.workspace, self.template2) data = get_global_workspace_data(self.workspace, self.user).get_data() self.assertEqual(len(data['tabs']), 3) # Check that we handle the case where there are 2 tabs with the same name fillWorkspaceUsingTemplate(self.workspace, self.template2) data = get_global_workspace_data(self.workspace, self.user).get_data() self.assertEqual(len(data['tabs']), 4) self.assertNotEqual(data['tabs'][2]['name'], data['tabs'][3]['name'])
def test_fill_workspace_using_template(self): template = self.read_template('wt1.xml') fillWorkspaceUsingTemplate(self.workspace, template) data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data()) self.assertEqual(self.workspace.name, 'Testing') self.assertEqual(len(data['tabs']), 2) template = self.read_template('wt2.xml') # Workspace template 2 adds a new Tab fillWorkspaceUsingTemplate(self.workspace, template) data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data()) self.assertEqual(len(data['tabs']), 3) # Check that we handle the case where there are 2 tabs with the same name fillWorkspaceUsingTemplate(self.workspace, template) data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data()) self.assertEqual(len(data['tabs']), 4) self.assertNotEqual(data['tabs'][2]['name'], data['tabs'][3]['name'])