Projet

Général

Profil

0002-lazy-add-queryset-like-features-to-lazy-formdef-3224.patch

Frédéric Péters, 12 avril 2019 15:25

Télécharger (2,45 ko)

Voir les différences:

Subject: [PATCH 2/2] lazy: add queryset-like features to lazy formdef (#32244)

{% for formdata in form.formdef.objects.pending %}
  {{formdata.number}}
{% endfor %}
 wcs/variables.py | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)
wcs/variables.py
21 21
import qommon.misc
22 22
from qommon.evalutils import make_datetime
23 23
from qommon.templatetags.qommon import parse_datetime
24
from qommon.storage import (Or, Equal)
24 25

  
25 26

  
26 27
class LazyFormDefObjectsManager(object):
27
    def __init__(self, formdef):
28
    def __init__(self, formdef, criterias=None):
28 29
        self._formdef = formdef
30
        self._criterias = criterias
29 31

  
30 32
    @property
31 33
    def count(self):
32
        return self._formdef.data_class().count()
34
        return self._formdef.data_class().count(clause=self._criterias)
35

  
36
    def all(self):
37
        # mimicking django
38
        return LazyFormDefObjectsManager(self._formdef)
39

  
40
    def pending(self):
41
        status_filters = ['wf-%s' % x.id for x in
42
                          self._formdef.workflow.get_not_endpoint_status()]
43
        criterias = [Or([Equal('status', x) for x in status_filters])]
44
        return LazyFormDefObjectsManager(self._formdef, criterias)
45

  
46
    def done(self):
47
        status_filters = ['wf-%s' % x.id for x in
48
                          self._formdef.workflow.get_endpoint_status()]
49
        criterias = [Or([Equal('status', x) for x in status_filters])]
50
        return LazyFormDefObjectsManager(self._formdef, criterias)
33 51

  
34 52
    def __getattr__(self, attribute):
53
        # backward compatibility
35 54
        if attribute.startswith('count_status_'):
36 55
            status = attribute[len('count_status_'):]
37 56
            return len(self._formdef.data_class().get_ids_with_indexed_value(
38 57
                'status', 'wf-%s' % status))
39
        return super(FormDefSubstVar, self).__getattr__(attribute)
58
        return super(LazyFormDefObjectsManager, self).__getattr__(attribute)
59

  
60
    def __iter__(self):
61
        for formdata in self._formdef.data_class().select_iterator(clause=self._criterias):
62
            yield LazyFormData(formdata)
40 63

  
41 64

  
42 65
class LazyFormDef(object):
43
-