From 717bd1e221e6607766daf3235fb6320829934623 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 20 Mar 2025 14:07:02 +0930 Subject: [PATCH] feat(devops): Base model for git repositories ref: #693 #515 --- app/devops/models/git_repository/__init__.py | 0 app/devops/models/git_repository/base.py | 129 +++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 app/devops/models/git_repository/__init__.py create mode 100644 app/devops/models/git_repository/base.py diff --git a/app/devops/models/git_repository/__init__.py b/app/devops/models/git_repository/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/devops/models/git_repository/base.py b/app/devops/models/git_repository/base.py new file mode 100644 index 00000000..e39c7612 --- /dev/null +++ b/app/devops/models/git_repository/base.py @@ -0,0 +1,129 @@ +from django.db import models + +from access.fields import AutoCreatedField, AutoLastModifiedField +from access.models.tenancy import TenancyObject + +from core import exceptions as centurion_exceptions + +from devops.models.git_group import GitGroup + + + +class GitRepository( + TenancyObject +): + """Base Model for Git Repositories + + To Add a Git Repository, Create a new model ensuring it inherits from this + model. + """ + + + class Meta: + + ordering = [ + 'organization', + 'git_group', + 'path', + ] + + verbose_name = 'GIT Repository' + + verbose_name_plural = 'GIT Repositories' + + + def validation_path(value): + + if '/' in value: + + raise centurion_exceptions.ValidationError( + detail = { + 'path': 'Path must not contain seperator `/`' + }, + code = 'path_contains_separator' + ) + + is_global = None + + id = models.AutoField( + blank = False, + help_text = 'Primary key of the entry', + primary_key = True, + unique = True, + verbose_name = 'ID' + ) + + provider = models.IntegerField( + blank = False, + choices = GitGroup.GitProvider, + help_text = 'Who is the git Provider', + null = False, + verbose_name = 'Provider', + ) + + provider_id = models.IntegerField( + blank = False, + help_text = 'Providers ID for this repository', + unique = True, + verbose_name = 'Provider ID' + ) + + git_group = models.ForeignKey( + GitGroup, + blank = False, + help_text = 'Git Group this repository belongs to.', + on_delete = models.PROTECT, + related_name = '+', + verbose_name = 'Group', + ) + + path = models.CharField( + blank = False, + help_text = 'Path to this repository, not including the organization', + max_length = 80, + null = False, + unique = True, + validators = [ validation_path ], + verbose_name = 'path' + ) + + name = models.CharField( + blank = False, + help_text = 'Name of the repository', + max_length = 80, + null = False, + unique = False, + verbose_name = 'Name' + ) + + description = models.TextField( + blank = True, + help_text = 'Repository Description', + max_length = 300, + null = True, + verbose_name = 'Description' + ) + + created = AutoCreatedField() + + modified = AutoLastModifiedField() + + + def __str__(self) -> str: + + return str(self.git_group) + '/' + self.path + + app_namespace = 'devops' + + documentation = '' + + page_layout: dict = [] + + + table_fields: list = [ + 'name', + 'provider', + 'path', + 'organization', + 'created', + ]