Projet

Général

Profil

0002-custom-views-remove-frequent-calls-to-criteria-less-.patch

Frédéric Péters, 24 août 2022 21:36

Télécharger (2,87 ko)

Voir les différences:

Subject: [PATCH 2/2] custom views: remove frequent calls to criteria-less
 select() (#68324)

 wcs/backoffice/management.py | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)
wcs/backoffice/management.py
83 83
    Nothing,
84 84
    NotNull,
85 85
    Null,
86
    Or,
86 87
    StrictNotEqual,
87 88
)
88 89
from ..qommon.substitution import CompatibilityNamesDict
......
799 800
    def set_default_view(self):
800 801
        if not get_request():
801 802
            return
802
        custom_views = list(self.get_custom_views())
803
        custom_views = list(
804
            self.get_custom_views(
805
                [
806
                    Equal('is_default', True),
807
                    Contains('visibility', ['any', 'owner']),
808
                ]
809
            )
810
        )
803 811

  
804 812
        # search for first default user custom view
805 813
        for view in custom_views:
806 814
            if view.visibility != 'owner':
807 815
                continue
808
            if not view.is_default:
809
                continue
810 816
            self.default_view = view
811 817
            return
812 818

  
......
814 820
        for view in custom_views:
815 821
            if view.visibility != 'any':
816 822
                continue
817
            if not view.is_default:
818
                continue
819 823
            self.default_view = view
820 824
            return
821 825

  
......
840 844
            raise errors.AccessUnauthorizedError()
841 845

  
842 846
    def get_custom_views(self, criterias=None):
847
        criterias = [
848
            Equal('formdef_type', self.formdef.xml_root_node),
849
            Equal('formdef_id', str(self.formdef.id)),
850
        ] + (criterias or [])
843 851
        for view in get_publisher().custom_view_class.select(clause=criterias):
844 852
            if view.match(get_request().user, self.formdef):
845 853
                yield view
......
2869 2877
            return self.ics()
2870 2878

  
2871 2879
        if not self.view:
2872
            for view in self.get_custom_views():
2873
                if view.get_url_slug() == component:
2874
                    return self.__class__(formdef=self.formdef, view=view)
2880
            view_slug = component
2881
            if view_slug.startswith('user-'):
2882
                view_slug = view_slug[5:]
2883
            for view in self.get_custom_views([Or([Equal('slug', view_slug), Equal('slug', component)])]):
2884
                return self.__class__(formdef=self.formdef, view=view)
2875 2885
            if component.startswith('user-'):
2876 2886
                get_session().message = (
2877 2887
                    'warning',
2878
-