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 create(self, request): data = parse_json_request(request) workspace_name = data.get('name', '').strip() workspace_id = data.get('workspace', '') mashup_id = data.get('mashup', '') initial_pref_values = data.get('preferences', {}) allow_renaming = normalize_boolean_param(request, 'allow_renaming', data.get('allow_renaming', False)) dry_run = normalize_boolean_param(request, 'dry_run', data.get('dry_run', False)) if mashup_id == '' and workspace_id == '' and workspace_name == '': return build_error_response(request, 422, _('Missing name 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 == '' and workspace_id == '': if not is_valid_name(workspace_name): return build_error_response(request, 422, _('invalid workspace name')) if dry_run: return HttpResponse(status=204) try: workspace = createEmptyWorkspace(workspace_name, request.user, allow_renaming=allow_renaming) except IntegrityError: msg = _('A workspace with the given name already exists') return build_error_response(request, 409, msg) else: 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 from_ws.public is False and 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': from_ws.name, 'version': '1.0', 'title': '', 'description': 'Temporal mashup for the workspace copy 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) if dry_run: return HttpResponse(status=204) if workspace_name == '': workspace_name = None try: workspace, _junk = buildWorkspaceFromTemplate(template, request.user, allow_renaming=allow_renaming, new_name=workspace_name) except IntegrityError: msg = _('A workspace with the given name already exists') return build_error_response(request, 409, msg) if len(initial_pref_values) > 0: update_workspace_preferences(workspace, initial_pref_values, invalidate_cache=False) workspace_data = get_global_workspace_data(workspace, request.user) return workspace_data.get_response(status_code=201, cacheable=False)
def create(self, request): data = parse_json_request(request) workspace_name = data.get('name', '').strip() workspace_title = data.get('title', '').strip() workspace_id = data.get('workspace', '') mashup_id = data.get('mashup', '') initial_pref_values = data.get('preferences', {}) allow_renaming = normalize_boolean_param( request, 'allow_renaming', data.get('allow_renaming', False)) dry_run = normalize_boolean_param(request, 'dry_run', data.get('dry_run', False)) if mashup_id == '' and workspace_id == '' and (workspace_name == '' and workspace_title == ''): return build_error_response(request, 422, _('Missing name or title 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 == '' and workspace_id == '': if workspace_title == '': workspace_title = workspace_name if workspace_name != '' and not is_valid_name(workspace_name): return build_error_response(request, 422, _('invalid workspace name')) if dry_run: return HttpResponse(status=204) try: workspace = createEmptyWorkspace(workspace_title, request.user, name=workspace_name, allow_renaming=allow_renaming) except IntegrityError: msg = _('A workspace with the given name already exists') return build_error_response(request, 409, msg) else: 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 from_ws.public is False and 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': from_ws.name, 'version': '1.0', 'title': from_ws.title if from_ws.title is not None and from_ws.title.strip() != "" else from_ws.name, 'description': 'Temporal mashup for the workspace copy 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) if dry_run: return HttpResponse(status=204) try: workspace, _junk = buildWorkspaceFromTemplate( template, request.user, allow_renaming=allow_renaming, new_name=workspace_name, new_title=workspace_title) except IntegrityError: msg = _('A workspace with the given name already exists') return build_error_response(request, 409, msg) if len(initial_pref_values) > 0: update_workspace_preferences(workspace, initial_pref_values, invalidate_cache=False) workspace_data = get_global_workspace_data(workspace, request.user) return workspace_data.get_response(status_code=201, cacheable=False)
except CatalogueResource.DoesNotExist: return build_error_response(request, 422, _('Mashup not found: %(mashup_id)s') % {'mashup_id': mashup_id}) if resource.fromWGT: 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: template = downloader.download_http_content(resource.template_uri, user=request.user) try: template = TemplateParser(template) except: build_error_response(request, 424, _('Downloaded invalid resource description from: %(url)s') % {'url': resource.template_uri}) try: check_mashup_dependencies(template, request.user) except MissingDependencies, e: details = { 'missingDependencies': e.missing_dependencies, } return build_error_response(request, 422, unicode(e), details=details) if dry_run: return HttpResponse(status_code=204) workspace, _junk = buildWorkspaceFromTemplate(template, request.user, True) workspace_data = get_global_workspace_data(workspace, request.user) return workspace_data.get_response(status_code=201, cacheable=False)