59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
# Copyright (c) 2016 Ansible, Inc.
|
|
# All Rights Reserved.
|
|
|
|
# Django
|
|
from django.db import models
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
# AWX
|
|
from awx.api.versioning import reverse
|
|
from awx.main.models.base import CommonModelNameNotUnique
|
|
from awx.main.models.unified_jobs import UnifiedJobTemplate, UnifiedJob
|
|
|
|
__all__ = ('Label', )
|
|
|
|
|
|
class Label(CommonModelNameNotUnique):
|
|
'''
|
|
Generic Tag. Designed for tagging Job Templates, but expandable to other models.
|
|
'''
|
|
|
|
class Meta:
|
|
app_label = 'main'
|
|
unique_together = (("name", "organization"),)
|
|
ordering = ('organization', 'name')
|
|
|
|
organization = models.ForeignKey(
|
|
'Organization',
|
|
related_name='labels',
|
|
help_text=_('Organization this label belongs to.'),
|
|
on_delete=models.CASCADE,
|
|
)
|
|
|
|
def get_absolute_url(self, request=None):
|
|
return reverse('api:label_detail', kwargs={'pk': self.pk}, request=request)
|
|
|
|
@staticmethod
|
|
def get_orphaned_labels():
|
|
return \
|
|
Label.objects.filter(
|
|
organization=None,
|
|
unifiedjobtemplate_labels__isnull=True
|
|
)
|
|
|
|
def is_detached(self):
|
|
return bool(
|
|
Label.objects.filter(
|
|
id=self.id,
|
|
unifiedjob_labels__isnull=True,
|
|
unifiedjobtemplate_labels__isnull=True
|
|
).count())
|
|
|
|
def is_candidate_for_detach(self):
|
|
c1 = UnifiedJob.objects.filter(labels__in=[self.id]).count()
|
|
c2 = UnifiedJobTemplate.objects.filter(labels__in=[self.id]).count()
|
|
if (c1 + c2 - 1) == 0:
|
|
return True
|
|
else:
|
|
return False
|