summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-11-13 12:40:56 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:21 +0100
commit774f682838f56443daf81c48ffde6377788a10f3 (patch)
treed3468cb46fefa64abf0f5c50d687ec29d64168aa /ishtar_common
parent813045eb9613d8ee88faec69ec79bc2bcdb3e49a (diff)
downloadIshtar-774f682838f56443daf81c48ffde6377788a10f3.tar.bz2
Ishtar-774f682838f56443daf81c48ffde6377788a10f3.zip
Labels: fix filtering
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py55
-rw-r--r--ishtar_common/models_common.py3
-rw-r--r--ishtar_common/utils_secretary.py5
3 files changed, 38 insertions, 25 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 1febb4664..89bee27cd 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -176,26 +176,17 @@ class ValueGetter(object):
continue
if field_name in self.GET_VALUES_EXCLUDE_FIELDS:
continue
+ if hasattr(value, 'get_values'):
+ new_prefix = prefix + field_name + '_'
+ values.update(
+ value.get_values(new_prefix, filtr=filtr, **kwargs))
if filtr and prefix + field_name not in filtr:
- if hasattr(value, 'get_values'):
- new_prefix = prefix + field_name + '_'
- new_filtr = self._get_values_update_sub_filter(filtr,
- new_prefix)
- values.update(
- value.get_values(new_prefix, filtr=new_filtr, **kwargs))
continue
if hasattr(self, "get_values_for_" + field_name):
values[prefix + field_name] = getattr(
self, "get_values_for_" + field_name)()
else:
- if hasattr(value, 'get_values'):
- new_prefix = prefix + field_name + '_'
- new_filtr = self._get_values_update_sub_filter(filtr,
- new_prefix)
- values.update(
- value.get_values(new_prefix, filtr=new_filtr, **kwargs))
- else:
- values[prefix + field_name] = value
+ values[prefix + field_name] = value
values.update(self._get_values_documents(prefix=prefix, filtr=filtr))
for extra_field in self.GET_VALUES_EXTRA:
values[prefix + extra_field] = getattr(self, extra_field) or ''
@@ -223,11 +214,12 @@ class ValueGetter(object):
value_list.append((key, str(values[key])))
for global_var in GlobalVar.objects.all():
values[global_var.slug] = global_var.value or ""
- values['VALUES'] = json.dumps(
- values, indent=4, sort_keys=True,
- skipkeys=True, ensure_ascii=False,
- separators=("", " : "),
- ).replace(" " * 4, "\t")
+ if not filtr or 'VALUES' in filtr:
+ values['VALUES'] = json.dumps(
+ values, indent=4, sort_keys=True,
+ skipkeys=True, ensure_ascii=False,
+ separators=("", " : "),
+ ).replace(" " * 4, "\t")
return values
@@ -1496,7 +1488,18 @@ class DocumentTemplate(models.Model):
key = s.groups()[0]
if key not in filtr:
filtr.append(key)
- return filtr
+ new_filter = []
+ for fil in filtr:
+ keys = fil.split('.')
+ prefix = ""
+ for k in keys:
+ if prefix:
+ prefix += '_'
+ if prefix + k in new_filter:
+ continue
+ new_filter.append(prefix + k)
+ prefix += k
+ return new_filter
def publish_labels(self, objects):
if not objects:
@@ -1509,12 +1512,18 @@ class DocumentTemplate(models.Model):
len_objects = len(objects)
names = []
+ item_re = r"items\.\d\.([A-Za-z0-9_.]*)(?:\|[^}]+)*"
filtr = self.get_filter(
self.template,
- # e.g.: {{items.4.key}}
- [r'{{ *items\.\d\.([A-Za-z0-9_.]*)(\|[A-Za-z0-9_.-]*)* *}}']
+ [
+ # {{items.4.key}}
+ r'{{ *' + item_re + r' *}}',
+ # {% if items.42.other_key %}
+ r'{% *if ' + item_re + r' *%}',
+ # {% for item in items.42.another_keys %}
+ r'{% *for +[A-Za-z0-9_]+ +in +' + item_re + r' *%}',
+ ]
)
-
for idx in range(int(len(objects) / self.label_per_page) + 1):
if idx * self.label_per_page >= len_objects:
break
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 98d435ce9..903d1d970 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -1745,7 +1745,8 @@ class Town(Imported, models.Model):
'year': self.year or ""}
return values
- def get_values(self, prefix='', no_values=False, no_base_finds=True):
+ def get_values(self, prefix='', no_values=False, filtr=None,
+ no_base_finds=True):
return {
prefix or "label": str(self),
prefix + "name": self.name,
diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py
index 7a4e930d8..a89e4b6a0 100644
--- a/ishtar_common/utils_secretary.py
+++ b/ishtar_common/utils_secretary.py
@@ -43,7 +43,10 @@ def human_date_filter(value):
def splitpart(value, index, char=','):
if not value or not index:
return ""
- return value.split(char)[index]
+ splited = value.split(char)
+ if len(splited) > index:
+ return splited[index]
+ return ""
class IshtarSecretaryRenderer(Renderer):