add schedule_deletion method and signal

This commit is contained in:
Wayne Witzel III
2017-06-29 00:15:11 -04:00
parent 7d283f1dfd
commit e84ecabe72
3 changed files with 26 additions and 8 deletions

View File

@@ -373,6 +373,16 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin):
raise ValidationError(_("Credential kind must be 'insights'."))
return self.insights_credential
@transaction.atomic
def schedule_deletion(self):
from awx.main.tasks import delete_inventory
if self.pending_deletion is True:
raise RuntimeError("Inventory is already pending deletion.")
self.websocket_emit_status('pending_deletion')
delete_inventory.delay(self.pk)
self.pending_deletion = True
self.save(update_fields=['pending_deletion'])
class SmartInventoryMembership(BaseModel):
'''

View File

@@ -510,3 +510,13 @@ def get_current_user_from_drf_request(sender, **kwargs):
request = get_current_request()
drf_request = getattr(request, 'drf_request', None)
return (getattr(drf_request, 'user', False), 0)
@receiver(pre_delete, sender=Organization)
def delete_inventory_for_org(sender, instance, **kwargs):
inventories = Inventory.objects.filter(organization__pk=instance.pk)
for inventory in inventories:
try:
inventory.schedule_deletion()
except RuntimeError, e:
logger.debug(e)