diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 55 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 3 | ||||
| -rw-r--r-- | ishtar_common/utils_secretary.py | 5 | 
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): | 
