def _delete_resource(resource, user): # If the resource is not included in any offering delete it _remove_usdls(resource, user) if not len(resource.offerings): _remove_resource(resource) else: # If the resource is part of an offering check if all the # offerings are in uploaded state used_offerings = [] for off in resource.offerings: offering = Offering.objects.get(pk=off) # Remove resource from uploaded offerings if offering.state == 'uploaded': offering.resources.remove(ObjectId(resource.pk)) offering.save() else: used_offerings.append(off) # If the resource is not included in any offering delete it if not len(used_offerings): _remove_resource(resource) else: resource.offerings = used_offerings resource.state = 'deleted' resource.save() # Remove published offerings for of in used_offerings: offering = Offering.objects.get(pk=of) if offering.state == 'published': delete_offering(user, offering)
def test_delete_offering( self, name, offering_name, deleted=False, del_resources=False, side_effect=None, err_type=None, err_msg=None ): # Get offering offering = Offering.objects.get(name=offering_name) tagged = len(offering.tags) > 0 market_pub = len(offering.marketplaces) > 0 pk = offering.pk if side_effect: side_effect(self, offering) # Call the tested method error = None try: offerings_management.delete_offering(self._user, offering) except Exception as e: error = e if not err_type: # Not error expected self.assertEquals(error, None) # Assert no included in the context lists self.assertFalse(offering.pk in self.context_obj.newest) self.assertFalse(offering.pk in self.context_obj.top_rated) if offering.state == "published": offerings_management.unreg_repository_adaptor_factory.assert_called_once_with(offering.description_url) self._repo_mock.set_credentials.assert_called_once_with(self._user.userprofile.access_token) self._repo_mock.delete.assert_called_once_with() if deleted: # Check index calls if the offering must have been deleted self.assertEquals(len(Offering.objects.filter(name=offering_name)), 0) self.se_object.remove_index.assert_called_with(offering) if tagged: self.tag_mock.delete_tag.assert_called_with(offering) else: self.assertEquals(self.tag_mock.delete_tag.call_count, 0) if del_resources: self.res_obj.offerings.remove.assert_called_with(pk) else: offering = Offering.objects.get(name=offering_name) self.assertEqual(offering.state, "deleted") self.se_object.update_index.assert_called_with(offering) if market_pub: market = Marketplace.objects.get(name="test_marketplace") offerings_management.marketadaptor_factory.assert_called_once_with(market, self._user) self._adaptor_obj.delete_service.assert_called_once_with(offering_name) else: self.assertTrue(isinstance(error, err_type)) self.assertEquals(unicode(error), err_msg)
def test_delete_offering(self, name, offering_name, deleted=False, del_resources=False, side_effect=None, err_type=None, err_msg=None): # Get offering offering = Offering.objects.get(name=offering_name) tagged = len(offering.tags) > 0 market_pub = len(offering.marketplaces) > 0 pk = offering.pk if side_effect: side_effect(self, offering) # Call the tested method error = None try: offerings_management.delete_offering(self._user, offering) except Exception as e: error = e if not err_type: # Not error expected self.assertEquals(error, None) # Assert no included in the context lists self.assertFalse(offering.pk in self.context_obj.newest) self.assertFalse(offering.pk in self.context_obj.top_rated) if offering.state == 'published': offerings_management.unreg_repository_adaptor_factory.assert_called_once_with(offering.description_url) self._repo_mock.set_credentials.assert_called_once_with(self._user.userprofile.access_token) self._repo_mock.delete.assert_called_once_with() if deleted: # Check index calls if the offering must have been deleted self.assertEquals(len(Offering.objects.filter(name=offering_name)), 0) self.se_object.remove_index.assert_called_with(offering) if tagged: self.tag_mock.delete_tag.assert_called_with(offering) else: self.assertEquals(self.tag_mock.delete_tag.call_count, 0) if del_resources: self.res_obj.offerings.remove.assert_called_with(pk) else: offering = Offering.objects.get(name=offering_name) self.assertEqual(offering.state, 'deleted') self.se_object.update_index.assert_called_with(offering) if market_pub: market = Marketplace.objects.get(name="test_marketplace") offerings_management.marketadaptor_factory.assert_called_once_with(market, self._user) self._adaptor_obj.delete_service.assert_called_once_with(offering_name) else: self.assertTrue(isinstance(error, err_type)) self.assertEquals(unicode(error), err_msg)
def test_delete_uploaded_offering(self): offering = Offering.objects.get(name='test_offering') # Mock os offerings_management.os = MagicMock() offerings_management.delete_offering(offering) error = False try: offering = Offering.objects.get(name='test_offering') except: error = True self.assertTrue(error)
def delete(self, request, organization, name, version): # If the offering has been purchased it is not deleted # it is marked as deleted in order to allow customers that # have purchased the offering to install it if needed # Get the offering try: org = Organization.objects.get(name=organization) offering = Offering.objects.get(name=name, owner_organization=org, version=version) except: return build_response(request, 404, 'Not found') # Check if the user can delete the offering if not offering.is_owner(request.user) and request.user.pk not in org.managers: return build_response(request, 403, 'Forbidden') # Delete the offering try: delete_offering(offering) except Exception, e: return build_response(request, 400, e.message)
def delete(self, request, organization, name, version): # If the offering has been purchased it is not deleted # it is marked as deleted in order to allow customers that # have purchased the offering to install it if needed # Get the offering try: offering, org = _get_offering(organization, name, version) except ObjectDoesNotExist as e: return build_response(request, 404, unicode(e)) except Exception as e: return build_response(request, 400, unicode(e)) # Check if the user can delete the offering if request.user.userprofile.current_organization != org\ or (not offering.is_owner(request.user) and not request.user.pk in org.managers): return build_response(request, 403, 'Forbidden') # Delete the offering try: delete_offering(offering) except Exception, e: return build_response(request, 400, unicode(e))
def delete(self, request, organization, name, version): # If the offering has been purchased it is not deleted # it is marked as deleted in order to allow customers that # have purchased the offering to install it if needed # Get the offering try: offering, org = _get_offering(organization, name, version) except ObjectDoesNotExist as e: return build_response(request, 404, unicode(e)) except Exception as e: return build_response(request, 400, unicode(e)) # Check if the user can delete the offering if request.user.userprofile.current_organization != org\ or (not offering.is_owner(request.user) and not request.user.pk in org.managers): return build_response(request, 403, 'Forbidden') # Delete the offering try: delete_offering(request.user, offering) except Exception, e: return build_response(request, 400, unicode(e))
def test_delete_published_offering_marketplace(self): offering = Offering.objects.get(name='test_offering3') offerings_management.delete_offering(offering) offering = Offering.objects.get(name='test_offering3') self.assertEqual(offering.state, 'deleted')