This commit is contained in:
2024-09-28 17:37:29 +02:00
parent 8dfafa9404
commit fb4d566007
64 changed files with 32325 additions and 573 deletions
+16
View File
@@ -0,0 +1,16 @@
from functools import reduce
def recursive_getattr(obj, attr, *args, delimiter="__"):
"""Recursive getattr on a object, based on the attr name, delimited with the delimiter."""
def _getattr(obj, attr):
rg = getattr(obj, attr, *args)
# Usefull for getting attribute like `datetime__date` => will result in datetime.date()
if callable(rg):
return rg()
return rg
return reduce(_getattr, [obj] + attr.split(delimiter))
+38 -7
View File
@@ -1,9 +1,14 @@
from uuid import uuid4
from django.contrib.auth import get_user_model
from django.db import models
from django.db.models.fields.related import RelatedField
from app.utils.helpers import recursive_getattr
from uuid import uuid4
User = get_user_model()
@@ -17,9 +22,9 @@ class BaseQuerySet(models.QuerySet):
"text": field.verbose_name.capitalize(),
"align": "",
"encrypted": field.name in self.model.Encryption.fields,
"editable": field.name
not in self.model.Serialization.excluded_fields_edit,
"editable": field.name not in self.model.Serialization.excluded_fields_edit,
"field_widget": "v-textarea",
"choices": None,
}
}
@@ -41,6 +46,19 @@ class BaseQuerySet(models.QuerySet):
field_widget="v-select",
)
if field.choices:
ret[field.name].update(
text="",
field_widget="v-select",
choices=[
{
"value": c[0],
"text": c[1],
}
for c in field.choices
],
)
return ret
fields = {}
@@ -78,12 +96,25 @@ class BaseModel(models.Model):
class Encryption:
fields = ["name", "description", "custom_identifier"]
def serialize(self):
ret = {}
for field_name in self._meta.model.objects.headers().keys():
value = recursive_getattr(self, field_name)
if isinstance(value, BaseModel):
value = value.id
ret[field_name] = value
return ret
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
name = models.TextField(max_length=2048)
description = models.TextField(max_length=2048)
name = models.TextField(max_length=2048, blank=True, null=True)
description = models.TextField(max_length=2048, blank=True, null=True)
custom_identifier = models.TextField(max_length=2048, null=True)
custom_identifier = models.TextField(max_length=2048, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
last_modified_at = models.DateTimeField(auto_now=True)