summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-09-04 17:03:52 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-09-04 17:03:52 +0200
commit46799d5bca1f1d1f43e88e9d34817ae25221063c (patch)
treea56f84759a60b86ef28c4aca68311fc7fa942e14 /ishtar_common/models.py
parent30303bbc898814a1e54eaba7410bdc9fc9669d60 (diff)
downloadIshtar-46799d5bca1f1d1f43e88e9d34817ae25221063c.tar.bz2
Ishtar-46799d5bca1f1d1f43e88e9d34817ae25221063c.zip
✨ templates: clean and add fields for operations (refs #6435)
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py37
1 files changed, 23 insertions, 14 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index d4cac83df..6dc6d16c0 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -312,6 +312,8 @@ class ValueGetter:
def get_values(self, prefix="", no_values=False, filtr=None, **kwargs):
if not prefix:
prefix = self._prefix
+ if not filtr:
+ filtr = []
extra_args = ["getvalues", str(self.pk), prefix, "1" if no_values else "0"]
if filtr:
extra_args += filtr
@@ -333,14 +335,16 @@ class ValueGetter:
and prefix + "qrcode_path" not in exclude
):
values[prefix + "qrcode_path"] = self.qrcode_path
- for field_name in get_all_field_names(self):
+
+ for field_name in sorted(get_all_field_names(self) + self.GET_VALUES_EXTRA):
try:
value = getattr(self, field_name)
except (AttributeError, MultipleObjectsReturned):
continue
if (
- field_name in self.GET_VALUES_EXCLUDE_FIELDS
- or prefix + field_name in exclude
+ (field_name in self.GET_VALUES_EXCLUDE_FIELDS
+ or prefix + field_name in exclude) or
+ kwargs.get(f"no_{field_name}", False)
):
continue
if filtr and not any(
@@ -349,6 +353,17 @@ class ValueGetter:
continue
if hasattr(value, "get_values"):
new_prefix = prefix + field_name + "_"
+ new_exclude = exclude[:]
+ slugs = [getattr(self, "SLUG", ""), getattr(self, "ALT_SLUG", "")]
+ for slug in slugs:
+ if not slug:
+ continue
+ for s in (slug, new_prefix + slug, slug + "s",
+ new_prefix + slug + "s"):
+ if s not in new_exclude:
+ new_exclude.append(s)
+ new_kwargs = kwargs.copy()
+ new_kwargs["exclude"] = new_exclude
values.update(value.get_values(new_prefix, filtr=filtr, **kwargs))
if hasattr(self, "get_values_for_" + field_name):
values[prefix + field_name] = getattr(
@@ -357,12 +372,6 @@ class ValueGetter:
else:
values[prefix + field_name] = value
values.update(self._get_values_documents(prefix=prefix, filtr=filtr))
- for extra_field in self.GET_VALUES_EXTRA:
- if filtr and not any(
- extra_field for f in filtr if f.startswith(prefix + extra_field)
- ):
- continue
- values[prefix + extra_field] = getattr(self, extra_field) or ""
for key, val in values.items():
if val is None:
val = ""
@@ -376,7 +385,8 @@ class ValueGetter:
val = ""
values[key] = val
values.update(
- self.get_extra_values(prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
+ self.get_extra_values(prefix=prefix, no_values=no_values, filtr=filtr,
+ **kwargs)
)
# do not provide KEYS and VALUES for sub-items
if (prefix and prefix != self._prefix) or no_values:
@@ -2400,14 +2410,14 @@ class DocumentTemplate(models.Model):
get_values = "VALUES" in filtr
if get_values:
filtr = []
- extension = "txt" if get_values else self.template.name.split(".")[-1]
+ extension = "json" if get_values else self.template.name.split(".")[-1]
tempdir = tempfile.mkdtemp("-ishtardocs")
output_name = (
tempdir
+ os.path.sep
+ slugify(self.name.replace(" ", "_").lower())
+ "-"
- + datetime.date.today().strftime("%Y-%m-%d")
+ + datetime.datetime.now().strftime("%Y-%m-%d-%H%M")
+ "."
+ extension
)
@@ -2425,8 +2435,7 @@ class DocumentTemplate(models.Model):
sort_keys=True,
skipkeys=True,
ensure_ascii=False,
- separators=("", " : "),
- ).replace(" " * 4, "\t")
+ )
# initialize missing values
if filtr:
for k in filtr: