Projet

Général

Profil

0001-generic-endpoint-define-optional-ordering-for-displa.patch

Lauréline Guérin, 30 avril 2020 14:46

Télécharger (3,87 ko)

Voir les différences:

Subject: [PATCH] generic endpoint: define optional ordering for display
 (#17730)

 passerelle/base/models.py      |  2 +-
 passerelle/utils/api.py        |  8 +++++-
 tests/test_generic_endpoint.py | 51 ++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 2 deletions(-)
passerelle/base/models.py
256 256
                    endpoint_info = copy.copy(method.endpoint_info)
257 257
                    endpoint_info.http_method = http_method
258 258
                    endpoints.append(endpoint_info)
259
        endpoints.sort(key=lambda x: (x.name or '', x.pattern or ''))
259
        endpoints.sort(key=lambda x: (x.display_order, x.name or '', x.pattern or ''))
260 260
        if hasattr(self, 'queries'):
261 261
            self.append_custom_queries(endpoints)
262 262
        return endpoints
passerelle/utils/api.py
44 44
                 cache_duration=None,
45 45
                 post=None,
46 46
                 show=True,
47
                 show_undocumented_params=True):
47
                 show_undocumented_params=True,
48
                 display_order=None):
48 49
        self.perm = perm
49 50
        self.methods = methods
50 51
        self.serializer_type = serializer_type
......
73 74
                self.long_descriptions['post'] = post.get('long_description')
74 75
        self.show = show
75 76
        self.show_undocumented_params = show_undocumented_params
77
        try:
78
            self.display_order = int(display_order)
79
        except (ValueError, TypeError):
80
            # if None or if wrong value, put it at the end
81
            self.display_order = 99999999
76 82

  
77 83
    def __call__(self, func):
78 84
        func.endpoint_info = self
tests/test_generic_endpoint.py
714 714
    app = login(app, username='admin', password='admin')
715 715
    resp = app.post_json('/mdel/test/create', params=payload, status=200)
716 716
    assert resp.json['data']['demand_id'] == '1-14-ILE-LA'
717

  
718

  
719
class DummyConnectorWithoutOrdering(DummyConnectorBase):
720
    @endpoint()
721
    def b(self, request):
722
        pass
723

  
724
    @endpoint(name='c', pattern='bb')
725
    def cb(self, request):
726
        pass
727

  
728
    @endpoint(name='c', pattern='aa')
729
    def ca(self, request):
730
        pass
731

  
732
    @endpoint()
733
    def a(self, request):
734
        pass
735

  
736

  
737
class DummyConnectorWithOrdering(DummyConnectorBase):
738
    @endpoint()
739
    def b(self, request):
740
        pass
741

  
742
    @endpoint(display_order='wrong value')
743
    def ba(self, request):
744
        pass
745

  
746
    @endpoint(name='c', pattern='bb', display_order='1')
747
    def cb(self, request):
748
        pass
749

  
750
    @endpoint(name='c', pattern='aa', display_order=1)
751
    def ca(self, request):
752
        pass
753

  
754
    @endpoint(display_order=42)
755
    def a(self, request):
756
        pass
757

  
758

  
759
@pytest.mark.parametrize('connector_class, expected_ordering', [
760
    (DummyConnectorWithoutOrdering, ['a', 'b', 'caa', 'cbb']),
761
    (DummyConnectorWithOrdering, ['caa', 'cbb', 'a', 'b', 'ba']),
762
])
763
def test_generic_up_in_endpoints_ordering(db, app, connector_class, expected_ordering):
764
    connector = connector_class()
765
    connector.id = 42
766

  
767
    assert ['%s%s' % (ep.name, ep.pattern or '') for ep in connector.get_endpoints_infos()] == expected_ordering
717
-