return NotImplemented
async def delete(self, user=None):
+ # Check if this package can be deleted
+ if not self.can_be_deleted():
+ log.debug("Won't delete package %s as it is still in use")
+ return
+
# Mark as deleted
self._set_attribute_now("deleted_at")
if user:
self._set_attribute("deleted_by", user)
# Unlink the payload
- await self.backend.unlink(self.path)
+ if self.path:
+ await self.backend.unlink(self.path)
# Reset path
self._set_attribute("path", None)
+ def can_be_deleted(self):
+ """
+ Checks if this package is being used somewhere else and
+ therefore cannot be deleted.
+ """
+ # If there any builds using this package, it cannot be deleted
+ if self.builds:
+ return False
+
+ # This package can be deleted
+ return True
+
@property
def uuid(self):
return self.data.uuid