refactor(devops): Switch GitGroup Model to CenturionModel
ref: #772 #515 #759 #767
This commit is contained in:
@ -0,0 +1,46 @@
|
||||
# Generated by Django 5.1.9 on 2025-05-24 23:48
|
||||
|
||||
import access.models.tenancy_abstract
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('access', '0010_company_alter_entity_entity_type_alter_person_dob_and_more'),
|
||||
('core', '0026_remove_centurionaudit_model_notes'),
|
||||
('devops', '0012_alter_checkin_organization_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='gitgroup',
|
||||
name='id',
|
||||
field=models.AutoField(help_text='ID of the item', primary_key=True, serialize=False, unique=True, verbose_name='ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='gitgroup',
|
||||
name='model_notes',
|
||||
field=models.TextField(blank=True, help_text='Tid bits of information', null=True, verbose_name='Notes'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='gitgroup',
|
||||
name='organization',
|
||||
field=models.ForeignKey(help_text='Tenant this belongs to', on_delete=django.db.models.deletion.CASCADE, related_name='+', to='access.tenant', validators=[access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists], verbose_name='Tenant'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='GitGroupAuditHistory',
|
||||
fields=[
|
||||
('centurionaudit_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.centurionaudit')),
|
||||
('model', models.ForeignKey(help_text='Model this history belongs to', on_delete=django.db.models.deletion.CASCADE, related_name='audit_history', to='devops.gitgroup', verbose_name='Model')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'GIT Group History',
|
||||
'verbose_name_plural': 'GIT Group Histories',
|
||||
'db_table': 'devops_gitgroup_audithistory',
|
||||
'managed': True,
|
||||
},
|
||||
bases=('core.centurionaudit', models.Model),
|
||||
),
|
||||
]
|
@ -1,138 +1,15 @@
|
||||
from django.db import models
|
||||
|
||||
from access.fields import AutoCreatedField, AutoLastModifiedField
|
||||
from access.models.tenancy import TenancyObject
|
||||
from access.fields import AutoLastModifiedField
|
||||
|
||||
from core.models.centurion import CenturionModel
|
||||
|
||||
|
||||
class GitGroup(
|
||||
TenancyObject
|
||||
CenturionModel
|
||||
):
|
||||
|
||||
|
||||
class Meta:
|
||||
|
||||
ordering = [
|
||||
'organization',
|
||||
'path',
|
||||
'name',
|
||||
]
|
||||
|
||||
# unique_together = [ # Cant use until import is a feature
|
||||
# 'provider',
|
||||
# 'provider_pk'
|
||||
# ]
|
||||
|
||||
verbose_name = 'GIT Group'
|
||||
|
||||
verbose_name_plural = 'GIT Groups'
|
||||
|
||||
|
||||
class GitProvider(models.IntegerChoices):
|
||||
|
||||
GITHUB = 1, 'GitHub'
|
||||
GITLAB = 2, 'GitLab'
|
||||
|
||||
|
||||
|
||||
is_global = None
|
||||
|
||||
id = models.AutoField(
|
||||
blank=False,
|
||||
help_text = 'Primary key of the entry',
|
||||
primary_key=True,
|
||||
unique=True,
|
||||
verbose_name = 'ID'
|
||||
)
|
||||
|
||||
parent_group = models.ForeignKey(
|
||||
'self',
|
||||
blank = True,
|
||||
default = None,
|
||||
help_text = 'Parent Git Group this repository belongs to.',
|
||||
on_delete = models.PROTECT,
|
||||
null = True,
|
||||
related_name = '+',
|
||||
verbose_name = 'Parent Group',
|
||||
)
|
||||
|
||||
provider = models.IntegerField(
|
||||
blank = False,
|
||||
choices = GitProvider,
|
||||
help_text = 'GIT Provider for this Group',
|
||||
verbose_name = 'Git Provider'
|
||||
)
|
||||
|
||||
provider_pk = models.IntegerField(
|
||||
blank = True,
|
||||
help_text = 'Providers ID for this Group',
|
||||
null = True,
|
||||
unique = False,
|
||||
verbose_name = 'Provider ID'
|
||||
)
|
||||
|
||||
name = models.CharField(
|
||||
blank = False,
|
||||
help_text = 'Name of the Group',
|
||||
max_length = 80,
|
||||
null = False,
|
||||
unique = False,
|
||||
verbose_name = 'Name'
|
||||
)
|
||||
|
||||
path = models.CharField(
|
||||
blank = False,
|
||||
help_text = 'Path of the group',
|
||||
max_length = 80,
|
||||
null = False,
|
||||
unique = False,
|
||||
verbose_name = 'Path'
|
||||
)
|
||||
|
||||
description = models.TextField(
|
||||
blank = True,
|
||||
help_text = 'Description for this group',
|
||||
max_length = 300,
|
||||
null = True,
|
||||
verbose_name = 'Description'
|
||||
)
|
||||
|
||||
created = AutoCreatedField()
|
||||
|
||||
modified = AutoLastModifiedField()
|
||||
|
||||
|
||||
def __str__(self) -> str:
|
||||
|
||||
if self.parent_group:
|
||||
|
||||
return str(self.parent_group) + '/' + self.path
|
||||
|
||||
return self.path
|
||||
|
||||
|
||||
@property
|
||||
def provider_badge(self):
|
||||
|
||||
from core.classes.badge import Badge
|
||||
|
||||
text: str = self.get_provider_display()
|
||||
|
||||
return Badge(
|
||||
icon_name = f'{text.lower()}',
|
||||
icon_style = f'badge-icon-action-{text.lower()}',
|
||||
text = text,
|
||||
)
|
||||
|
||||
|
||||
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
|
||||
|
||||
if self.parent_group:
|
||||
|
||||
self.organization = self.parent_group.organization
|
||||
|
||||
super().save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
|
||||
|
||||
|
||||
app_namespace = 'devops'
|
||||
|
||||
documentation = ''
|
||||
@ -178,7 +55,6 @@ class GitGroup(
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
table_fields: list = [
|
||||
'name',
|
||||
'provider_badge',
|
||||
@ -187,15 +63,117 @@ class GitGroup(
|
||||
'created',
|
||||
]
|
||||
|
||||
def save_history(self, before: dict, after: dict) -> bool:
|
||||
|
||||
from devops.models.git_group_history import GitGroupHistory
|
||||
class Meta:
|
||||
|
||||
history = super().save_history(
|
||||
before = before,
|
||||
after = after,
|
||||
history_model = GitGroupHistory
|
||||
ordering = [
|
||||
'organization',
|
||||
'path',
|
||||
'name',
|
||||
]
|
||||
|
||||
# unique_together = [ # Cant use until import is a feature
|
||||
# 'provider',
|
||||
# 'provider_pk'
|
||||
# ]
|
||||
|
||||
verbose_name = 'GIT Group'
|
||||
|
||||
verbose_name_plural = 'GIT Groups'
|
||||
|
||||
|
||||
class GitProvider(models.IntegerChoices):
|
||||
|
||||
GITHUB = 1, 'GitHub'
|
||||
GITLAB = 2, 'GitLab'
|
||||
|
||||
|
||||
|
||||
is_global = None
|
||||
|
||||
parent_group = models.ForeignKey(
|
||||
'self',
|
||||
blank = True,
|
||||
help_text = 'Parent Git Group this repository belongs to.',
|
||||
on_delete = models.PROTECT,
|
||||
null = True,
|
||||
related_name = '+',
|
||||
verbose_name = 'Parent Group',
|
||||
)
|
||||
|
||||
|
||||
@property
|
||||
def provider_badge(self):
|
||||
|
||||
from core.classes.badge import Badge
|
||||
|
||||
text: str = self.get_provider_display()
|
||||
|
||||
return Badge(
|
||||
icon_name = f'{text.lower()}',
|
||||
icon_style = f'badge-icon-action-{text.lower()}',
|
||||
text = text,
|
||||
)
|
||||
|
||||
|
||||
return history
|
||||
provider = models.IntegerField(
|
||||
blank = False,
|
||||
choices = GitProvider,
|
||||
help_text = 'GIT Provider for this Group',
|
||||
verbose_name = 'Git Provider'
|
||||
)
|
||||
|
||||
provider_pk = models.IntegerField(
|
||||
blank = True,
|
||||
help_text = 'Providers ID for this Group',
|
||||
null = True,
|
||||
unique = False,
|
||||
verbose_name = 'Provider ID'
|
||||
)
|
||||
|
||||
name = models.CharField(
|
||||
blank = False,
|
||||
help_text = 'Name of the Group',
|
||||
max_length = 80,
|
||||
null = False,
|
||||
unique = False,
|
||||
verbose_name = 'Name'
|
||||
)
|
||||
|
||||
path = models.CharField(
|
||||
blank = False,
|
||||
help_text = 'Path of the group',
|
||||
max_length = 80,
|
||||
null = False,
|
||||
unique = False,
|
||||
verbose_name = 'Path'
|
||||
)
|
||||
|
||||
description = models.TextField(
|
||||
blank = True,
|
||||
help_text = 'Description for this group',
|
||||
max_length = 300,
|
||||
null = True,
|
||||
verbose_name = 'Description'
|
||||
)
|
||||
|
||||
modified = AutoLastModifiedField()
|
||||
|
||||
|
||||
def __str__(self) -> str:
|
||||
|
||||
if self.parent_group:
|
||||
|
||||
return str(self.parent_group) + '/' + self.path
|
||||
|
||||
return self.path
|
||||
|
||||
|
||||
|
||||
def clean_fields(self, exclude = None):
|
||||
|
||||
if self.parent_group:
|
||||
|
||||
self.organization = self.parent_group.organization
|
||||
|
||||
super().clean_fields( exclude = exclude )
|
||||
|
@ -24,7 +24,7 @@ router.register(r'git_repository(?:/(?P<git_provider>gitlab|github))?', git_repo
|
||||
router.register('git_repository/github/(?P<model_id>[0-9]+)/notes', github_repository_notes.ViewSet, feature_flag = '2025-00001', basename='_api_v2_github_repository_note')
|
||||
router.register('git_repository/gitlab/(?P<model_id>[0-9]+)/notes', gitlab_repository_notes.ViewSet, feature_flag = '2025-00001', basename='_api_v2_gitlab_repository_note')
|
||||
|
||||
router.register('git_group', git_group.ViewSet, feature_flag = '2025-00001', basename='_api_v2_git_group')
|
||||
router.register('git_group', git_group.ViewSet, feature_flag = '2025-00001', basename='_api_gitgroup')
|
||||
router.register('git_group/(?P<model_id>[0-9]+)/notes', git_group_notes.ViewSet, feature_flag = '2025-00001', basename='_api_v2_git_group_note')
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
Reference in New Issue
Block a user